AWS Systems Manager (旧SSM) でWindowsUpdateを自動化する

今回はAWS Systems Manager (以下SSM)を利用して、AWSに構築したWindows ServerOSのEC2のWindowsVerUpを自動化を設定してみます。Windows ServerOSはいったん構築したらバージョンアップ運用をしないという会社もそこそこあるのはないでしょうか？OS上のアプリ動作に影響が出る可能性があるので大型のバージョンアップは適用していない会社が多数派なのではと思いますが、まったくバージョンアップしないのもいかがなものかと...やるなら「簡単」で、「自動」の方が良いでしょうという単純思考に基づいてやってみましょう！

# 今回のゴール
SSMを利用して、自動的にWindows ServerOSを更新する（EC2にリモートログインやコマンド記述はしない）
バージョンアップ配信した結果のログを取得する
![SSM＿自動アップデート.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/655033/8e4c935d-7ea2-7046-140b-2bf2f478278e.png)


# 前提環境
・EC2(Windows Server 2019)をデプロイ済み
・IAMロールやポリシー作成の可能なIAMユーザ権限がある
・FeatureUpdates(FU)ではなく、QUやsecurityUpdateなどのバージョンアップの配信想定


# 設定の流れ
①IAMロールの作成
②SSM パッチベースライン作成
③SSM メンテナンスウィンドウの設定
④実行ログの確認

# 実際にやってみた
### ①IAMロールの作成
まずはSSMでEC2の設定を変更できるように、適切なポリシーがアタッチされたIAMロールを作成してEC2にアタッチしてやる必要があります。
![SSM＿IAMロール.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/655033/ef0575a4-1d98-d431-0957-c89249daae19.png)
IAMロールについて、初めから作成しても問題ないのですが、今回はSSM用にAWSが作成してくれるIAMロール(AmzonSSM~QuickSetUp)に権限を付け足して利用しようと思います。

AWSが作成してくれるIAMロールですがSSMの管理コンソールの左上に「高速セットアップ」というボタンがあり、ここから作成することができます。
![SSM_アクセス.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/655033/0a7c3f75-7845-5e6b-be0f-08e31309e68c.png)


Quick Setupのライブラリから[Host Management]を選択し、[作成]をクリックします。
デフォルトで以下の画面のように設定が入っているので、このまま[作成]をします。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/655033/8e934b20-6d56-e0d2-72b2-f5fca074de96.png)
![QuickSetUp.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/655033/d5336755-d221-358f-c325-0bbc76975eb2.png)
デフォルトのままだと現在選択されているリージョンのEC2全てにIAMロールが適用されます。
WindowsUpdateしたいEC2がデプロイされているリージョンと違うリージョンが選択されている場合やリージョン内全てのEC2には適用したくない場合、ターゲットの項目を適宜変更して下さい。


しばらくすると適用したリージョン内のEC2のIAMロールが[AmazonSSMRoleForInstanceQuickSetup]に変更されています。変更されていない場合は手動でIAMロールを変更しましょう。




次にSSM上でEC2が認識出来ているかを確認します。SSM管理コンソールの[フリートマネージャ]に現在のリージョンでSSMが認識しているEC2が表示されます。
IAMロール[AmazonSSMRoleForInstanceQuickSetup]がアタッチされてからフリートマネージャに反映するまでタイムラグがあるので気長に待ちましょう。
上手くいけば下記のように起動しているEC2は[オンライン]、停止しているものは[接続が失われました]という表示がでます。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/655033/d54c8965-f4cc-c1ad-5cbf-02d2fb8c06fe.png)

SSM管理画面に表示されるようになったところで、IAMロール＝[AmazonSSMRoleForInstanceQuickSetup]を編集してSSMでEC2の操作ができるようにしていきます。編集と言っても[AmazonEC2RoleforSSM]のポリシーを追記するだけです。



![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/655033/cfbc6f0e-da2d-9f16-d4e7-9cb051b2fb41.png)


### ②SSM パッチベースライン作成
続いてどういうOSに、どういうパッチを当てていくのかパッチベースラインを作成していきます。
SSMの管理コンソール画面の左側メニューで[パッチマネージャー]を選択します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/655033/2ed08225-a173-61dc-8d40-326727efc545.png)


[パッチベースライン]-[パッチベースラインを作成]を選択します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/655033/b6577d6e-0db0-ddfb-81fc-3635e83b616b.png)


新しくパッチベースラインをこんな感じで設定していきます。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/655033/a4c15e5f-721c-7799-c2ea-722a749541a9.png)



【パッチベースライン】
名前　→任意
説明　→任意
オペレーティングシステム　→Windows

【オペレーティングシステムの承認ルール】
製品　→WindowsServer2019
分類　→[criticalUpdates],[securityUpdates],[ServerPacks],[UpdateRollups]
重要度　→[Critical],[Important]


ちなみに分類ですが、各項目の内容はこんな感じです。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/655033/f5cafd81-5b28-5d5e-8532-5c1b210fed03.png)
出典　https://bizlog.tech/windows-update-category/

upgradesを含めてしまうとFUまで当たってしまうので、今回は外しています。

バッチベースラインをしたら、適用していきます。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/655033/467cee48-f58a-996a-eb6e-08c01c1751ed.png)

先ほど作成したパッチベースラインを選択して、右上の[パッチを適用]をクリックします。

![パット適用.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/655033/c214e007-0c88-b397-352b-837d53806366.png)

パッチベースラインを適用するターゲットやスケジュールなどを設定していきます。
今回は[パッチを適用するインスタンス]は[インスタンスを手動で選択する]にして、パッチ適用スケジュールは[新しいメンテナンスウィンドウを作成する]で設定していきます。またパッチ適用操作は[スキャンとインストール]を選択します。
スケジュールについて、既に作成している場合は[既存のメンテナンスウィンドウを選択する]でもOKです。

### ③メンテナンスウィンドウの設定
メンテナンスウィンドウがWindowsServerでいうところのタスクスケジューラ的なものです。
今回は毎日日本時間24:00にパッチ適用させたいので以下のように設定していきます。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/655033/33ad4640-4e35-9a0f-9bc8-a4fa194026ac.png)

時間指定が15:00になっていますが、これはUTCなので、日本時間にしたいときには＋9:00してください。
メンテナンスウィンドウ名は任意のものを入れてください。

これで時間になれば、パッチベースラインに設定した処理が、ターゲット指定したEC2で実行されることになります。d(`・ω・’)

### ④実行ログの確認
パッチ適用が成功したかログで確認してみましょう。
[メンテナンスウィンドウ]-対象のメンテナンスウィンドウIDを選択して[詳細の表示]-[履歴]でパッチ適用ジョブが成功したのステータス状況が確認できます。
![実行ログ.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/655033/5e0650e5-c2ac-29fe-9918-fc973a61838a.png)

ウィンドウ実行IDを選択し詳細情報を表示させることで、以下のような詳細ログも表示させることができます。
![コマンドログ.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/655033/6d74f8e9-8286-adac-adf5-3bcadccd1d2c.png)



# おわりに
本番環境をバージョンアップする際には動作影響ないか確認して、バックアップ（スナップショット取得）してから作業しましょう。
WSUSを個別に用意する必要がなくなるので便利機能なのですが、やはりちゃんと運用できることが前提ですね...

# 参考にしたサイト
https://it.hirokun.net/entry/aws-ssm-windowsupdate

https://www.skri.gr.jp/2021/11/3896/