【小ネタ】ネットワーク設定やIAM設定は正しいはずなのにEC2がSSMで接続できない時はAMIを疑う
こんにちは。クラウド事業本部の桑野です。
普段TerraformでAWSリソースを管理しているのですが、今回は小ネタです。
想像以上に解決に時間がかかったことがあったため、トラブルシューティングの切り口としてご共有できればと思います。
きっかけ
TerraformでプライベートなEC2インスタンスとRDSを構築し、SSMで踏み台接続するリソースを構築していた時のことです。

なぜかEC2がSSM接続できません・・・。
確認したこと
1. EC2からVPCエンドポイントへの接続確認
AWS Network Manager Reachability Analyzerを使用して、EC2インスタンスがVPCエンドポイントに到達できることを確認しました。

また以下の通り、セキュリティグループを設定していることも確認しました。
- 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エージェントがプリインストールされていない場合もあります。
同じような状況に陥って困っている方のお役に立てれば幸いです。
最後までご覧いただきありがとうございました。






