AWS Systems Manager Patch Managerとは
読んで時の如しですが、公式ドキュメントによると下記。
AWS Systems Manager Patch Manager automates the process of patching managed instances with both security related and other types of updates.
まあec2インスタンスへのpatch適用を自動化してくれるサービスです。あまり個人では使う機会がないのでひとまず試してみた。
使い方概要
作成が必要なリソース
Patch Managerを使うには下記のリソースを作成する必要がある。Patch groupはオプション。無くても問題なし。
- Patch baseline
- Patch group (optional)
各リソースの説明
Patch baseline
パッチを当てるルールみたいなもの。どのパッチを当てるかとか、自動的に承認するルールとか、承認しないルール等々設定可能。AWSが事前定義しているものも使えるし、自分で定義して(Custom Patch baseline)利用することも可能。Patch Managerを利用する場合、まずはPatch baselineを作成/選択する。詳細は公式ドキュメント読むこと。
Patch Group
同じPatchを適用するec2インスタンスのグループみたいなもの。Patch baselineに紐づける。要は紐づけたインスタンス群に対してPatch baselineが適用される。
PatchGroupに関して個人的にわかりにくかったこと => Patch Groupというリソースが明示的には存在しないという部分*1。実際Patch Groupって何なのというと、ec2インスタンスのタグです。Patch Group というKeyを設定し、Valueが同じもののグループ。例えば下記のようなタグが付いたインスタンスの集合が prod server という名の Patch Groupという感じ。
| Key | Value |
|---|---|
| Patch Group | prod server |
こちらも公式ドキュメント読めば分かる。
Patch Manager利用時の流れ
概要
- Patch Baselineを選択/作成
- Patch Groupを作成 (Patch Groupのタグを付けてec2インスタンスを作成)
- Patch Configurationを作成
Patch Baselineを選択/作成
今回は自分でPatch Baselineを作成し適用してみる。Management Consoleで作成。詳細は公式ドキュメントを読んで設定する。
今回設定したもの
Patch baseline details
- Name: my-test-patch-baseline
- Operating system: Amazon Linux2
- Default patch baseline (チェックなしのまま)
- これチェックすると、上で選んだOSのインスタンスに関して今回作成するpatch baselineがデフォルトとして自動で適用される
Approval rules for operating systems
- Product: All
- Classification: All
- Severity: All
- Auto-approval: Approve patches released up to a specific date
- Include nonsecurity updates: チェック
こんな感じ。

Patch Groupを作成
ec2インスタンスの作成
Key = Patch Group / Value = patch-test としたタグを付けてec2インスタンスを作成。今回は下表の2つのAmazon Linux2 AMIを利用。
---------------------------------------------------------------------------- | DescribeImages | +------------------------------------------------+-------------------------+ | amzn2-ami-hvm-2.0.20200917.0-x86_64-gp2 | ami-0ce107ae7af2e92b5 | | amzn2-ami-hvm-2.0.20180810-x86_64-gp2 | ami-08847abae18baa040 | +------------------------------------------------+-------------------------+
インスタンス作成。

Patch GroupをPatch baselineに紐づけ
作成したPatch baselineの詳細を表示して、Actions --> Modify patch groups --> patch-testを入力してAdd 。するとこんな感じでPatch Groupに追加される。

Patch Configuration作成
Patchを適用するのにPatch Configurationを設定する必要がある。今回設定したものは下記。 - Instances to patch: Select a patch group .... patch-testを指定 - Patching schedule: Skip scheduling and patch instances now (テストなのですぐ適用) - Patching operation - テスト1回目:Scan only: これでpatch baselineで設定したポリシに違反しているか(complianceがどうなるのか)チェックしてみる - テスト2回目:Scan and Install: インストールしてみてComplianceのチェックがどうなるか確認
こんな感じ。

ひとまず設定して、Configure patchingをクリック。
テスト
1回目
- Configure patchingをクリックすると、直にScanが始まるはず
- Scanの進捗状況はRunCommandから確認可能。走り終わっていたらCommand historyにある。

- 走り終わっていたら、Complianceへ行って状況を確認
- Patchのrawにて、Compliant resourcesとNon-Compliant resourcesがそれぞれ1になっているはず

- Patchのrawにて、Compliant resourcesとNon-Compliant resourcesがそれぞれ1になっているはず
- Non-Compliant resourcesの
1をクリックすると、フィルタリングが更新され、下に該当インスタンスが表示される。インスタンスIDがリンクになっているのでそれをクリックするとManaged Instancesの該当インスタンスの画面へ推移。Patchの適用状況が確認可能。
2回目
- 今回はPatch 適用まで実施。1回目でNon-Compliant resourcesとなっていたインスタンスがPatch適用後にCompliant resourceとなるはず
- 1回目同様Patch Configurationを作成。今回は
Scan and Installを選択 - 適用して待つ(RunCommandで状態を確認可能)
- Complianceで状態を確認
- 素晴らしい。Non compliant resources --> Compliant resourcesとなっている

- 素晴らしい。Non compliant resources --> Compliant resourcesとなっている
- Managed InstanceからPatchの適用状況も一応確認するとPatchが当たっているのが分かる*2

まとめ
- SSM Patch Managerを使ってec2インスタンスにPatchを適用してみた
- Patch Baseline/Patch Group/Patch Configurationを作成する必要あり
- Patch Groupはec2インスタンスのタグ
- Patch適用、適用中の状態確認、インスタンスのPatchの適用状況等等SSMの各種サービスで確認可能
SSM便利ですね。