はじめに
EC2 Instance Connect Endpointを使うことで、EC2インスタンスにパブリックIPアドレスを付与せずにSSH接続が行えるようになりました。
実際に使ってみたいと思います。
使い方
準備
接続先となるEC2インスタンス
EC2 Instance Connectの導入が必要です。
Red Hat Enterprise Linuxなどはサポートされていないため、今回はEC2 Instance ConnectがプリインストールされたAmazon Linux 2023を使用します。
接続するユーザへの権限付与
接続するユーザにはEC2 Instance Connect Endpointを使用するためのIAMアクセス許可の付与が必要です。ドキュメントに従い権限付与を行いましょう。
セキュリティグループ
2つのセキュリティグループを作成します
- EC2 Instance Connect Endpointセキュリティグループ
EC2 Instance Connect Endpointに設定するセキュリティグループです。
アウトバウンドルールを以下のように修正します。
タイプ | プロトコル | ポート範囲 | 送信先 |
---|---|---|---|
SSH | TCP | 22 | インスタンスセキュリティグループルールのID |
- インスタンスセキュリティグループ
EC2インスタンスに設定するセキュリティグループです。
今回はセキュリティグループの設定で特定IPから接続許可の設定を行います。
インバウンドルールを以下のように修正します。
タイプ | プロトコル | ポート範囲 | ソース |
---|---|---|---|
SSH | TCP | 22 | 接続許可したいIPアドレス |
EC2 Instance Connect Endpointの作成
ドキュメント内に以下の記述があるため、注意しながら設定を行いましょう。
EC2 Instance Connect Endpoint は、作成後に変更することはできません。別のエンドポイント設定が必要な場合は、EC2 Instance Connect Endpoint を削除し、必要な設定で新しいエンドポイントを作成する必要があります。
「VPC」→「エンドポイント」→「エンドポイントを作成」と遷移し、エンドポイント作成画面に移動します。
エンドポイントの設定項目のサービスカテゴリは「EC2インスタンス接続エンドポイント」を選択します。
接続先のVPC、セキュリティグループは先ほど作成した、EC2 Instance Connect Endpointセキュリティグループを選択、サブネットをそれぞれ選択します。
ポイントとして、今回は接続元のIP制限をセキュリティグループで行いたいため、VPC選択時に追加設定メニューを開き、「クライアントIPの保持」メニューにある以下のチェックボックスをオンにします。
EC2 インスタンス接続エンドポイントは、クライアント IP の保存をサポートしています。リソースへの接続時にクライアントの IP アドレスをソースとして使用するように EC2 インスタンス接続エンドポイントを設定できます (preserveClientIp パラメータが true)。
ステータスが「使用可能」となれば準備は完了です。
接続してみる
AWS CLIを使って接続します。
aws ec2-instance-connect ssh --instance-id i-0123456789example --connection-type eice --eice-options maxTunnelDuration=3600 , #_ ~\_ ####_ Amazon Linux 2023 ~~ \_#####\ ~~ \###| ~~ \#/ ___ https://aws.amazon.com/linux/amazon-linux-2023 ~~ V~' '-> ~~~ / ~~._. _/ _/ _/ _/m/' Last login: Wed Nov 1 08:28:57 2023 from 61.200.96.103
無事接続完了できました。
オプションでポート転送の設定を追加したり、設定済みのキーペアの秘密鍵を使い接続することも可能です。使い勝手は通常のSSH接続とほぼ同等になっているかと思います。
あとがき
パブリックIPアドレスの削減策として有効活用できるサービスとして、有効活用しましょう。