AWSパッチマネージャーとCloudFormation＿前編

## はじめに

[前回](https://qiita.com/t13801206/items/3560ac0f073ee28c561f)はQuick Setupからパッチポリシーを作成して
Windows Serverにパッチ適用を行った

今回は、**あえてパッチポリシーを使わずに**
従来手法に則ってWindows Serverにパッチ適用を行う

### なぜ従来手法にこだわるのか？

[Quick Setup の開始方法](https://docs.aws.amazon.com/ja_jp/systems-manager/latest/userguide/quick-setup-getting-started.html)によると、Quick Setupを使うためには
いくつかのロールを作成する必要があり
これらのロールが、まあまあ強力な権限を持っているため
ともすると組織のレギュレーションに合致しないことがあるため

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/272511/9b664ed5-0a87-48ae-8651-b8ba82a3313f.png)

平たく言うと、簡便な手法（パッチポリシーを使う方法）は所属組織が許さないので
手間はかかるが所属組織にとやかく言われない従来手法を試してみよう、というお話である

#### 従来手法と新手法の違い

[パッチポリシーとのその他の違い](https://docs.aws.amazon.com/ja_jp/systems-manager/latest/userguide/patch-manager-policies.html#patch-policies-about-other-features)に書かれている通り

項目|従来手法|新手法
-|-|-
パッチグループ|**必要**／パッチグループに属するように複数のノードをタグ付けし、そのパッチグループに使用するパッチベースラインを指定できる。パッチグループがない場合、Patch Manager では、OS の種類に対する現在のデフォルトのパッチベースラインを使用してパッチが適用される。|**不要**／パッチポリシーに統合された
Configure patching|**有り**／パッチを適用するノード、パッチ適用スケジュール、およびパッチ適用オペレーションのデフォルトを指定|**無し**／パッチポリシーに統合された
コンプライアンス情報|**無し**|**有り**／パッチ適用ポリシーの設定に従ってマネージドノードのコンプライアンスをスキャンすると、コンプライアンスデータが利用可能

## とりあえずCloudFormationに突っ込む

先人による[こちらのテンプレート](https://dev.classmethod.jp/articles/patchmanager-cloudformation/#toc-2)をそのまま突っ込んでみたら、エラーなくリソースが生成された
Amazon Linux2向けで、`TestPG`というタグが付いているグループが対象とのこと

生成されたリソースを確認していく

### AWS::SSM::PatchBaseline

ベースライン名、説明、オペレーティングシステムがテンプレート通りであることがわかる

```yaml
Description: "AmazonLinux2PatchBaseline create by CloudFormation"
Name: AmazonLinux2PatchBaseline
OperatingSystem: AMAZON_LINUX_2
```

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/272511/672fd3d4-58c0-4412-b23e-ace24d37d52f.png)

さらに詳細ページをみる
パッチグループが指定通りであることがわかる

```yaml
  PatchGroups:
    - "TestPG"
```

また、`PatchFilterGroup`として`Security`グループと`BugFix`グループの２つがあることがわかる

```yaml
    Properties:
      ApprovalRules:
        PatchRules:
          - ApproveAfterDays: 7
            PatchFilterGroup:
              PatchFilters:
                - Key: CLASSIFICATION
                  Values:
                    - Security
                - Key: SEVERITY
                  Values:
                    - Important
                    - Critical
          - ApproveAfterDays: 7
            PatchFilterGroup:
              PatchFilters:
                - Key: CLASSIFICATION
                  Values:
                    - Bugfix
```

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/272511/f9807f05-6115-40ff-886f-d62a5246f213.png)

タグは勝手にCloudFormationが付けたものだろう

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/272511/4b95ae5a-996f-40eb-b484-e68291f8c276.png)

#### パッチグループ

パッチグループを参照すると、逆にパッチベースラインへのリンクが辿れる

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/272511/a41977a6-cad9-4cfd-b783-3f4f1a3b3e42.png)

### AWS::SSM::MaintenanceWindow

cron式がわからないのでcopilotに聞いたところ「このCron式は「毎週土曜日の18時0分」にジョブが実行されることを意味します」とのこと


![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/272511/21cea623-1b7c-43ac-b95e-2e1e94b2eaeb.png)

メンテナンスウィンドウの説明では、確かに毎週土曜18時になっているようだ

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/272511/dfa518de-543c-42a8-8baf-d2e34e2f4acb.png)

### AWS::SSM::MaintenanceWindowTarget

メンテナンスターゲットは、パッチグループのタグが`TestPG`であること

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/272511/e7ef84d6-4c0e-474c-be07-88991d57320a.png)

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/272511/c6e12423-120b-4c7a-ba1f-25fef165b9ab.png)


### AWS::SSM::MaintenanceWindowTask

`AWS-RunPatchBaseline`を走らせる

元記事にも書いてあるとおり

>パッチマネージャーによるパッチ適用とは、Run CommandによってSSMドキュメントAWS-RunPatchBaselineを実行することを指す

ということ

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/272511/233a5451-9890-4356-a8af-3155e5297024.png)

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/272511/46f74a72-9530-4ed2-9603-beba564826e9.png)

## さて、本題です

ここまでは先人の記事をとりあえずやってみて、AWSのリソースをGUIで確認したまで。
本題として、今回はWindowsサーバ向けにやってみる

・・・が、すでに記事が長くなったので
前編と後編に分けよう

後編に続く！
2025/5/5追記：　後編はこちら

https://qiita.com/t13801206/items/0c30c21a4a9d6a8c2fd9

## リファレンス

[AWS Systems Manager resource type reference](https://docs.aws.amazon.com/ja_jp/AWSCloudFormation/latest/UserGuide/AWS_SSM.html)

## 参考

- [【AWS Systems Manager】パッチマネージャー + メンテナンスウインドウの構成をCloudFormationテンプレート化してみた](https://dev.classmethod.jp/articles/patchmanager-cloudformation/)


## 糸冬了！！