SSM Patch Managerでカスタムパッチベースラインを作成(Windows)

目次

SSM Patch Managerでカスタムパッチベースラインを作成してWindowsインスタンスにパッチ配信する構成

System Manager(SSM) Patch Managerは、EC2インスタンスへのパッチ適用の自動化する機能です。

今回はWindowsインスタンスを対象とします。デフォルトのAWS-DefaultPatchBaselineに加え、独自のパッチベースライン(カスタムパッチベースライン)を作成し、両者を実行することで、Patch Managerの挙動を確認します。

Linuxインスタンス(Amazon Linux 2)に対するSSM Patch Managerの実行については、以下のページをご確認ください。

あわせて読みたい
SSM Patch Managerでカスタムパッチベースラインを作成(Linux) 【SSM Patch Managerでカスタムパッチベースラインを作成してパッチ配信する構成】 System Manager(SSM) Patch Managerは、EC2インスタンスへのパッチ適用の自動化する...

構築する環境

Diagram of SSM Patch Manager on Windows Instance

基本的に使用するリソースは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の一部を変更して作成します。

WS-DefaultPatchBaseline

コメントアウトを外すと、AWS-DefaultPatchBaselineと同様の設定となります。

今回の構成でAWS-RunPatchBaseline実行時の挙動を整理します。

  • Instance1:タグ(パッチグループ)設定なし -> デフォルトのAWS-DefaultPatchBaselineが実行される
  • Instance2:タグ(パッチグループ)設定あり -> カスタムパッチグループ(MyPatchBaseline)が実行される

環境構築

CloudFormationを使用して、本環境を構築し、実際の挙動を確認します。

CloudFormationスタックを作成し、スタック内のリソースを確認する

CloudFormationスタックを作成します。
スタックの作成および各スタックの確認方法については、以下のページをご確認ください。

あわせて読みたい
CloudFormationのネストされたスタックで環境を構築する 【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

作成されたカスタムパッチベースラインを確認します。

Custom Patch Baseline Details.

Windows Serverを対象として、クリティカルアップデートがクリティカルなパッチのみを承認するルールが作成されています。Patch groupsの項目をみると、本ベースラインの適用対象が「soa-04-003-patch-group」ということもわかります。

次にインスタンスに付与されたタグを確認します。

The tag for the patch group in SSM Patch Manager is not set.

Instance2の方にだけ、Patch Groupのタグがあります。このタグの値が先ほど確認したカスタムパッチベースラインのパッチグループと同名ということがわかります。
これでInstance2はパッチグループに所属していることになります。

Patch Manager実行結果を確認する

準備が整いましたので、Patch Managerの実行結果を確認します。
SSM Run Commandのページから確認することができます。

Results of running SSM Patch Manager.

2台のインスタンスに対して、Patch Managerの実行が成功していることがわかります。

次に各インスタンスの実行結果を確認します。まずInstance1を確認します。

Result of running AWS-DefaultPatchBaseline.

デフォルトのAWS-DefaultPatchBaselineが実行され、28のパッチが適用されたことがわかります。

次にInstance2を確認します。

Result of running Custom Patch Baseline.

カスタムパッチベースライン(soa-04-003-MyPatchBaseline)が実行されましたが、1つもパッチが適用されませんでした。今回の条件(クリティカルアップデートがクリティカルなパッチ)を満たすものがなかったようです。

最後に実行ログを確認します。ログは指定したバケットに、インスタンスIDごとに設置されます。

The results of the SSM Patch Manager execution are saved in the S3 bucket.

上の画像は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に加え、カスタムパッチベースラインを作成して実行することで、パッチ適用結果の確認方法やログ出力状況を確認しました。

目次