Runbookを使ってSession ManagerやFleet Managerでインスタンスに接続できないときの原因を調べる

Systems Managerの機能であるSession ManagerやFleet Managerを利用すると、AWSコンソール上からプライベートサブネットにあるEC2に踏み台インスタンスを利用することなくアクセスできます。
しかし、特にプライベートなEC2で利用する場合では前提として必要になる設定がいくつあるため、インスタンスに接続できないときの原因調査がやや面倒でもあります。
こういった場合に使えるAWSSupport-TroubleshootManagedInstance
runbookを紹介します。
インスタンスの用意
テスト用にプライベートサブネットに配置したEC2を作成しました。
セキュリティグループ設定はインバウンドでSSHを許可、アウトバウンドは全て許可しています。

その他の設定はしていないので、マネージドノードとして検出されていません。

AWSSupport-TroubleshootManagedInstance
この状態で原因調査を始めてみましょう。
Systems Manager > Automation > Execute runbookで AWSSupport-TroubleshootSessionManager
を検索します。

「オートメーションを実行する」をクリック

スクロールして、Input parametersの「Show managed instance only」を「Show all instances」に変更して調べたいインスタンスを選択してExecute。

Overall statusが「Success」になるまでしばらく待ちます。
SuccessになったらOutputsを確認。

「1. SSM Instance Information」がFAILEDになっています。
メッセージに従って「2. Managed Instance Troubleshooting Result」を確認すると、①必要なVPCエンドポイントがないことと②インスタンスプロファイルがないことが検出されています。
①VPCに必要なエンドポイント(ssm, ssmmessages, ec2messages)の作成と、②AmazonSSMManagedInstanceCore
ポリシーを付与したIAMロールをテストインスタンスに設定します。
設定ができたら同様の手順で再度実行してみます。

作成したVPCエンドポイントのセキュリティグループに、インスタンスからの443通信の許可がありませんでした。
また、[OK]になっているので分かりにくいですが、よく読むとエンドポイントがサブネットにアタッチされていないことも確認できます。

サブネットへの紐づけとインバウンドルールの設定を行い再度実行してみます。

「1. SSM Instance Information」「2. SSM Agent Version Check Result」ともにPASSEDになっていました。
(Session Managerに登録されるまでには時間がかかるため、実際には時間を空けて再実行しています)

また、レポートに追加の情報も出力されています。
オプションで必要になるKMS、S3、ClowdWatch Logsのエンドポイントがないことによるメッセージが表示されてました。
Session Managerは使えるのに一部の機能が使えない、といったケースの調査にも利用できそうです。

マネージドノードに登録されていることも確認できました。
注意事項
Runbookの説明にもありますが、内部でVPC Reachability Analyzerを使用しているため実行毎に料金が発生します。
また、エンドポイントについては「2. SSM Agent Version Check Result」ではssmエンドポイントしか確認していません。
試しにssmmessagesとec2messagesのエンドポイントを削除して実行したところ、「getAgentDiagnosticLinux」のステップ(今回はAmazon Linux 2023インスタンスを使用)でタイムアウトとなり、レポート中では「6. Session Manager Connectivity Check Result」でFAILEDが発生しました。ssmmessagesエンドポイントの見落としは発生せずに済みそうです。

ec2messagesエンドポイントについては、ユーザーガイドに必要である記述はあるものの、「SSM Agent のバージョン 3.3.40.0 以降、Systems Manager は、使用可能な場合には ec2messages:*
エンドポイント (Amazon Message Delivery Service) の代わりに ssmmessages:*
エンドポイント (Amazon Message Gateway Service) を使用するようになりました。」とあるため、 AWSSupport-TroubleshootSessionManager
ではチェックしていないのかもしれません(2025年4月時点)。