こんにちは!イーゴリです。
踏み台サーバーなしでプライベートサブネットにあるEC2に接続できる方法をご紹介します。
なお、2024 年 2 月 1 日からAWSすべてのパブリック IPv4 アドレスの利用に対して 1 IP アドレスあたり 0.005 USD/時間 が課金されることになりますので、コスト削減としても使えます。
前回の記事では、AWS Systems Managerエンドポイントを紹介しましたが、EC2のロールや複数のエンドポイントやSSM Agentなどの構築が必要です。
今回の記事では、1つのエンドポイントで、プライベートEC2インスタンスに接続できるようになります。
なんていい方法だ!
EC2 Instance Connect Endpointを使うメリット
SSM Session Managerと違って、下記が不要ですので、とても便利です!
- EC2のIAMロールが不要→セキュリティグループで制限する
- SSM Agent(ソフトの更新など)の面倒を見ることが不要
さらに、EC2 Instance Connect Endpointの課金はありませんが、SSM Session Managerを使う場合、最低でも2つ/3つのVPCエンドポイントを作る必要があるので、複数のエンドポイントの課金が発生します。
構成図
インターネットGWやNAT GWなどの環境ではなく、完全にクローズドな環境でEC2 Instance Connect Endpointを構築します。
構築
セキュリティグループの作成
EC2 Instance Connect Endpoint用のセキュリティグループの作成
下記の設定を行います。
インバウンドルール | アウトバウンドルール |
---|---|
なし | 対象EC2インスタンス用のセキュリティグループのSSH通信を許可 |
対象EC2インスタンス用のセキュリティグループの作成/修正
EC2 Instance Connect Endpointから通信を許可する必要があります。
インバウンドルール | アウトバウンドルール |
---|---|
EC2 Instance Connect Endpoint用のセキュリティグループからSSHを許可 | EC2 Instance Connect Endpoint用のセキュリティグループへ任意のTCPポートを許可 (すでに すべてが0.0.0.0/0になっている場合、アウトバウンドルールの追加対応は不要) |
EC2 Instance Connect Endpointの作成
[VPC] > [エンドポイント] > [エンドポイントを作成]を押下します。
[EC2 Instance Connect Endpoint]を選択し、名前を入力します。
適切なVPC、サブネットを選択し、先程作ったEC2 Instance Connect Endpoint用のセキュリティグループを選択します。
ステータスが[使用可能]になりましたら、接続することができるようになります。
ログインする方法(疎通確認方法)
[EC2] > 対象EC2を選択 > [接続]ボタンをクリックします。
[EC2 Instance Connect]タブで[EC2 Instance Connect エンドポイントを使用して接続する]を選択します。
ユーザー名を入力し、先程作成したエンドポイントを選択し、[接続]をクリックします。 ※ユーザー名を入力しない場合、デフォルトのユーザー名を使用します(Amazon Linuxの場合、ec2-user)
SSHセッションができました!
別のユーザーでログインしてみる
# adduser hogehoge
hogehogeで接続してみると、パスワードなしでログインできるようになっています。
注意点
料金
あるサブネットの EC2 Instance Connect Endpoint を使用して、別のアベイラビリティーゾーンにある別のサブネットのインスタンスに接続する場合、アベイラビリティーゾーン間のデータ転送に追加料金がかかります。
対象OS
Amazon Linux 2 2.0.20190618 以降/Ubuntu 20.04 以降であれば、問題なく使えますが、それ以下のバージョンだとEC2 Instance Connect がインストールされていないので、自分でインストールする必要があります。
他のOSにログインできるかについてはそれぞれのOSを検証する必要があります。
ちなみに、Windows OSにもログインできますが、別のセキュリティグループの設定や接続方法になりますので、今後紹介したいと思います。
冗長構成できない
現時点では、1つのVPCあたりに付き1つのInstance Connect Endpointしか作れません。
2つ目のエンドポイントを作成しようとしたら、下記のエラーが出ました。
その他
ポート 22 および 3389 のみがサポートされます。
EC2 Instance Connect Endpoint は IPv6 アドレスを使用する接続をサポートしていません。
クライアント IP の保存が有効の場合、接続するインスタンスは EC2 Instance Connect Endpoint と同じ VPC にある必要があります。
トラフィックが AWS Transit Gateway を経由してルーティングされる場合、クライアント IP の保存はサポートされません。
インスタンスタイプが C1、CG1、CG2、G1、G2、HI1、M1、M2、M3、T1である場合、クライアント IP 保存をサポートしません。これらのインスタンスタイプを使用している場合は、preserveClientIp パラメータを false に設定します。そうでない場合、EC2 Instance Connect Endpoint を使用してこれらのインスタンスタイプに接続しようとすると失敗します。preserveClientIp パラメータの詳細については、EC2 Instance Connect Endpoint の作成 コンソールプロシージャのステップ 3.d を参照してください。
参考資料
以上、御一読ありがとうございました。
イーゴリ (記事一覧)
クラウドインテグレーション部・エンジニア
特にTerraform(自動化)、ネットワーク系、DNS、VDI、Windows Serverに興味があります
日本国内旅行・ドライブが好きです