EC2インスタンスにおけるSSM Agentの設定手順

このブログシリーズ 「クラウドセキュリティ 実践集」 では、一般的なセキュリティ課題を取り上げ、「なぜ危険なのか?」 というリスクの解説から、「どうやって直すのか?」 という具体的な修復手順(コンソール、AWS CLI、Terraformなど)まで、分かりやすく解説します。
この記事では、SecurifyHubで検出される「[SSM.1] Amazon EC2 インスタンスは AWS Systems Managerによって管理する必要があります」について解説します。

ポリシーの説明
Systems Manager の Security Hub コントロール – AWS Security Hub
このコントロールは、アカウント内の停止および実行中のEC2インスタンスが、AWS Systems Managerによって管理されているかどうかをチェックする。 Systems Managerは、AWSインフラストラクチャを表示および制御するために使用できるAWSサービスです。
リスク
AWS Systems Manager(SSM)は、EC2インスタンスおよびオンプレミスのサーバーや仮想マシンを大規模に管理、自動化、監査するための強力なサービスです。EC2インスタンスがSSMによって管理されていない場合、以下のようなセキュリティおよび運用のリスクが発生します。
- セキュリティの脆弱性: SSMは、パッチ適用、設定管理、セキュリティポリシーの適用を自動化するのに役立ちます。管理されていないインスタンスは、OSやアプリケーションの脆弱性が放置され、セキュリティ侵害の対象となる可能性が高まります。
- コンプライアンス違反: 多くのコンプライアンスフレームワークでは、システムの設定管理、パッチ適用状況、セキュリティ監査が求められます。SSMで管理されていないインスタンスは、これらのコンプライアンス要件を満たせない可能性があります。
- 運用上の非効率性: SSMは、リモートコマンドの実行、インベントリ収集、自動化されたワークフローを提供します。管理されていないインスタンスでは、これらの操作を手動で行う必要があり、運用コストの増加とヒューマンエラーのリスクが高まります。
- 可視性の欠如: SSMは、インスタンスのインベントリ情報(OS、アプリケーション、パッチレベルなど)を収集し、一元的に可視化できます。管理されていないインスタンスは、この可視性から外れるため、環境全体の健全性やセキュリティ状態の把握が困難になります。
- 緊急対応の遅延: セキュリティインシデント発生時や緊急のパッチ適用が必要な場合、SSMによる管理がなければ、対象インスタンスの特定と対応に時間がかかり、復旧が遅延する可能性があります。
対策
EC2インスタンスをAWS Systems Managerによって管理された状態にすることは、セキュリティ体制の強化、運用効率の向上、およびコンプライアンス維持のために不可欠です。
- SSM Agentのインストールと設定: EC2インスタンスにSSM Agentがインストールされ、適切に設定されていることを確認します。Amazon Linux AMIなど、一部のAMIにはSSM Agentがプリインストールされています。
- 適切なIAMロールの付与: EC2インスタンスに、SSMサービスと通信するための適切なIAMインスタンスプロファイル(ロール)が付与されていることを確認します。このロールには、
AmazonSSMManagedInstanceCore
などの管理ポリシーが含まれている必要があります。 - ネットワーク接続の確認: SSM AgentがSSMサービスのエンドポイントと通信できるよう、ネットワーク接続性(VPCエンドポイントまたはインターネットゲートウェイ経由)が確保されていることを確認します。
- Automationドキュメントの活用: SSM Automationドキュメントを使用して、新規インスタンスの起動時や既存インスタンスに対して、SSM AgentのインストールやIAMロールの割り当てを自動化します。
- SSM Complianceの活用: SSM Compliance機能を使用して、インスタンスのパッチ適用状況や設定の準拠状況を継続的にスキャンし、ポリシー違反を特定して是正します。
修復方法
AWSコンソールでの修復手順
AWSコンソールを使用して、EC2インスタンスがSystems Managerによって管理されているかを確認し、管理されていないインスタンスをSSMに登録します。

