【小ネタ】ネットワーク設定やIAM設定は正しいはずなのにEC2がSSMで接続できない時はAMIを疑う

【小ネタ】ネットワーク設定やIAM設定は正しいはずなのにEC2がSSMで接続できない時はAMIを疑う

2025.11.08

こんにちは。クラウド事業本部の桑野です。
普段TerraformでAWSリソースを管理しているのですが、今回は小ネタです。
想像以上に解決に時間がかかったことがあったため、トラブルシューティングの切り口としてご共有できればと思います。

きっかけ

TerraformでプライベートなEC2インスタンスとRDSを構築し、SSMで踏み台接続するリソースを構築していた時のことです。

スクリーンショット 2025-11-07 0.43.30

なぜかEC2がSSM接続できません・・・。

確認したこと

1. EC2からVPCエンドポイントへの接続確認

AWS Network Manager Reachability Analyzerを使用して、EC2インスタンスがVPCエンドポイントに到達できることを確認しました。

スクリーンショット 2025-11-07 0.45.21

また以下の通り、セキュリティグループを設定していることも確認しました。

  • EC2のセキュリティグループ:VPCエンドポイントへの443ポートのアウトバウンド通信が許可されている
  • VPCエンドポイントのセキュリティグループ:EC2からの443ポートのインバウンド通信が許可されている

EC2インスタンスにアタッチされているプロファイルの確認

AmazonSSMManagedInstanceCoreが付与されていることを確認しました


他に見落としていることはないかな・・・?

原因

EC2インスタンスにSSM agentがインストールされていませんでした。
マネジメントコンソールから確認するとal2023-ami-minimal-2023.9.20251105.0-kernel-6.1-x86_64となっていました。
原因は起動に使われていたAMIがSSMエージェントのプリインストールがされないイメージだったからですね。

Terraformでは下記のようなAMIの参照の仕方をしていたのですが、これだとminimalのAMIが抜擢される可能性があります。

data "aws_ami" "main" {
  most_recent = true
  owners      = ["amazon"]

  filter {
    name   = "name"
    values = ["al2023-ami-*-x86_64"]
  }

  filter {
    name   = "virtualization-type"
    values = ["hvm"]
  }
}

minimalを避けるには下記のようにフィルタリングを変更しました。

data "aws_ami" "main" {
  most_recent = true
  owners      = ["amazon"]

  filter {
    name   = "name"
    values = ["al2023-ami-2023.*-kernel-6.1-x86_64"]
  }

  filter {
    name   = "virtualization-type"
    values = ["hvm"]
  }
}

修正前はminimalを含む全てがマッチします。
修正後は標準のAMIのみがマッチします。

まとめ

もしもネットワーク設定やIAMに問題がないのに、SSM接続ができないとなった場合、EC2インスタンスにSSMエージェントがインストールされているかどうかを疑いましょう。
使用しているAMIによってはSSMエージェントがプリインストールされていない場合もあります。

同じような状況に陥って困っている方のお役に立てれば幸いです。
最後までご覧いただきありがとうございました。

この記事をシェアする

FacebookHatena blogX

関連記事