AWS Organization 内での SSM Agent の管理
このセクションでは、AWS Organization 内での SSM エージェントのインストールを管理する方法を説明し、CloudFormation、Terraform、Shell、PowerShell、Ansible、Chef、および Puppet のサンプルコードを提供します。
このコードはサンプルコードであり、本番環境で使用する前に、開発環境で十分にテストおよび検証する必要があることにご注意ください。
SSM Agent について
前のセクションで説明したように、Systems Manager を使用して環境内のノードの管理を開始するには、ノードがマネージドである必要があります。つまり、SSM Agent がマシンにインストールされており、エージェントが必要なアクセス許可を持って Systems Manager サービスエンドポイントと通信できる状態である必要があります。
AWS Systems Manager Agent (SSM Agent) は、Amazon Elastic Compute Cloud (Amazon EC2) インスタンス、エッジデバイス、オンプレミスサーバー、および仮想マシン (VM) 上で動作する Amazon のソフトウェアです。SSM Agent のソースコードは GitHub で公開されています。SSM Agent により、Systems Manager はこれらのリソースを更新、管理、および設定することが可能になります。エージェントは AWS クラウド内の Systems Manager サービスからのリクエストを処理し、リクエストで指定された内容に従って実行します。
そのため、SSM Agent がノードにインストールされていることを確認することは必要不可欠であり、AWS Systems Manager サービスを使用したノード管理操作を開始する際に最初に対処すべき手順です。
オペレーティングシステムのサポート
SSM Agent は、幅広いオペレーティングシステムおよびマシンタイプをサポートしています。お使いのオペレーティングシステム (OS)、OS バージョン、およびマシンタイプがサポートされているかどうかを確認するには、ユーザーガイドのサポートされているオペレーティングシステムとマシンタイプを参照してください。
SSM Agent がプリインストールされた AMI
Systems Manager を使い始めるにあたり、AWS Systems Manager Agent (SSM Agent) は、AWS および信頼できるサードパーティが提供する一部の Amazon Machine Images (AMIs) にプリインストールされています。プリインストールされているオペレーティングシステムの一覧については、SSM Agent がプリインストールされた AMI を検索するを参照してください。
SSM Agent のインストール方法
SSM Agent をサポートするオペレーティングシステムを理解したところで、SSM Agent がプリインストールされていないインスタンスにエージェントをインストールするさまざまな方法を見ていきましょう。インストールのアプローチは、主に 2 つのシナリオに分類できます。
- 新しいインスタンスのデプロイ: 新しいインスタンスの起動時に SSM Agent をインストールします。
- 既存のインスタンスの管理: すでに実行中のインスタンスに SSM Agent をインストールします。
新しいインスタンスへの SSM Agent のインストール
新しいインスタンスを起動する際に、SSM Agent のインストールを初期セットアッププロセスに組み込むことで、最初から一貫した管理機能を確保できます。このアプローチにより、デプロイ後のインストール作業が不要になります。Golden AMI、ユーザーデータスクリプト、またはインフラストラクチャ as code ツールなど、さまざまな方法でこれを実現できます。方法の選択は、多くの場合、組織のデプロイメント慣行とスケーリング要件によって異なります。
Golden AMI アプローチ
Golden AMI とは、EC2 インスタンスを起動するための標準化されたテンプレートとして機能する、カスタマイズされた Amazon Machine Image です。Systems Manager との統合において、組織は SSM Agent をプリインストールした Golden AMI を作成することができ、これらの AMI から起動されたすべてのインスタンスが Systems Manager を通じて即座に管理可能な状態になることを保証します。このアプローチにより、起動後のインストールスクリプトが不要になり、デプロイ失敗のリスクが軽減されます。
ゴールデン AMI の作成
- 手動: Golden AMI を手動で作成するには、インスタンスを起動し、SSM Agent をインストールして設定し、設定をテストしてから、そのインスタンスから AMI を作成します。
- EC2 Image Builder: Golden イメージの作成に EC2 Image Builder を使用している場合は、イメージレシピを設定し、出力イメージに SSM Agent を保持するオプションを選択します。
- Hashicorp Packer: Hashicorp Packer を使用している場合は、シェル Packer プロビジョナーを使用してシェルコマンドを実行し、SSM Agent をインストールします。
{
"provisioners": [
{
"type": "shell",
"inline": [
"if [ -f /etc/system-release ]; then",
" # Amazon Linux",
" sudo yum install -y amazon-ssm-agent",
" sudo systemctl enable amazon-ssm-agent",
" sudo systemctl start amazon-ssm-agent",
"elif [ -f /etc/lsb-release ]; then",
" # Ubuntu",
" sudo snap install amazon-ssm-agent —classic",
" sudo systemctl enable snap.amazon-ssm-agent.amazon-ssm-agent.service",
" sudo systemctl start snap.amazon-ssm-agent.amazon-ssm-agent.service",
"fi"
]
}
]
}
または、Agent インストールシェルコマンドを含むスクリプトへのパスを指定します。
{
"provisioners": [{
"type": "shell",
"script": "scripts/install_ssm.sh"
}]
}
Packer をスクリプトプロビジョナーと共に使用する場合、 install_ssm.sh Packer 設定ファイルからの相対パスで保存する必要があります (.json または .pkr .hcl).
Infrastructure as Code (IaC)
- CloudFormation
- Terraform
SSM エージェントがプリインストールされていない AMI を使用して CloudFormation でインスタンスを起動する場合は、UserData プロパティを活用して SSM エージェントをインストールできます。
# EC2 Instance
EC2Instance:
Type: AWS::EC2::Instance
Properties:
ImageId: !FindInMap
- RegionMap
- !Ref AWS::Region
- !Ref OperatingSystem
InstanceType: !FindInMap
- EnvironmentSettings
- !Ref EnvironmentType
- InstanceType
IamInstanceProfile: !Ref SSMInstanceProfile
UserData: !If
- !Base64
'Fn::Sub': |
#!/bin/bash
# Install SSM Agent based on OS
if [ -f /etc/os-release ]; then
. /etc/os-release
case "$ID" in
amzn|rhel)
yum install -y amazon-ssm-agent
systemctl enable amazon-ssm-agent
systemctl start amazon-ssm-agent
;;
ubuntu)
snap install amazon-ssm-agent —classic
systemctl enable snap.amazon-ssm-agent.amazon-ssm-agent.service
systemctl start snap.amazon-ssm-agent.amazon-ssm-agent.service
;;
esac
fi
Terraform を使用する場合は、SSM エージェントのインストールシェルコマンドを含むスクリプトファイルを作成します。次に、 user_data インスタンスリソースのプロパティを、インストールスクリプトファイルに向けるように設定します。
# EC2 Instance
resource "aws_instance" "web" {
ami = data.aws_ami.amazon_linux_2.id
instance_type = "t2.micro"
subnet_id = data.aws_subnet.main.id
vpc_security_group_ids = [aws_security_group.allow_ssm.id]
iam_instance_profile = aws_iam_instance_profile.ssm_profile.name
associate_public_ip_address = true
user_data = filebase64("${path.module}/scripts/install_ssm.sh")
tags = {
Name = "SSM-enabled-instance"
}
}
# Output
output "instance_id" {
value = aws_instance.web.id
}
EC2 Console/API/SDK
EC2 コンソールまたは任意の SDK を使用して EC2 インスタンスを起動する際は、インスタンスを起動する前に、SSM Agent のインストールコマン ドを含むユーザーデータを Amazon EC2 インスタンスに追加してください。
- Linux については、この記事に記載されている手順を参照してください: Amazon EC2 Linux インスタンスの起動時に SSM Agent をインストールするにはどうすればよいですか?
- Windows については、この記事に記載されている手順を参照してください: Amazon EC2 Windows インスタンスの起動時に AWS Systems Manager Agent (SSM Agent) をインストールするにはどうすればよいですか?
Application Migration Service (MGN)
サーバーが Application Migration Service を使用して移行および起動された場合は、起動後の設定を使用して SSM Agent をインストールしてください。こちらに記載されている手順を参照してください。
Amazon EKS
最新の Amazon EKS 最適化 AMI は SSM Agent を自動的にインストールします。カスタマイズされた AMI を使用している場合、SSM Agent をインストールするには、次を使用して ください。 preBootstrapCommands こちらで説明されているプロパティを参照してください。
実行中のインスタンスへの SSM Agent のインストール
環境内ですでに実行中のインスタンスに対しては、さまざまなリモートアクセスおよび自動化の方法を使用して SSM Agent をインストールできます。インストールプロセスは、オペレーティングシステムの種類、利用可能なアクセス方法、およびネットワーク構成によって異なります。このセクションでは、既存のインスタンスに SSM Agent をインストールするために使用できるさまざまなアプローチについて説明します。
カスタムソリューション
AWS Systems Manager エージェントを非管理対象の Amazon EC2 ノードに自動インストールするに関する公開ブログを参照してください。 このソリューションは、userdata を使用して SSM エージェントをインストールし、オートメーションランブックがリージョンおよびアカウントをまたいでこのプロセスを調整します。
構成管理ツール
組織で Puppet、Chef、Ansible などの構成管理ツールを使用している場合は、これらの既存のツールを活用して、インスタンス全体に SSM Agent をデプロイできます。
- Ansible
- Chef
- Puppet
- name: Install SSM Agent across fleet
hosts: all
become: yes
tasks:
- name: Detect OS family
ansible.builtin.set_fact:
os_family: "{{ ansible_facts['os_family'] }}"
- name: Install SSM Agent on RedHat family
block:
- name: Download SSM Agent RPM
get_url:
url: "https://s3.{{ aws_region }}.amazonaws.com/amazon-ssm-{{ aws_region }}/latest/linux_amd64/amazon-ssm-agent.rpm"
dest: /tmp/amazon-ssm-agent.rpm
mode: '0644'
- name: Install SSM Agent
yum:
name: /tmp/amazon-ssm-agent.rpm
state: present
when: os_family == "RedHat"
- name: Install SSM Agent on Debian family
block:
- name: Install SSM Agent via Snap
community.general.snap:
name: amazon-ssm-agent
classic: yes
when: os_family == "Debian"
- name: Enable and start SSM Agent
systemd:
name: amazon-ssm-agent
enabled: yes
state: started
- name: Verify installation
command: systemctl status amazon-ssm-agent
register: ssm_status
ignore_errors: yes
- name: Report status
debug:
var: ssm_status.stdout_lines
if $facts['os']['family'] == 'RedHat' {
package { 'amazon-ssm-agent':
ensure => installed,
source => 's3.amazonaws.com/ec2-downloads-windows/SSMAgent/latest/linux_amd64/amazon-ssm-agent.rpm',
provider => 'rpm',
}
} elsif $facts['os']['family'] == 'Debian' {
package { 'amazon-ssm-agent':
ensure => installed,
source => 's3.amazonaws.com/ec2-downloads-windows/SSMAgent/latest/debian_amd64/amazon-ssm-agent.deb',
provider => 'dpkg',
}
}
service { 'amazon-ssm-agent':
ensure => running,
enable => true,
require => Package['amazon-ssm-agent'],
}
# cookbooks/ssm_agent/recipes/default.rb
case node['platform_family']
when 'rhel'
remote_file '/tmp/amazon-ssm-agent.rpm' do
source "https://s3.#{node['region']}.amazonaws.com/amazon-ssm-#{node['region']}/latest/linux_amd64/amazon-ssm-agent.rpm"
mode '0644'
action :create
end
package 'amazon-ssm-agent' do
source '/tmp/amazon-ssm-agent.rpm'
action :install
end
when 'debian'
execute 'install_ssm_agent' do
command 'snap install amazon-ssm-agent —classic’
not_if 'snap list | grep amazon-ssm-agent'
end
end
service 'amazon-ssm-agent' do
action [:enable, :start]
end
EC2 ユーザーデータ
デフォルトでは、ユーザーデータコマンドと cloud-init ディレクティブは、EC2 インスタンスの起動時に最初のブートサイクル中にのみ実行されます。ただし、mime マルチパートファイルを使用して、ユーザーデータコマンドと cloud-init ディレクティブを設定することができます。
ユーザーデータを更新するには、インスタンスを停止します。Actions をクリックし、Instance settings を選択して、Edit User Data を選択します。
- Linux
- Windows
Content-Type: multipart/mixed; boundary="//"
MIME-Version: 1.0
--//
Content-Type: text/cloud-config; charset="us-ascii"
MIME-Version: 1.0
Content-Transfer-Encoding: 7bit
Content-Disposition: attachment;
filename="cloud-config.txt"
#cloud-config
cloud_final_modules:
- [scripts-user, always]
--//
Content-Type: text/x-shellscript; charset="us-ascii"
MIME-Version: 1.0
Content-Transfer-Encoding: 7bit
Content-Disposition: attachment; filename="userdata.txt"
#!/bin/bash
# Amazon Linux 2, RHEL
dnf install -y s3.amazonaws.com/ec2-downloads-windows/SSMAgent/latest/linux_amd64/amazon-ssm-agent.rpm
systemctl enable amazon-ssm-agent
systemctl start amazon-ssm-agent
--//--
注意: 以下の PowerShell スクリプトは、EC2Launch v2 起動エージェントでのみ動作します。
<powershell>
$dir = $env:TEMP + "\ssm"
New-Item -ItemType directory -Path $dir -Force
cd $dir
(New-Object System.Net.WebClient).DownloadFile("https://s3.amazonaws.com/ec2-downloads-windows/SSMAgent/latest/windows_amd64/AmazonSSMAgentSetup.exe", $dir + "\AmazonSSMAgentSetup.exe")
Start-Process .\AmazonSSMAgentSetup.exe -ArgumentList @("/q", "/log", "install.log") -Wait
</powershell>
<persist>true</persist>
プログラムを使用して実行する場合は、 ModifyInstanceAttribute API では、このスクリプトを base64 エンコードされたテキストに変換する必要があります。
グループポリシー(Windows 用)
グループポリシーは従来 .msi パッケージをサポートしていますが、AWS Systems Manager (SSM) Agent は .exe ファイルとして提供されています。この制限を克服するために、グループポリシーとスケジュールされたタスクを組み合わせて、Windows 環境全体に SSM Agent をデプロイします。
-
Active Directory の適切な階層/OU に GPO を作成(または既存の GPO を変更)します。コンピューターのスケジュールされたタスクスクリプト設定を使用するようにポリシーを編集します。
-
このオプションは、[コンピューターの構成] | [基本設定] | [コントロール パネルの設定] | [スケジュールされたタスク] の下にあります。右クリックして [新規] → [即時タスク] を選択します。
-
アクションとして Create を選択し、タスクに名前を付けて指定します。
NT AUTHORITY\Systemタスクを実行するユーザーアカウントとして使用します。[ユーザーがログオンしているかどうかにかかわらず実行する] のラジオボタンをクリックし、[トリガー] タブをクリックして次のセクションに進みます。

