はじめに
プライベートサブネットに配置したEC2へ、VPCエンドポイント経由でセッションマネージャーを用いて接続する場合の構成を図でまとめました。
構成図
①EC2(SSMエージェント)からSystems Managerへの接続
SSMエージェントがインストールされたEC2インスタンスは、Systems Managerに接続を試みます。
- プライベートサブネット内からVPC外部(AWS内部ネットワーク)へ接続する経路としてVPCエンドポイントを作成しています。
- EC2には、Systems Manager接続のための権限(IAM Role)を割り当てる必要があります。
- EC2、およびVPCエンドポイントにはセキュリティグループを設定する必要があり、許可する通信を適切に設定する必要があります。
②クライアントからEC2への接続
ユーザーはAWSコンソール画面などのクライアントからセッションマネージャーを用いた接続を開始します。
接続できない場合の確認ポイント
セッションマネージャーを用いてEC2インスタンスへ接続できない場合、以下ポイントを確認しましょう。
- EC2インスタンスにSSMエージェントはインストールされているか
- EC2インスタンスのIAMロールは適切か
- VPCエンドポイントは作成しているか
- EC2インスタンスのセキュリティグループでVPCエンドポイントへのアウトバウンドが許可されているか
- VPCエンドポイントのセキュリティグループでEC2インスタンスからのインバウンドが許可されているか
1. EC2インスタンスにSSMエージェントはインストールされているか
EC2インスタンスにSSMエージェントがインストールされていない場合は、インストールを行います。
AWSマネージドのAMIであれば基本的にSSMエージェントはプリインストールされています。
プリインストールされているAMIのリストは以下を参照ください。
2. EC2インスタンスのIAMロールは適切か
EC2インスタンスのIAMロールにAmazonSSMManagedInstanceCore
ポリシーを追加します。
その他のポリシーが不要な場合は、同ポリシーのみがセットされた同名のロールもAWSマネージドで用意されています。
3. VPCエンドポイントは作成しているか
EC2インスタンスがSystems Managerエンドポイントへ接続できるようにするため、以下のVPCエンドポイントが必要です。
- com.amazonaws.region.ssm
- com.amazonaws.region.ssmmessages
SSMエージェントのバージョンが3.3.40.0より前の場合、以下も必要です。
- com.amazonaws.region.ec2messages
最新のAMIであれば基本的に3.3.40.0以降が入っているかと思います。
→Amazon Linux 2023 の2024/9/7時点の最新のAMI(al2023-ami-2023.5.20240903.0-kernel-6.1-x86_64
)は3.3.380.0でした。
4. EC2インスタンスのセキュリティグループにVPCエンドポイントへのアウトバウンドルールが設定されているか
EC2インスタンスに設定したセキュリティグループのアウトバウンドルールにおいて、VPCエンドポイントへのHTTPS(ポート443)が許可されている必要があります。
Interface型のVPCエンドポイントはENI(ネットワークインターフェース)が作成されるため、ENIのプライベートIPアドレスをEC2のセキュリティグループのアウトバウンドルールとして許可します。
5. VPCエンドポイントのセキュリティグループでEC2インスタンスからのインバウンドが許可されているか
VPCエンドポイントに設定したセキュリティグループのインバウンドルールにおいて、EC2インスタンスからのHTTPS(ポート443)が許可されている必要があります。
IPアドレスを表現した構成図
接続失敗時のエラー
EC2からSystems Managerに接続できない時、EC2のAWSコンソール画面から接続する際には以下エラーが表示されます。
インスタンスはセッションマネージャーに接続されていません。
セッションマネージャーを使用してインスタンスに接続するには、インスタンスがSystems Manager エンドポイントに接続できる必要があります。
以下エラーが表示される場合もあります(おそらくIAMロールが適切でないとき)
SSMエージェントはオンラインではありません
SSMエージェントは Systems Manager エンドポイントに接続して自身をサービスに登録できませんでした。
ちなみに、セッションマネージャーでの接続が成功している状態でセキュリティグループを編集して接続できない状態にしても、再起動をかけるまでは接続することができました。
EC2インスタンスからSystemsManagerへの接続(構成図の青矢印)は、インスタンス起動時に行われ、SSMエージェントがSystems Managerへ登録を行っているのだと思います。