従来のSSH接続(ローカル端末からEC2インスタンスにキーペアを使ってSSH接続)はあまり推奨されてなさそうなので、AWSが推奨している接続方法でEC2に接続してみました。
AWSは「EC2 Instance Connect」や「Session Manager」での接続を推奨しているようですが、どちらも、一筋縄にはいかなかったので、次からはスムーズに設定するために必要な手順をメモしておきたいと思います。
「EC2 Instance Connect」で接続する場合
「EC2 Instance Connect」の画面イメージ
必要な設定
-
EC2にパブリックIPが振られている必要がある(EC2 Instance Connectはパブリック通信を用いる模様)
-
EC2にアタッチするセキュリティグループにて、以下の設定を行う必要がある
タイプ:SSH
ソース:3.112.23.0/29(※1)
※1 AWSの サービスに発行された推奨される IP ブロック
2024/3/22時点では、EC2を東京リージョンに設置している場合、以下の情報が「EC2 Instance Connect」の接続元として可能性があるとのことだった。(時期によって変わる可能性があるので、その度に要チェック)
{
"ip_prefix": "3.112.23.0/29",
"region": "ap-northeast-1",
"service": "EC2_INSTANCE_CONNECT",
"network_border_group": "ap-northeast-1"
},
必要な設定はこれだけだったと思います。特に追加費用等も不要ですね。(パブリックIP代くらいでしょうか)
参考にさせてもらった記事
「Session Manager」で接続する場合
「EC2 Instance Connect」の画面イメージ
必要な設定
- 以下のVPCエンドポイントを作成する必要がある
com.amazonaws.region.ssm
com.amazonaws.region.ec2messages
com.amazonaws.region.ssmmessages
※2 デフォルト設定の場合、172.31.0.0/16になると思われる。
ちなみに、上記のいずれかの設定ができていない状態で、Session Managerでの接続画面を開くと、以下のようなエラーが出るようです。
3つのVPCエンドポイントを作成すると1日あたり2$くらい費用がかかるようです。Session Managerで接続したいEC2が1台であろうが、100台であろうが同じVPCエンドポイントの費用がかかるので、小規模の環境の場合は割高になりますね。
参考にさせてもらった記事
まとめ
小規模な環境では、「EC2 Instance Connect」を使用するのが良いと思いました。(VPCエンドポイントの設定やVPCエンドポイントの費用を支払う必要がないという理由で)
中規模以上の場合は、「Session Manager」を使用するのが良いと思いました。(Systems Managerのフリートマネージャーで管理する等、管理面が強そう、「EC2 Instance Connect」での接続のために3.112.23.0/29などからのSSH接続を許可するのがスマートではなさそうという理由で)
追記
Session Managerを使用するための「VPCエンドポイント」を削除した後も、Session Managerを用いてEC2インスタンスに接続できてしまいました。EC2インスタンスを再起動すると、接続できなくなりましたが、Systems Managerのフリートマネージャーからは依然として接続できてしまいました。
その後、フリートマネージャーから接続できていたEC2インスタンスを終了させ(※3)、新しくEC2インスタンスを起動する(※4)と、フリートマネージャーに※3のインスタンスが表示されなくなり、※4のインスタンスも表示されなくなりました。
この動きから、一度フリートマネージャーに登録されたEC2インスタンスは、Session Managerの接続条件が揃っていなくても、該当のEC2インスタンスを終了するまでの間は、フリートマネージャー経由で接続が可能となってしまうと理解しました。
特に問題は発生しなさそうですが、AWS側の仕組みがどうなっているか気になります。
と、思いきやしばらくすると(5分ほど?)、フリートマネージャーに新しいインスタンスが表示されており、接続もできてしまいました。
VPCエンドポイントは削除しているのに、接続できる理由が謎です。EC2インスタンスの「接続」画面のセッションマネージャー画面からも接続できるようになっていました。
ということは、VPCエンドポイントの設定は不要と理解できます。(VPCエンドポイントを設定していない時は、フリートマネージャー経由でもEC2インスタンスの「接続」画面のセッションマネージャー画面からも接続できなかったのですが)
VPCエンドポイントの必要性が不明確になってしまいました。
歯切れの悪い結果となっていますが、VPCエンドポイントなしでSession Mangerが使用できるのは嬉しいので、様子を見ながら使用して、何か分かったら記事に残そうと思います。