GAT技術ブログ

株式会社ギブ・アンド・テイクの技術ブログ

GAT技術ブログ

Session Manager が固まった?プロンプトが返ってこないときに確認すべき3つのポイント

はじめに(背景と目的)

AWS Systems Manager の Session Manager で「接続は成功するのにプロンプトが返らない」事象に遭遇しました。

結論から言うと、Session Manager のセッションログ出力が有効なのに、出力先へ到達できずタイムアウトしていたことが原因でした。

初見では原因がわかりづらく、ハマりやすいポイントだと感じたため、実際に確認した 事象の内容・原因・対処方法 を整理して共有します。

同様の現象に直面している方のトラブルシューティングの一助になれば幸いです。


遭遇した事象

  • Session Manager から EC2 に接続すると、セッションは確立されるがプロンプトが表示されず操作できない

  • 5 分程度待つと、ようやくプロンプトが返ってきて操作可能になる

  • それまでは即時にプロンプトが返ってきていたが、ある日突然この事象が発生した。


Systems Manager を利用するための前提条件

Session Manager を使って EC2 インスタンスに接続するには、以下の5つの条件を最低限満たす必要があります。

  • 条件1:AWS Systems Manager でサポートされている OS であること

  • 条件2:インスタンス内で SSM Agent が稼働していること

  • 条件3:インスタンスに適切な IAM ロールがアタッチされていること

  • 条件4:SSM エンドポイント(またはインターネット経由)への通信経路が確保されていること

  • 条件5:SSM 接続を開始する IAM ユーザー(またはロール)に、Session Manager 利用に必要な IAM 権限(例:ssm:StartSession など)が付与されていること
    ※参考:Session Manager のサンプル IAM ポリシー - AWS Systems Manager(2025年9月04日アクセス)

Session Manager の前提条件の詳細については、以下の公式ドキュメントをご参照ください。

※参考:AWS Systems Manager - ユーザーガイド(2025年9月04日アクセス)

これらの条件を満たした上で、以下の構成にて接続を試みたところ、今回の事象が発生しました。


事象の原因

調査の結果、Session Manager のログ出力先を S3 および CloudWatch Logs に設定していたにもかかわらず、

  • EC2 インスタンスはインターネット経由で S3/CloudWatch Logs に接続できない構成であった

  • さらに、それぞれの VPC エンドポイントも未作成

という状況が原因でした。

このため、SSM Agent がログ出力を試みるものの、S3/CloudWatch Logs への接続でタイムアウトが発生。

タイムアウト完了までプロンプトが返らないという挙動となっていました。

実際、事象解消後に /var/log/amazon/ssm/errors.log を確認すると、各サービスへの接続タイムアウトが記録されていました。

CloudWatch Logs への接続タイムアウトの様子

S3 への接続タイムアウトの様子

なお、タイムアウト完了後にプロンプトは返ってくるものの、指定した S3 バケットや CloudWatch Logs にはログが出力されない状態でした。


対処方法

以下の設定を追加したことで、プロンプトが即時に返り、ログも正しく出力されるようになりました。

1. S3 および CloudWatch Logs 用の VPC エンドポイントを作成

インスタンスはプライベートサブネット上にありインターネット非接続だったため、各サービスへのアクセスには VPC エンドポイントが必要です。

そのため、以下の VPC エンドポイントを作成しました。

S3 用:Gateway エンドポイント

インターフェースエンドポイントでも可ですが、今回は VPC 内の EC2 インスタンスからアクセスしたかったので、Gateway エンドポイントにしました。

CloudWatch Logs 用:インターフェースエンドポイント

注意点として、必要なのは CloudWatch Monitoring ではなく Logs 用のエンドポイントです。

EC2 から CloudWatch Logs へログを出力する場合はCloudWatch Logs 用の VPC エンドポイントが必要です。

2. セキュリティグループを適切に設定

EC2 インスタンス側と インターフェースエンドポイント側の両方で HTTPS(443)通信を許可するセキュリティグループ設定が必要です。

設定例:

3. EC2 にアタッチしている IAM ロールに、S3 バケットおよび CloudWatch Logs への書き込み権限を付与する

ログを S3/CloudWatch Logs に出力するには、EC2 にアタッチされた IAM ロールに以下のような権限が必要です。

設定例:

{
    "Version": "2012-10-17",
    "Statement": [
        {
            "Effect": "Allow",
            "Action": [
                "s3:PutObject"
            ],
            "Resource": [
                "< S3バケットのARN >/*"
            ]
        },
        {
            "Effect": "Allow",
            "Action": [
                "logs:CreateLogStream",
                "logs:PutLogEvents"
            ],
            "Resource": "< CloudWatch LogsグループのARN:* >"
        },
        {
            "Effect": "Allow",
            "Action": [
                "logs:DescribeLogGroups",
                "logs:DescribeLogStreams"
            ],
            "Resource": "arn:aws:logs:*:*:*"
        }
    ]
}

※ 上記は S3/CloudWatch Logs 双方で「暗号化を強制」していない場合を想定した例です。


まとめ

本記事では、Session Manager 接続時にプロンプトが返ってこない事象について、原因と対処方法を紹介しました。

  • 原因は、ログ出力先に指定した S3/CloudWatch Logs へ到達できない構成で、VPC エンドポイント未作成により接続がタイムアウトしていたことでした。

  • その結果、SSM Agent がログ出力処理で待ち状態となり、タイムアウト完了までプロンプトが返ってこない現象が発生していました。

  • 解決のためには以下の 3 点が重要でした。

  ① S3/CloudWatch Logs 用 VPC エンドポイントの作成

  ② EC2 側・インターフェースエンドポイント側双方の SG 設定

  ③ IAM ロールに必要な S3/Logs へのアクセス権限付与

これらを正しく設定することで、プロンプトが即時に返り、ログも正常に出力されるようになります。

Session Manager のトラブルシューティングでは、「ログ出力先の通信経路が確保されているか」を見落としがちです。もし同様の事象に遭遇した際は、まず VPC エンドポイントと権限まわりを確認することをおすすめします。