経緯
EC2でWindowsサーバーを作成したはいいものの、何もしないとWindows Updateは自動で実施されないのでセキュリティー的に問題があります。
そこで、SSMのPatch Managerの機能を使用してWindows Updateを自動で定期的に実施していこうと思います。
イメージ
構成が複雑なので、整理してみました。

設定
メンテナンスウィンドウの作成
メンテナンスウィンドウを作成します。
SSMサービス-[メンテナンスウィンドウ]で「メンテナンスウィンドウの作成」をクリックします。

[名前]:maintenaunce_ec2(任意)

[指定]:Daily,毎日,02:00
[期間]:3時間
[タスク開始を停止]:1時間
02時+3時間-1時間である04時以降はメンテナンスウィンドウのタスクを開始できなくなります。
[タイムゾーンのスケジュール]:Japan

パッチベースラインの作成
デフォルトで作成されているベースラインは編集ができませんので、新規で作成します。
今回はwindowsを対象とします。
【バッチベースラインの詳細】
[名前]:PatchBaseline_Windows(任意)
[説明]:with MSSQL (任意)
[オペレーティングシステム]:Windows
【オペレーティングシステムの承認ルール】
[製品]:All
[分類]:CriticalUpdates,SecurityUpdates
[重要度]:Critical,Important
[自動承認 日数の設定]:7

今回はSQL Serverに関する更新も追加しました。
【アプリケーションの承認ルール】
[製品ファミリー]:SQL Server
[製品]:All
[分類]:CriticalUpdates,SecurityUpdates
[重要度]:Critical,Important
[自動承認 日数の設定]7

パッチグループの設定
パッチグループといっても難しい事はありません。
“Patch Group”がキーのタグを追加します。
SSMのメニューからだと、[フリートマネージャー]で該当のインスタンスを選択してタグを追加します。
今回は、”Patch Group”の値を”windows”としました。

パッチベースラインにパッチグループを追加
作成済みのパッチベースラインに先ほど作成したパッチグループを追加して、紐づけます。
該当のパッチベースラインを選択して、[アクション]-[パッチグループの変更]をクリックします。

[パッチグループ]:windows

パッチ適用を設定
これまで登録した”パッチグループ”と”メンテナンスウィンドウ”を使用してパッチ適用を設定していきます。
[パッチマネージャー]-「パッチ適用を設定」ボタンをクリックします。


設定の確認
どのように設定されたか確認してみましょう。
[メンテナンスウィンドウ]で作成済みのウィンドウIDを選択して、[タスク]タブを選択します。
そして、表示された[ウィンドウのタスクID]を選択して、「編集」ボタンをクリックします。

そうすると、タスクの編集画面が表示され、ここから
- 出力オプション
- SNS通知
- パラメーター
等が設定できます。
下記画像は一部のみ抜粋しております。

また、[ターゲット]タブではターゲットに関する修正ができます。

実行結果の確認
午前2時に実行されるように設定しましたので、翌日以降に確認しました。
実行結果は[メンテナンスウィンドウ]や[Run Comand]などから確認できるのですが、今回は[パッチマネージャー]の[ダッシュボード]から確認していきます。
[バッチオペレーション履歴]でステータスが”Success”になっている事を確認しました。
さらに詳細を確認していきます。
[バッチオペレーション]項目の”Install”をクリックします。

インスタンス毎の結果が表示されますので、詳細を確認するインスタンスを選択して「出力の表示」ボタンをクリックします。

該当インスタンスのRun Commandの結果が表示されます。
[ステップ名]が”Patch Windows”項目のOutputでInstalledCountが27あることを確認しました。
画面にも記載の通り、Outputの表示文字列は48,000文字までなので、全て確認したい時は、S3やCloudWatchLogsに出力します。