- 管理対象インスタンスの確認:
- AWSコンソールにログインし、Systems Managerサービスを開きます。
- 左側のナビゲーションペインで、**「フリートマネージャー」**を選択します。
- ここに表示されるインスタンスがSSMによって管理されているインスタンスです。EC2インスタンスのリスト(EC2サービスコンソール)と比較し、不足しているインスタンスを特定します。
- 管理されていないEC2インスタンスをSSMに登録する:
- EC2コンソールに移動し、管理されていないEC2インスタンスを選択します。
- IAMロールの確認と付与:
- インスタンスの詳細タブで「IAMロール」を確認します。SSM管理に必要なロール(例:
AmazonSSMManagedInstanceCore
ポリシーがアタッチされたロール)が付与されていることを確認します。 - もし適切なロールが付与されていない場合は、以下の手順で新しいロールを作成して付与します。
- IAMコンソールに移動し、「ロール」から「ロールを作成」をクリックします。
- 「AWSサービス」を選択し、「EC2」を選択します。
- 「ポリシーの許可」で「AmazonSSMManagedInstanceCore」を検索して選択し、ロール名を入力して作成します。
- EC2コンソールに戻り、対象のインスタンスを選択し、「アクション」→「セキュリティ」→「IAMロールを変更」を選択し、作成したロールを割り当てて「IAMロールを更新」をクリックします。
- SSM Agentの確認とインストール:
- インスタンスにSSH/RDPで接続し、SSM Agentが実行されているかを確認します。
- Linux:
sudo systemctl status amazon-ssm-agent
またはsudo service amazon-ssm-agent status
- Windows: タスクマネージャーで「AmazonSSMAgent」サービスを確認
- Linux:
- もしSSM Agentがインストールされていない場合や実行されていない場合は、以下のAWSドキュメントを参考にインストールまたは起動します。
- インスタンスにSSH/RDPで接続し、SSM Agentが実行されているかを確認します。
- ネットワーク接続の確認:
- インスタンスがVPCエンドポイントまたはインターネットゲートウェイ経由でSSMサービスのエンドポイント(例:
ssm.REGION.amazonaws.com
,ssmmessages.REGION.amazonaws.com
,ec2messages.REGION.amazonaws.com
)にアクセスできることを確認します。
- インスタンスがVPCエンドポイントまたはインターネットゲートウェイ経由でSSMサービスのエンドポイント(例:
- インスタンスの詳細タブで「IAMロール」を確認します。SSM管理に必要なロール(例:
- SSMフリートマネージャーでの再確認:
- しばらく待ってから、再度Systems Managerの**「フリートマネージャー」**を確認し、対象のEC2インスタンスがリストに表示され、「ステータス」が「オンライン」になっていることを確認します。
Terraformでの修復手順
Terraformで既存のEC2インスタンスをSystems Managerで管理できるようにするには、主にインスタンスに適切なIAMロールを付与し、SSM Agentがインストールされていることを前提とします。SSM Agentのインストールは通常、AMIに含まれるか、ユーザーデータスクリプトで自動化されます。
以下は、既存のEC2インスタンスにSSM管理用のIAMロールをアタッチする例です。
# 既存のEC2インスタンスのIDを取得 (例: データソースを使用)
data "aws_instance" "existing_ec2" {
filter {
name = "tag:Name"
values = ["your-unmanaged-ec2-instance"] # 管理したいEC2インスタンスの名前に置き換えてください
}
instance_state = "running" # または "stopped"
}
# SSM管理に必要なIAMロールを作成 (または既存のロールを参照)
resource "aws_iam_role" "ssm_managed_instance_role" {
name = "SSMManagedInstanceRole"
assume_role_policy = jsonencode({
Version = "2012-10-17"
Statement = [
{
Action = "sts:AssumeRole"
Effect = "Allow"
Principal = {
Service = "ec2.amazonaws.com"
}
},
]
})
}
# SSM管理ポリシーをIAMロールにアタッチ
resource "aws_iam_role_policy_attachment" "ssm_managed_instance_policy_attachment" {
role = aws_iam_role.ssm_managed_instance_role.name
policy_arn = "arn:aws:iam::aws:policy/AmazonSSMManagedInstanceCore"
}
# EC2インスタンスにIAMインスタンスプロファイルをアタッチ
resource "aws_iam_instance_profile" "ssm_instance_profile" {
name = "SSMManagedInstanceProfile"
role = aws_iam_role.ssm_managed_instance_role.name
}
# 既存のEC2インスタンスにIAMインスタンスプロファイルを関連付ける
# 注意: 既存のインスタンスにIAMロールを変更する場合、インスタンスの再起動が必要な場合があります。
# Terraformでは、aws_instance リソースの iam_instance_profile を更新することで変更できます。
# 既に存在する場合は、aws cliなどを利用してアタッチするか、
# インスタンスを破棄・再作成する際にこのプロファイルを指定することになります。
# 既存インスタンスへのアタッチはTerraformでは直接サポートされていないため、
# 以下は概念的な表現です。
# AWS CLI を使用する場合の例:
# aws ec2 associate-iam-instance-profile --instance-id i-xxxxxxxxxxxxxxxxx --iam-instance-profile Name=SSMManagedInstanceProfile
# もしインスタンスがTerraformで管理されている場合、aws_instance リソースを更新します。
/*
resource "aws_instance" "managed_ec2" {
# ... 他の設定 ...
iam_instance_profile = aws_iam_instance_profile.ssm_instance_profile.name
}
*/
重要な注意点: 既存のEC2インスタンスにIAMインスタンスプロファイルを関連付ける機能は、Terraformのaws_instance
リソースの直接的な属性としては提供されていません。インスタンス作成時にのみ指定可能です。既存のインスタンスにSSM管理用のIAMロールを付与するには、以下のいずれかの方法を取る必要があります。
- AWS CLI / SDK / コンソールを使用: 最も一般的な方法です。
aws ec2 associate-iam-instance-profile --instance-id i-xxxxxxxxxxxxxxxxx --iam-instance-profile Name=SSMManagedInstanceProfile
- EC2インスタンスの再作成: インスタンスを破棄し、新しいインスタンスを作成する際にSSM管理用のIAMインスタンスプロファイルを指定します。この方法は、運用中のシステムではダウンタイムが発生するため、慎重な検討が必要です。
- ユーザーデータによるSSM Agentのインストール: SSM AgentがインストールされていないAMIを使用している場合は、インスタンスのユーザーデータスクリプトにSSM Agentのインストールコマンドを含めることで、起動時に自動的にインストールさせることができます。
Terraformで管理する新規EC2インスタンスについては、aws_instance
リソースに iam_instance_profile
を直接指定することで、SSM管理対象とすることが可能です。
最後に
この記事では、AWS Systems Managerによって管理されていないEC2インスタンスが存在する状態について、リスクと対策を解説しました。SSMによるインスタンス管理は、セキュリティの強化、運用の自動化、そしてコンプライアンスの維持に不可欠です。未管理のインスタンスを特定し、SSM管理下におくことで、クラウド環境全体の健全性と効率性を向上させましょう。
この問題の検出は弊社が提供するSecurifyのCSPM機能で簡単に検出及び管理する事が可能です。
運用が非常に楽に出来る製品になっていますので、ぜひ興味がある方はお問い合わせお待ちしております。
最後までお読みいただきありがとうございました。この記事が皆さんの役に立てば幸いです。