インターネットを経由せずにセッションマネージャーでEC2に接続するテスト。
踏み台サーバの用意、EC2インスタンスへのSSHインバウンド通信許可などが不要となり、よりセキュアなSSH接続が可能となる(権限管理はIAMロールで行う)。
構成
東京リージョン(ap-northeast-1)で実施します。

VPCなどを作成
自動生成:SSM
DNSホスト名:有効
DNS解決:有効
今回はVPCエンドポイント経由で接続するのでインターネット接続はなしでOK(プライベートサブネットのみ作成)。
VPCエンドポイントの名前解決のため、DNSホスト名とDNS解決は有効にします。

セキュリティグループの作成
以下の2つのセキュリティグループを作成。
EC2にアタッチする用
名前:SSM-EC2-sg
インバウンド:許可なし
アウトバウンド:すべて許可
エンドポイントへのHTTPSアウトバウンド通信が許可されている必要がある
※すべて許可に含まれているためOK
エンドポイントにアタッチする用
名前:SSM-Endpoint-sg
インバウンド:HTTPS(443)を許可
アウトバウンド:すべて許可
アウトバウンドはエンドポイントへの通信(HTTPS)が許可されていればよい
EC2インスタンスの作成
名前:SSM-EC2
マシンイメージ:Amazon Linux 2023
インスタンスタイプ:t2micro
キーペア:なしで続行
ネットワーク設定:作成したVPC、サブネットを指定
パブリックIPの自動割り当て:無効化
セキュリティグループ:SSM-EC2-sg
Amazon Linux 2023の場合、SSM Agentが既定でインストール&有効化済み。
セッションマネージャーで接続するためキーペアはなしとする。
VPCエンドポイントを作成
以下のサービス毎に合計2つのエンドポイントを作成。
- com.amazonaws.ap-northeast-1.ssm
- com.amazonaws.ap-northeast-1.ssmmessages
タイプ:AWSサービス
VPCサブネット:作成したものを指定
セキュリティグループ:SSM-Endpoint-sg
ポリシー:フルアクセス
SSM Agentのバージョンが「3.3.40.0」より古い場合は「com.amazonaws.ap-northeast-1.ec2messages」のエンドポイントの作成も必要。
https://dev.classmethod.jp/articles/vpcendpoint-ec2messages-not-required/
IAMロールの作成・アタッチ
EC2がSSMと通信できるようIAMロールを作成。
信頼されたエンティティ:AWSのサービス
ユースケース:EC2
許可ポリシー:AmazonSSMManagedInstanceCore
ロール名:SSM-role
作成したIAMロールをEC2にアタッチ。
セッションマネージャーで接続
EC2インスタンスの接続->セッションマネージャーから接続。

無事接続することができた🙂
「SSM エージェントはオンラインではありません」というエラーが発生しEC2から接続できないことがあった。その場合、AWS Systems Manager側のダッシュボードから「セッションの開始」をすることでEC2側からも接続できるようになった。
AWS Systems Managerからもセッションが確立されていることが確認できた。


