Amazon EC2 Instance Connectを使用してEC2インスタンスに接続してみた
はじめに
Amazon EC2インスタンスへの接続方法はいくつかありますが、以下の接続方法をサービスコントロールポリシー(SCP)でIP制限したい場面がありました。
- AWS Systems Manager Session Manager
- EC2 Instance Connect Endpoint
- EC2 Instance Connect
制限を実装するにあたり、各接続方法の動作確認が必要でした。EC2 Instance Connectについては未検証だったため、今回試してみることにしました。
過去にやってみた記事もありますが、EC2 Instance Connect用のAWSマネージドプレフィックスリストが用意されるなど、アップデートもあるため、改めて検証してみます。EC2 Instance Connectに関する概要は以下の記事をご参照ください。
IAMポリシーの作成
EC2 Instance Connectを使用して接続するユーザー用のIAMポリシーを作成します。
EC2 Instance Connectを使用してEC2インスタンスに接続すると、EC2 Instance Connect APIによってSSHパブリックキーがインスタンスメタデータに送信され、60秒間保持されます。パブリックキーをインスタンスメタデータに送信するために、接続するユーザーに適切な権限を付与する必要があります。
AWSマネージドポリシー EC2InstanceConnect
を使用するか、以下の権限を含む独自のIAMポリシーを作成します。
{
"Version": "2012-10-17",
"Statement": [
{
"Sid": "EC2InstanceConnect",
"Action": [
"ec2:DescribeInstances",
"ec2-instance-connect:SendSSHPublicKey"
],
"Effect": "Allow",
"Resource": "*"
}
]
}
今回は権限を絞りませんが、特定のインスタンスや特定のOSユーザー名などで制限することも可能です。
詳細は以下のドキュメントをご参照ください。
セキュリティグループの設定
EC2インスタンス用のセキュリティグループを作成します。
Amazon EC2コンソールでEC2 Instance Connectを使用してインスタンスに接続する場合、許可が必要なトラフィックはEC2 Instance Connectサービスからのトラフィックです。ローカルコンピューターからインスタンスへの直接接続ではありません。
そのため、EC2 Instance ConnectサービスのIPアドレス範囲からのインバウンドSSHトラフィックを許可するセキュリティグループを作成する必要があります。
EC2用のセキュリティグループでは、プレフィックスリスト名 com.amazonaws.ap-northeast-1.ec2-instance-connect
に対してSSHタイプを許可します。
EC2インスタンスの起動
以下の設定でEC2インスタンスを起動します。
- OS: Amazon Linux 2023
- Amazon Linux 2023には、EC2 Instance Connectがプリインストールされています
- キーペア: キーペアなしで続行
- サブネット: パブリックサブネット
- パブリック IP の自動割り当て: 有効化
- IAMロール: なし(EC2 Instance Connectでは不要)
EC2 Instance Connectで接続
コンソールから接続タイプ パブリック IP を使用して接続
を選択して接続してみます。
問題なく接続できました。
まとめ
今回は、EC2 Instance Connectを使用してEC2インスタンスに接続する検証を行いました。
設定のポイントは以下のとおりです。
- IAMポリシー: 接続するユーザーにAWSマネージドポリシー
EC2InstanceConnect
または同等の権限を付与 - セキュリティグループ: AWSマネージドプレフィックスリスト
com.amazonaws.ap-northeast-1.ec2-instance-connect
からのSSH接続を許可 - EC2インスタンス: Amazon Linux 2023を使用(EC2 Instance Connectがプリインストール済み)
ただし、EC2 Instance Connectには制約があります。EC2インスタンスをパブリックサブネット上に配置し、パブリックIPアドレスを割り当てる必要があります。
セキュリティの観点では、比較的プライベートサブネットに配置する方が望ましいとされています。プライベートサブネット上のインスタンスに接続する場合は、EC2 Instance Connect EndpointやAWS Systems Manager Session Managerの利用を検討すべきでしょう。
参考