AWS Patch Managerを利用してみる

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利用時の流れ

概要

  1. Patch Baselineを選択/作成
  2. Patch Groupを作成 (Patch Groupのタグを付けてec2インスタンスを作成)
  3. 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
    • テストするために適当に2018-10-01とかに設定 ((後で2つインスタンス作成。1つはこの日付けより前に作成されたAMI、もうひとつはこの日付けより後に作成されたAMIでインスタンスを作成)
  • Include nonsecurity updates: チェック

こんな感じ。 f:id:urotasm:20201114210157p:plain

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  |
+------------------------------------------------+-------------------------+

インスタンス作成。 f:id:urotasm:20201114204942p:plain

Patch GroupをPatch baselineに紐づけ

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

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のチェックがどうなるか確認

こんな感じ。 f:id:urotasm:20201114211827p:plain

ひとまず設定して、Configure patchingをクリック。

テスト

1回目

  • Configure patchingをクリックすると、直にScanが始まるはず
  • Scanの進捗状況はRunCommandから確認可能。走り終わっていたらCommand historyにある。 f:id:urotasm:20201114212035p:plain
  • 走り終わっていたら、Complianceへ行って状況を確認
    • Patchのrawにて、Compliant resourcesとNon-Compliant resourcesがそれぞれ1になっているはず f:id:urotasm:20201114212404p:plain
  • Non-Compliant resourcesの 1 をクリックすると、フィルタリングが更新され、下に該当インスタンスが表示される。インスタンスIDがリンクになっているのでそれをクリックするとManaged Instancesの該当インスタンスの画面へ推移。Patchの適用状況が確認可能。 f:id:urotasm:20201114221338p:plain

2回目

  • 今回はPatch 適用まで実施。1回目でNon-Compliant resourcesとなっていたインスタンスがPatch適用後にCompliant resourceとなるはず
  • 1回目同様Patch Configurationを作成。今回は Scan and Install を選択
  • 適用して待つ(RunCommandで状態を確認可能)
  • Complianceで状態を確認
    • 素晴らしい。Non compliant resources --> Compliant resourcesとなっている f:id:urotasm:20201114222219p:plain
  • Managed InstanceからPatchの適用状況も一応確認するとPatchが当たっているのが分かる*2 f:id:urotasm:20201114222708p:plain

まとめ

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

SSM便利ですね。

*1:Patch Groupを作成するとか不可能

*2:GeoIP.x86_64とか