-
トリガーには、「1 回」を選択します。
-
プログラムの開始のための新しいアクションを作成し、選択します
powershell.exe引数には以下を使用します。
-ExecutionPolicy Bypass -Command "$dir = $env:TEMP + '\ssm'; New-Item -ItemType directory -Path $dir -Force; Set-Location $dir; (New-Object System.Net.WebClient).DownloadFile('https://s3.amazonaws.com/ec2-downloads-windows/SSMAgent/latest/windows_amd64/AmazonSSMAgentSetup.exe', $dir + '\AmazonSSMAgentSetup.exe'); Start-Process .\AmazonSSMAgentSetup.exe -ArgumentList @('/q', '/log', 'install.log') -Wait"

-
[新しいアクション] ウィンドウで OK をクリックし、[プロパティ] ウィンドウで OK をクリックして、これらのダイアログを閉じます。
-
これが完了すると、リンクされているコンピューターは、GP ポリシーが更新されたとき、または使用時にインストーラーがプッシュされます。
gpudate /forceコマンドプロンプトからその操作を強制的に実行します。
詳細については、AWS Systems Manager での Windows マネージドノードの登録を自動化するを参照してください。
SSH (Linux の場合)
SSH 経由でアクセス可能な Linux インスタンスの場合、以下のサンプルスクリプトを使用して SSM Agent のインストールを自動化できま す。このスクリプトは OS の種類を検出し、適切なパッケージをインストールします。
#!/bin/bash
USERNAME=ec2-user
HOSTS=("192.168.1.121" "192.168.1.122" "192.168.1.123")
KEY_PATH="/path/to/your/key.pem"
for HOSTNAME in ${HOSTS}; do
# Detect OS type
OS_TYPE=$(ssh -i "${KEY_PATH}" -l ${USERNAME} ${HOSTNAME} "cat /etc/os-release | grep '^ID=' | cut -d= -f2 | tr -d '\"'")
case ${OS_TYPE} in
"amzn"|"rhel"|"centos")
SCRIPT="sudo yum install -y s3.amazonaws.com/ec2-downloads-windows/SSMAgent/latest/linux_amd64/amazon-ssm-agent.rpm && sudo systemctl start amazon-ssm-agent"
;;
"ubuntu"|"debian")
SCRIPT="wget s3.amazonaws.com/ec2-downloads-windows/SSMAgent/latest/debian_amd64/amazon-ssm-agent.deb && sudo dpkg -i amazon-ssm-agent.deb && sudo systemctl start amazon-ssm-agent"
;;
*)
echo "Unsupported OS on ${HOSTNAME}"
continue
;;
esac
ssh -i "${KEY_PATH}" -l ${USERNAME} ${HOSTNAME} "${SCRIPT}"
done
Amazon EKS - 既存のインスタンス
最新の Amazon EKS 最適化 AMI は SSM Agent を自動的にインストールします。カスタマイズされた AMI を使用している場合、実行中のワーカーノードに SSM Agent をインストールするには、こちらに記載されている Kubernetes Daemonset を使用してください。
Amazon Workspaces
カスタマイズされたソリューションについては、こちらに記載されているドキュメントを参照してください。