AWSのSystems managerサービスの「パッチマネージャー」機能を利用すると、必要なアップデート内容のスキャンやインストールを行うことが出来ます。サービス自体は無料で使うことが出来ます。
※本記事では、プロキシ環境配下のWindows Serverでの試行結果を載せています。
※本内容は2022年のAWS環境に沿っているため、設定が現在と乖離している可能性が高いです。画面が異なる点はご了承ください。

では載せていきます!
パッチマネージャーの概要
Systems managerの管理下(マネージドインスタンス)に表示されるEC2を対象にセキュリティ適用状態をスキャンして、不足パッチを表示しつつ、インストールしてくれる機能です。
以下の実施パターンが考えられます。
- 手動で任意インスタンスをスキャン
- 手動で任意インスタンスをスキャン&インストール
- 上記を定期実行
なお、「インストール」の挙動として、パッチ適用のためにOS再起動が必要であれば、「自動的に再起動」が発生します。深夜等の時間帯で自動再起動が許容されるなら良いかと。
※2023年10月時点では、再起動するしないは選択可能で、時間も指定可能となっています。ただし「すぐに適用」から実施する場合は、同時スロットル数には注意しましょう。
パッチのスキャンポリシ(ベースライン)は定番が準備されていますが、自分でカスタマイズしたものをスキャンさせることも出来ます。例えば重要セキュリティパッチだけでなく、通常優先のセキュリティパッチも対象にしたり、リリース後、1ヶ月以上経過したものを対象にするとか。

OS標準の自動アップデートを使えばパッチマネージャって不要じゃなの?

それが許容されるのであれば・・・かな。
パッチマネージャを使うと、セキュリティパッチが準拠できているかを簡単に確認することが出来ます。また、実施タイミングを一括でコントロール出来ますので、使い勝手は良いです。

パッチマネージャーを使ってみました。
今回は「任意インスタンス」の「スキャン」を「即時実施」してみます。
※プロキシ配下のサーバに対しては事前にプロキシ設定等の準備が必要です(後述)。ここではプロキシ設定済みとして進めます。
AWS Systems Managerサービスよりパッチマネージャー機能をクリックして「パッチ適用を設定」をクリックします。

◇パッチを適用するインスタンス
今回は個別にインスタンスを選択します。他に特定のタグで絞り込むことが出来ます。さらにカスタマイズしたベースラインで任意EC2群に適用したい場合は「パッチグループ」を選択します。
◇パッチ適用スケジュール
パッチ適用スケジュールは事前定義したスケジュールに沿って実行することも出来ます(何時~何時の間にスキャンやインストールするとか)。今回はすぐに試したため、「スケジュール作成をスキップしインスタンスへのパッチ適用を直ちに実施する」を選びます。

◇パッチ適用操作
スキャンのみを選択します。なお、スキャンとインストールを選択した場合は、インストール&自動再起動も実施してくれるため注意が必要です。

数分待つと、以下のようにスキャンが完了しました(パッチマネージャーのダッシュボードの下部に履歴がある)。

「Scan」をクリックして該当インスタンスの「出力の表示」を選択します。

出力結果には「Windows」「Linux」「MacOS」用が並びますが、Windows Serverの場合は「PatchWindows」です。内容を確認すると不足パッチの確認が出来ました。

以上がスキャンをお試しで実施した結果です。
なお、即時実行の場合はWindows Serverのセキュリティパッチ「Critical」「Important」&配信7日後のものが対象となります。ここでは割愛しますが、即時実行のデフォルトを変更することも出来ますし、ベースラインのポリシをカスタマイズ定義することも可能です。
プロキシ環境下は大変でした。

またプロキシ?

VSS実行も時も大変だったけど今回も大変だった。
パッチマネージャは失敗となり、以下のようなエラーで悩まされることになります。
C:\ProgramData\Amazon\SSM\InstanceData\i-12345678906\document\orchestrati
on\xxxxx-xxxxx-xxxx-xxxxxx-xxxxx\PatchWindows\_script.ps1 : An error occ
urred when executing PatchBaselineOperations: �����[�g �T�[�o�[�ɐڑ��ł��܂���
�B
+ CategoryInfo : NotSpecified: (:) [Write-Error], WriteErrorExcep
tion
+ FullyQualifiedErrorId : Microsoft.PowerShell.Commands.WriteErrorExceptio
n,_script.ps1
failed to run commands: exit status 0xffffffff
大きく、次の設定が必要です。
- Windows Updateクライアント用
- Systemアカウント用のインターネットプロパティ
最初に、Windows Updateクライアント用ですが、WinHttpのプロキシ設定です。powershell(管理者権限)で以下コマンドを設定します。
# 設定(プロキシURL、プロキシポートは適宜変更)
netsh winhttp set proxy proxy-server="プロキシURL:プロキシポート" bypass-list="169.254.169.254"
# 確認
netsh winhttp show proxy
続いて、Systemアカウント用のインターネットプロパティですが、以下のことですね。

この設定って、アカウント毎になります。パッチマネージャは「system」アカウントを使いますが、systemアカウントの設定はひと手間かかります。
- Psexecをダウンロードして適当なフォルダに保存する。
https://technet.microsoft.com/ja-jp/sysinternals/bb897553.aspx - コマンドプロンプト(管理者)を起動してPsexecフォルダに移動して以下のコマンドを実行する。
.\psexec -i -s powershell.exe - Psexecの使用許諾が表示された場合はAgreeをクリックする。
- 新しくPowershellが開くため、以下を入力すると「インターネットのプロパティ」画面が表示される。
inetcpl.cpl
開いた後はプロキシ設定を行えばOKです。なお、プロキシの例外には「169.254.169.254;*.local;localhost」を設定しておきます。
※プロキシ設定についてはAWS公式サイトに情報が少なかったです。今回は以下のサイト様を参考にさせていただきました。
https://blog.serverworks.co.jp/tech/2018/12/12/aws-ssm-with-proxy/
まとめ
Systems Managerのパッチマネージャを利用してWindows Serverで足りないパッチをスキャンしてみました。上手く活用すればEC2のOSセキュリティ管理や維持を確実に効率化可能です。利用そのものは無償のため積極的に使うべきでしょう。

最後までご覧いただきありがとうございました!
コメント