Amazon EC2 Systems Manager
Amazon EC2 とオンプレミスシステムの設定と管理
サーバーワークス プライベートセミナー
クラウドインテグレーション部カスタマーサポート課
伊藤 覚宏
2017/06
目次
一般的なシステム運用
Amazon EC2 Systems Managerとは
Amazon EC2 Systems Managerの前提条件
Amazon EC2 Systems Managerの利用設定
Amazon EC2 Systems Managerの利用例
2
一般的なシステム運用
システム監視
システムが正常に稼働しているか
ソースに過不足が発生していないか
証跡管理
問題はいつ誰がどのように修正したか
ルールに従った作業実施、記録されているか
認証管理
権限は適切に設定されているか
セキュリティの問題は発生していないか
構成管理
意図した構成が保たれているか
4
一般的なシステム運用
AWSでも同様にシステム管理を行う事は可能
Excelなどで構成管理することも可能
ただしAWSでは構成変更が簡単に行えるため、手動記録では追従が困難
クラウドの旨味が活かせない
6
Amazon EC2 Systems Managerとは
ソフトウェアインベントリの収集や OS パッチの適用、システムイメージの
作成、そして Windows や Linux のオペレーティングシステム設定などの
プロセスを自動化する管理サービス
AWS ConfigはAWSの構成を管理
Systems ManagerはOS内部の構成を管理
8
Amazon EC2 Systems Managerの構成要素
Systems Managerは複数の要素で構成されます
Run Command ステートマネージャー インベントリ メンテナンスウィンドウ
パッチマネージャー オートメーション パラメータストア
9
Run Command
管理作業をリモートから実行
リモートから任意のコマンド実行が可能
ソフトウェアのインストール、パッチング、アップデート
ユーザーの追加・削除、サービスの起動・停止、状態取得
JSONベースのドキュメントでコマンド、タスクを定義
定義済みのドキュメントも提供、コミュニティ版もあり
実行結果はS3に保存可能、実行状態に合わせてSNSを使って通知
SSH、RDPの接続ポートを閉じる事でセキュアに運用
Cloud Automator でも対応
10
ステートマネージャー
OSとアプリケーションの設定を定義、状態を維持する
事前に定義しておいた状態にOSを設定
JSONベースのドキュメントを使用してポリシーを定義
構成を適用するEC2・オンプレサーバーを個別、タグで管理
企業全体の構成ポリシーへの準拠を支援
例:ウィルス対策ソフト、マルウェア対策ソフトの定義ファイル更新
12
インベントリ
ソフトウェアインベントリの情報収集
EC2・オンプレミスの各種インベントリ情報を収集、管理
AWSが定義する収集テンプレートを利用可能
JSON形式で取得したいデータを定義する事でカスタマイズも可能
AWS Configを有効にする事でインベントリ情報の変更履歴を追跡
ソフトウェアのライセンス使用状況確認、ソフトウェアバージョンの管理が
簡素化される事でのセキュリティ脆弱性の早期発見が可能
定期的な収集自体はステートマネージャーで設定を行う
14
メンテナンスウィンドウ
事前に設定した時間でメンテナンスを実施
システムの中断を許容できる時間を指定
OSのアップデート、各種ドライバの更新、ソフトウェアのインストール etc…
組み込み済みのコマンド、Run Commandの実行が可能
メンテナンス実行の時間を明確に決めておく事で可用性と信頼性向上
考え方はRDSのMaintenance Windowと同様
許容期間内での実行はメンテナンスウィンドウ
時間指定はCloud Automatorなどの使い分けが可能
17
メンテナンスウィンドウ
メンテナンスウィンドウでは次の内容を指定します
スケジュール: 開始時刻や繰り返し周期など
期間: タスク実行を許可する期間
タスクの開始を停止: 期間の終了から逆算した新規タスクのスタートを停止する
時間
22
メンテナンスウィンドウ
定義したメンテナンスウィンドウに対して対象を登録することで、定期的な
タスクを実行します
ターゲットの登録: タスクを実行するインスタンスを登録します
タスクの登録: 実行するタスクが定義されたドキュメントを指定します
23
パッチマネージャー
ベースラインを定義してWindowsのパッチを適用
Patch Baselineを使ってカスタムパッチポリシーを定義
例:クリティカルなパッチが提供された場合には1日後に適用
パッチ適用は指定したMaintenance Window内で実施
実施されたパッチングの結果はレポートされる
インストールされたパッチ、スキップ、失敗したパッチ等
重要なアップデートやゼロデイ脆弱性への対応を自動化、時間を短縮
26
オートメーション
シンプルなワークフローを使って一般的なタスクを自動化
Amazon Machine Images(AMI)の作成と管理に最適化
AMIからEC2を起動 →パッチ適用 →更新されたAMIを作成
JSONベースのドキュメントでワークフローを定義
企業で管理する「ゴールデンイメージ」管理をサポート
31
パラメータストア
IT資産の集中管理
ログイン、DB接続情報などを一元管理
Run Commnad、State Manager、Automation 等から参照可能
Management Consoleからも参照、更新が可能
AWS CLI、各種SDKからも参照、更新が可能
細かい権限管理で必要な人に必要な情報を提供
Parameter Storeに格納した情報はKMSで暗号化
企業の機密情報の分散管理、メンテナンスを簡素化
33
パラメータストア
パラメータストアからのデータ取得
Run Command、Automation、State Managerで参照可能
例:AWS CLIから参照する場合(赤字部分は編集)
aws ssm get-parameters --name パラメータ名
KMSで暗号化していた値を参照する場合
例:AWS CLIから参照する場合(赤字部分は編集)
aws ssm get-parameters --names パラメータ名 --with-decryption
36
パラメータストア
パラメータストアからのデータ取得
パラメータストアへのアクセスはIAMで制御が出来るため、パラメータ名の
命名規則を整備することで、環境毎やユーザ毎に特定の情報のみにアクセス可能
にすることが可能です
"Version": "2012-10-17",
"Statement": [
{
"Effect": "Allow",
"Action": [
"ssm:Describe*",
"ssm:Get*",
"ssm:List*"
],
"Resource": [
"arn:aws:ssm:ap-northeast-1:123456789123:parameter/prd.*"
]
}]
"Version": "2012-10-17",
"Statement": [
{
"Effect": "Allow",
"Action": [
"ssm:Describe*",
"ssm:Get*",
"ssm:List*"
],
"Resource": [
"arn:aws:ssm:ap-northeast-1:123456789123:parameter/test.*"
]
}
]
37
ドキュメント
ドキュメントのタイプ毎に、利用されるサービスが異なります
タイプ サービス
Command Run Commandステートマネージャー
Policy ステートマネージャー
Automation オートメーション
40
SSM Agent
Systems Managerの利用にはSSM Agentのインストールが必要です
管理対象に常駐し、各種サービスからの要求を実行
インストールタイプのエージェント
AWSの各種サービスAPIと通信が発生
AWSから提供している以下のAMIにはインストール済み
2016年11月以降に提供しているWindows AMI(2003-2012R2、2016)
Amazon Linuxは別途インストールが必要
Source CodeはGithubで公開
https://github.com/aws/amazon-ssm-agent
42
EC2 Systems Managerの前提環境条件
サポートされているOS
Windows(32bit、64bit)
Windows Server 2003〜2016(R2含む)
Linux(32bit)
Amazon Linux 2014.09、2014.03 以降
Ubuntu Server 16.0.4 LTS、14.04 LTS、または 12.04 LTS
Red Hat Enterprise Linux (RHEL) 6.5 以降
CentOS 6.3 以降
Linux(64bit)
Amazon Linux 2015.09、2015.03 以降
Red Hat Enterprise Linux (RHEL) 7.x 以降
CentOS 7.1 以降
43
EC2 Systems Managerの前提環境条件
インターネットへのアクセスが出来る事
SSM Agentが各種APIへアクセスするため
APIアクセスのためport 80,443 アウトバウンドを許可してください
NAT-Gatewayでも可
インターネットからの接続は不要
44
EC2 Systems Managerの前提環境条件
SSMエージェントの実行ユーザ
SSMエージェントは以下のユーザとしてコマンドを実行します。
2017/06/23現在実行ユーザを変更することはできません。
45
OS 実行ユーザ
Windows system
Linux root
IAM Roleの作成(EC2の場合)
IAM Roleを作成して権限を付与
SSM Agentが各種APIをコールする権限
例:Automationであれば ec2:CreateImage 等
用途によって権限を分ける
AWS管理ポリシーを活用
AmazonSSMFullAccess、AmazonSSMReadOnlyAccess等
カスタムポリシーも作成可能
46
IAM Roleの作成(EC2の場合)
IAM Roleが付与されていないEC2に対しても、2017/02/12からアタッチが
可能になりました
https://aws.amazon.com/jp/blogs/news/new-attach-an-aws-iam-role-to-an-existing-amazon-ec2-instance-by-using-the-aws-cli/
47
SSM Agentのインストール(Windows on EC2)
AWS提供のWindows AMIはインストール済み
2016年11月以降のAMIから起動したWindowsは導入済み
2016年11月以前のAMIから起動したWindowsは更新が必要
SSM Agentを更新する
EC2Configでの更新を推奨
Run CommandでAWS-UpdateEC2Configを実行
Windows Server 2016の場合はAWS-UpdateSSMAgentを実行
49
SSM Agentのインストール(Windows on EC2)
Windows Server 2016の場合はAWS-UpdateSSMAgent
Windows Server 2012以前の場合はAWS-UpdateEC2Config を選択しま
す
51
SSM Agentのインストール(Linux on EC2)
SSM Agentをダウンロード、インストール
リポジトリ(S3)からダウンロード
https://amazon-ssm-region.s3.amazonaws.com/latest/$arch/amazon-ssm-
agent.rpm
region部分は利用するRegionに置き換える
$arch部分もディストリビューションに合わせて置き換える
各種パッケージコマンドでインストール
sudo yum install -y amazon-ssm-agent.rpm
sudo dpkg -i amazon-ssm-agent.deb
コマンド詳細は以下のURLを確認
http://docs.aws.amazon.com/ja_jp/systems-manager/latest/userguide/ssm-
agent.html
59
SSM Agentのインストール(Linux on EC2)
SSM Agentをダウンロード、インストール
リポジトリ(S3)からダウンロード
東京リージョンの場合
Amazon Linux、RHEL、および CentOS 64 ビット:
https://s3.ap-northeast-1.amazonaws.com/amazon-ssm-ap-northeast-1/latest/linux_amd64/amazon-ssm-agent.rpm
Amazon Linux、RHEL、および CentOS 32 ビット:
https://s3.ap-northeast-1.amazonaws.com/amazon-ssm-ap-northeast-1/latest/linux_386/amazon-ssm-agent.rpm
Ubuntu Server 64 ビット:
https://s3.ap-northeast-1.amazonaws.com/amazon-ssm-ap-northeast-1/latest/debian_amd64/amazon-ssm-agent.deb
Ubuntu Server 32 ビット:
https://s3.ap-northeast-1.amazonaws.com/amazon-ssm-ap-northeast-1/latest/debian_386/amazon-ssm-agent.deb
60
アクティベーション
アクティベーションには以下の内容を入力します
アクティベーションの名前
アクティベーションを許可するサーバ数
使用するIAMロール
アクティベーションの有効期間
サーバに付与する名前
64
アクティベーション
サービスロールを作成します
サービスroleの作成はSystems Managerを利用するAWSアカウントで一度実行
するだけで、サーバ毎に行う必要はありません
IAMで[新しいロールの作成]を行います。
68
アクティベーション
信頼関係を以下の通りに書き換えます
{
"Version": "2012-10-17",
"Statement": {
"Effect": "Allow",
"Principal": {"Service": "ssm.amazonaws.com"},
"Action": "sts:AssumeRole"
}
}
72
アクティベーション(Windows)
オンプレミスのWindowsに[AWS Tools for Windows PowerShell]をイン
ストールします
https://aws.amazon.com/jp/powershell/
73
アクティベーション(Windows)
Windows PowerShell for AWSを起動し以下のコマンドを入力します
赤文字の部分は次の通り書き換えてください
code:アクティベーションコード
id:アクティベーションID
region: Systems Managerを設定しているリージョン
$dir = $env:TEMP + "¥ssm"
New-Item -ItemType directory -Path $dir
cd $dir
(New-Object System.Net.WebClient).DownloadFile("https://amazon-ssm-
region.s3.amazonaws.com/latest/windows_amd64/AmazonSSMAgentSetup.exe", $dir +
"¥AmazonSSMAgentSetup.exe")
Start-Process .¥AmazonSSMAgentSetup.exe -ArgumentList @("/q", "/log", "install.log", "CODE=code",
"ID=id", "REGION=region") -Wait
Get-Content ($env:ProgramData + "¥Amazon¥SSM¥InstanceData¥registration")
Get-Service -Name "AmazonSSMAgent"
74
アクティベーション(Linux)
ディストリビューション毎にそれぞれコマンドを実行します
赤文字の部分は次の通り書き換えてください
code: アクティベーションコード
id: アクティベーションID
region: Systems Managerを設定しているリージョン
78
アクティベーション(Linux)
Amazon Linux、RHEL 6.x、CentOS 6.x
mkdir /tmp/ssm
sudo curl https://s3.amazonaws.com/ec2-downloads-windows/SSMAgent/latest/linux_amd64/amazon-ssm-
agent.rpm -o /tmp/ssm/amazon-ssm-agent.rpm
sudo yum install -y /tmp/ssm/amazon-ssm-agent.rpm
sudo stop amazon-ssm-agent
sudo amazon-ssm-agent -register -code "code" -id "id" -region "region"
sudo start amazon-ssm-agent
79
アクティベーション(Linux)
RHEL 7.x および CentOS 7.x
mkdir /tmp/ssm
sudo curl https://s3.amazonaws.com/ec2-downloads-windows/SSMAgent/latest/linux_amd64/amazon-ssm-
agent.rpm -o /tmp/ssm/amazon-ssm-agent.rpm
sudo yum install -y /tmp/ssm/amazon-ssm-agent.rpm
sudo systemctl stop amazon-ssm-agent
sudo amazon-ssm-agent -register -code "code" -id "id" -region "region"
sudo systemctl start amazon-ssm-agent
80
アクティベーション(Linux)
Ubuntu
mkdir /tmp/ssm
sudo curl https://s3.amazonaws.com/ec2-downloads-windows/SSMAgent/latest/debian_amd64/amazon-ssm-
agent.deb -o /tmp/ssm/amazon-ssm-agent.deb
sudo dpkg -i /tmp/ssm/amazon-ssm-agent.deb
sudo service amazon-ssm-agent stop
sudo amazon-ssm-agent -register -code "code" -id "id" -region "region"
sudo service amazon-ssm-agent start
81
Windowsのパッチ管理
以下の通り信頼関係に[ssm.amazonaws.com]を追加します
92
{
"Version": "2012-10-17",
"Statement": [
{
"Sid": "",
"Effect": "Allow",
"Principal": {
"Service": "ec2.amazonaws.com",
"Service": "ssm.amazonaws.com"
},
"Action": "sts:AssumeRole"
}
]
}
Windowsのパッチ管理
パッチベースラインで適用するパッチのベースを指定します
Product: OSバージョン
Classification: パッチ分類
Severity: 重要度
Auto Approval Delay: 遅延日数
95
Windowsのパッチ管理
EC2インスタンスの場合 [Patch Group]というタグキーを指定することに
より、パッチ適用対象をグループ化して管理することができます
マネージドインスタンスにはタグを付与する事が出来ないため[Patch Group]
は利用出来ません。インスタンス単位で指定を行います
97
Windowsのパッチ管理
パラメータで[Scan]か[Install]を選択します
Scan: インスタンスをスキャンして欠落しているパッチを確認できるリストを
生成します
Install: インスタンスをスキャンし、ベースラインの承認済みパッチのリスト
とインストールされたパッチのリストを照合します
Patch Manager は、欠落しているパッチを確認すると、すべての欠落している
パッチをダウンロードしてインストールします。パッチをインストールすると、
Systems Manager によってインスタンスが再起動されます
10
4
Windowsのパッチ管理
ロール欄にプルダウンでIAMロールが表示されるので、
[メンテナンスウィンドウ]用に作成したIAMロールを選択します。
同時実行インスタンス数
パッチ適用を中止するエラーインスタンス数を指定します。
105
Windowsのパッチ管理
定期的な実行でなく、即座に適用したい/チェックしたい場合は
[コマンドを実行]から[AWS-ApplyPatchBaseline]ドキュメントを実行する
こともできます
107
Windowsのパッチ管理
パッチ適用前にAMIを取得するような機能はありません。
試験環境と本番環境で猶予期間の異なるベースラインを適用するなど計画的な
パッチ適用を設定します。
パッチ適用前にバックアップ用のAMIが必要な場合などはCloud Automatorを
組み合わせた運用設計をお進めします。
108
AMI更新の自動化
[オートメーション]を利用し、AMIから自動的にインスタンスを生成し、
アップデートを適用後、新たなAMIを作成し使用したインスタンスを削除す
る手順を紹介します
121
この手順はオートメーションのチュートリアルとして公式ドキュメントでも公開されています
http://docs.aws.amazon.com/ja_jp/systems-manager/latest/userguide/sysman-ami-consolewalk.html
AMI更新の自動化
[オートメーション]ではSysytems Manager Automationが利用するIAMと
AutomationからEC2インスタンスに渡されるIAMの2つが必要となります。
122
この手順はオートメーションのチュートリアルとして公式ドキュメントでも公開されています
http://docs.aws.amazon.com/ja_jp/systems-manager/latest/userguide/sysman-ami-consolewalk.html
AMI更新の自動化
以下の通り信頼関係に[ssm.amazonaws.com]を追加します
129
{
"Version": "2012-10-17",
"Statement": [
{
"Sid": "",
"Effect": "Allow",
"Principal": {
"Service": "ec2.amazonaws.com",
"Service": "ssm.amazonaws.com"
},
"Action": "sts:AssumeRole"
}
]
}
AMI更新の自動化
以下の通り信頼関係に[ssm.amazonaws.com]を追加します
135
{
"Version": "2012-10-17",
"Statement": [
{
"Sid": "",
"Effect": "Allow",
"Principal": {
"Service": "ec2.amazonaws.com",
"Service": "ssm.amazonaws.com"
},
"Action": "sts:AssumeRole"
}
]
}
AMI更新の自動化
以下の通り信頼関係に[ssm.amazonaws.com]を追加します
138
{
"Version": "2012-10-17",
"Statement": [
{
"Sid": "",
"Effect": "Allow",
"Principal": {
"Service": "ec2.amazonaws.com",
"Service": "ssm.amazonaws.com"
},
"Action": "sts:AssumeRole"
}
]
}
AMI更新の自動化
PassRoleの権限を付与し、EC2インスタンス用のIAM にPassRoleできるよ
うにします
141
{
"Version": "2012-10-17",
"Statement": [
{
"Effect": "Allow",
"Action": [
"iam:PassRole"
],
"Resource": [
" arn:aws:iam::xxxxxxxxxxx:role/AmazonEC2RoleforSSM"
]
}
]
}
AMI更新の自動化
パラメーターの内容は以下の通り
146
パラメーター 入力内容
SourceAmiId 更新元となるAMI ID
InstanceIamRole EC2インスタン用IAMロール名
AutomationAssumeRole Automation用IAMロールARN
TargetAmiName 作成するAMI名
InstanceType 途中に生成するインスタンスタイプ
PreUpdateScript 更新を適用する前に実行するスクリプトのURL
PostUpdateScript 更新を適用した後に実行するスクリプトのURL
IncludePackages 更新する特定のパッケージ名デフォルトではすべてのパッケージが更新されます
ExcludePackages 更新から除外する特定のパッケージ名
AMI更新の自動化
[オートメーション]を利用することで、インスタンスの稼働時間を最小にし
ながら、AMIを最新の状態に保つことが可能です
この方法では、手動でAMI IDを指定する必要があります
Lambdaとパラメータストアを利用することで、最新のAMI IDを自動的に
設定することも可能です
150
Automation、Lambda、および Parameter Store を使用した AMI へのパッチ適用の簡素化
AMI にパッチを適用し、Auto Scaling グループを更新する
まとめ
Systems Managerを利用することで、AWSだけではなく、オンプレミス/
他のクラウドなどを含めたOSの構成管理が可能となります
Systems Managerの各動作はJSON形式の[ドキュメント]で定義されます
152
まとめ
Systems ManagerとCloud Automatorの比較
Systems Managerでは、IAMロールとJSONを利用することで複雑な処理を
行う事が可能です
Cloud Automatorの場合 わかりやすいGUIにより簡単に設定を行うことが
可能です
154
機能 Systems Manager Cloud Automator
ステップ処理 オートメーションで設定 SQSによる連携
OS内部処理 SSMエージェントにより実行 SSMエージェントにより実行
定期実行 メンテナンスウィンドウで設定 タイマートリガー
免責事項
本書の情報・資料の掲載には注意を払っておりますが、掲載された情報の内容が正確であるか、更新
時期が適切かどうかなどについて一切保証するものではありません。また、掲載された情報またはそ
の誤りなど、本書に関連して生じた損害または障害などに関しては、その理由の如何に関わらず、当
社は一切責任を負うものではありません。
155