SSM Patch Managerでカスタムパッチベースラインを作成してWindowsインスタンスにパッチ配信する構成
System Manager(SSM) Patch Managerは、EC2インスタンスへのパッチ適用の自動化する機能です。
今回はWindowsインスタンスを対象とします。デフォルトのAWS-DefaultPatchBaselineに加え、独自のパッチベースライン(カスタムパッチベースライン)を作成し、両者を実行することで、Patch Managerの挙動を確認します。
Linuxインスタンス(Amazon Linux 2)に対するSSM Patch Managerの実行については、以下のページをご確認ください。
構築する環境
基本的に使用するリソースはLinux版と同じです。
Windows版では、VPCエンドポイントではなく、NATゲートウェイを配置して、VPC外のリソース(System ManagerとS3)にアクセスするための経路を用意します。
CloudFormationテンプレートファイル
上記の構成をCloudFormationで構築します。
以下のURLにCloudFormationテンプレートファイルを設置します。
https://github.com/awstut-an-r/awstut-soa/tree/main/04/003
テンプレートファイルのポイント解説
先述の通り、多くの設定がLinux版と同様です。本ページでは、Windows版の特徴的な点のみ取り上げます。
VPCエンドポイントではなくNATゲートウェイでインターネット向けの経路を用意する
先述の通り、NATゲートウェイとインターネットゲートウェイを使用して、インターネット向けのルートを確保します。これはWindowsインスタンスに対して、SSM Patch Managerを実行する上での要件に起因します。
Windows Server インスタンスは、Windows Update カタログまたは Windows Server Update Services (WSUS) に接続できなくてはなりません。インスタンスがインターネットゲートウェイ、NAT ゲートウェイ、または NAT インスタンスを介して Microsoft Update Catalog に接続されていることを確認します。
Patch Manager の前提条件
Linux版では、SSMおよびS3用のVPCエンドポイントを作成することで、Patch Managerを実行するための要件を満たしていました。ただし上記の通り、Windowsインスタンスの場合は、これに加えて、インターネットにアクセスして、Microsoft Update Catalogに接続できることも要件に加わります。よって今回はNATゲートウェイを配置して、プライベートサブネット内のWindowsインスタンスが、インターネットにアクセスできるようにし、本要件を満たす構成とします。
Windows向けカスタムパッチベースライン作成のポイント
ポイントはWindowsインスタンス向けのカスタムパッチベースラインリソースです。
Resources:
MyPatchBaseline:
Type: AWS::SSM::PatchBaseline
Properties:
ApprovalRules:
PatchRules:
- ApproveAfterDays: 7
ComplianceLevel: UNSPECIFIED
EnableNonSecurity: false
PatchFilterGroup:
PatchFilters:
- Key: CLASSIFICATION
Values:
- CriticalUpdates
#- SecurityUpdates
- Key: MSRC_SEVERITY
Values:
- Critical
#- Important
Description: Test Patch Baseline.
Name: !Sub "${Prefix}-MyPatchBaseline"
OperatingSystem: WINDOWS
PatchGroups:
- !Sub "${Prefix}-patch-group"
Code language: YAML (yaml)
全体的にはLinux版と同様ですが、細部が異なります。
まずOperatingSystemプロパティでパッチベースラインの対象OSを指定しますが、今回はWindows向けですので、「WINDOWS」を指定します。次にPatchFiltersプロパティ以下のKeyプロパティですが、程度を示すSeverityが、Windowsの場合は「MSRC_SEVERITY」となります。Linux版の場合は「SEVERITY」ですのでご注意ください。
今回作成するカスタムパッチベースラインですが、デフォルトのAWS-DefaultPatchBaselineの一部を変更して作成します。
コメントアウトを外すと、AWS-DefaultPatchBaselineと同様の設定となります。
今回の構成でAWS-RunPatchBaseline実行時の挙動を整理します。
- Instance1:タグ(パッチグループ)設定なし -> デフォルトのAWS-DefaultPatchBaselineが実行される
- Instance2:タグ(パッチグループ)設定あり -> カスタムパッチグループ(MyPatchBaseline)が実行される
環境構築
CloudFormationを使用して、本環境を構築し、実際の挙動を確認します。
CloudFormationスタックを作成し、スタック内のリソースを確認する
CloudFormationスタックを作成します。
スタックの作成および各スタックの確認方法については、以下のページをご確認ください。
各スタックのリソースを確認した結果、今回作成された主要リソースの情報は以下の通りです。
- ログ保存用バケットの名前:soa-04-003
- Instance1のID:i-0be0847252c5cf00e
- Instance2のID:i-008140484431d4e33
- カスタムパッチベースライン名:soa-04-003-MyPatchBaseline
- カスタムパッチベースラインのID:pb-0cc1eee728bf421b0
- カスタムパッチベースライン用のパッチグループ:soa-04-003-patch-group
作成されたカスタムパッチベースラインを確認します。
Windows Serverを対象として、クリティカルアップデートがクリティカルなパッチのみを承認するルールが作成されています。Patch groupsの項目をみると、本ベースラインの適用対象が「soa-04-003-patch-group」ということもわかります。
次にインスタンスに付与されたタグを確認します。
Instance2の方にだけ、Patch Groupのタグがあります。このタグの値が先ほど確認したカスタムパッチベースラインのパッチグループと同名ということがわかります。
これでInstance2はパッチグループに所属していることになります。
Patch Manager実行結果を確認する
準備が整いましたので、Patch Managerの実行結果を確認します。
SSM Run Commandのページから確認することができます。
2台のインスタンスに対して、Patch Managerの実行が成功していることがわかります。
次に各インスタンスの実行結果を確認します。まずInstance1を確認します。
デフォルトのAWS-DefaultPatchBaselineが実行され、28のパッチが適用されたことがわかります。
次にInstance2を確認します。
カスタムパッチベースライン(soa-04-003-MyPatchBaseline)が実行されましたが、1つもパッチが適用されませんでした。今回の条件(クリティカルアップデートがクリティカルなパッチ)を満たすものがなかったようです。
最後に実行ログを確認します。ログは指定したバケットに、インスタンスIDごとに設置されます。
上の画像はInstance1のログですが、実行ログはstdout.txtとして設置されます。Instance1側の実行ログの中身を確認します。
Preparing to download PatchBaselineOperations PowerShell module from S3.
Downloading PatchBaselineOperations PowerShell module from https://s3-ap-northeast-1.amazonaws.com/aws-ssm-ap-northeast-1/patchbaselineoperations/Amazon.PatchBaselineOperations-1.33.zip to C:\ProgramData\Amazon\SSM\InstanceData\i-0be0847252c5cf00e\document\orchestration\a84181fe-a330-4d8d-abf1-fdd49a6f4a61\PatchWindows\Amazon.PatchBaselineOperations-1.33.zip.
Extracting PatchBaselineOperations zip file contents to temporary folder.
Verifying SHA 256 of the PatchBaselineOperations PowerShell module files.
Successfully downloaded and installed the PatchBaselineOperations PowerShell module.
Patch Summary for i-0be0847252c5cf00e
PatchGroup :
BaselineId : pb-04ba050f612fba3a6
Baseline : {"AccountId":"486716784251","BaselineId":"pb-04ba050f612fba3a6","Name":"AWS-DefaultPatchBaseline","GlobalFilters":{"Filters":[{"Key":"PRODUCT","Values":["*"]}]},"ApprovalRules":{"Rules":[{"ApproveAfterDays":7,"FilterGroup":{"Filters":[{"Key":"CLASSIFICATION","Values":["CriticalUpdates","SecurityUpdates"]},{"Key":"MSRC_SEVERITY","Values":["Critical","Important"]}]}}]},"ApprovedPatches":[],"RejectedPatches":[],"RejectedPatchesAction":"ALLOW_AS_DEPENDENCY","CreatedTime":1525327437.876,"ModifiedTime":1525327437.876,"Description":"Default Patch Baseline Provided by AWS."}
SnapshotId : 936681b3-6848-40e0-932a-87557809dd23
ExecutionId : a84181fe-a330-4d8d-abf1-fdd49a6f4a61
RebootOption : RebootIfNeeded
OwnerInformation :
OperationType : Install
OperationStartTime : 2022-01-22T11:19:01.0000000Z
OperationEndTime : 2022-01-22T11:43:08.5621334Z
InstalledCount : 28
InstalledRejectedCount : 0
InstalledPendingRebootCount : 0
InstalledOtherCount : 9
FailedCount : 0
MissingCount : 0
CriticalNonCompliantCount : 0
SecurityNonCompliantCount : 0
OtherNonCompliantCount : 0
NotApplicableCount : 1885
UnreportedNotApplicableCount : 0
EC2AMAZ-JNT8FVJ - PatchBaselineOperations Installation Results - 2022-01-22T11:43:09.077
KbArticleId Installed Message
----------- ----------- -----------
KB5009557 Yes Success
KB5009718 Yes Success
Code language: plaintext (plaintext)
パッチ適用の詳細を確認することができます。
まとめ
SSM Patch Managerを使用し、EC2インスタンス(Windows)にパッチ配信できることを確認しました。
デフォルトのAWS-DefaultPatchBaselineに加え、カスタムパッチベースラインを作成して実行することで、パッチ適用結果の確認方法やログ出力状況を確認しました。