こんにちは。Creageビジネス事業部の白鳥です。

目次

  1. はじめに
  2. 今回のブログの要約
  3. 構成図
  4. 実施内容
  5. 躓いた箇所①
  6. 躓いた箇所②
  7. まとめ
     

1.はじめに

今回のブログでは、プライベートサブネットに配置したEC2(Windows)にAWS Systems Manager Patch Managerを用いてパッチを適用しようとした際に私が躓いたことをお伝えします。
想定読者は、普段からAWSを扱っており、AWS System Manager Patch Managerを実施した際にエラーが発生した方です。
AWS System Manager Patch Managerは、EC2へパッチを適用するプロセスを自動化する機能です。
AWS Systems Manager Patch Managerについての説明は割愛させていただきますので、詳しく知りたい方はAWSの公式サイトをご参照ください。
AWS Systems Manager Patch Manager - AWS Systems Manager (amazon.com)
 ブログ内の画像は、実際に躓いた環境のものではなく、サンドボックス環境で再現したものを使用しております。

2.今回のブログ要約

AWS Systems Manager Patch Managerのパッチ適応の失敗は、権限設定とネットワーク設定の問題が多いです。
 ネットワーク経路を確認し、AWSサービスの権限が適切かを確認する必要があります。今回の場合はS3 endpointポリシーの設定ミスでした。
 Proxyを経由した通信の場合は設定に注意が必要です。今回はWindowsサーバのWinHTTP Proxy設定が足りていませんでした。
3章から詳細を説明していきます。

3.構成図

今回関連するリソース以外は省略して記載しています。

※補足説明
・Internetには、 Microsoft Update Catalogに接続する際に通信されます。
・EC2(Windows)のAMIは「Microsoft Windows Server 2019 Base」を使用しております。
・今回のパッチ適用はWindows Updateのことを指します。
・東京リージョンで実施しています。

4.実施内容

AWS Systems ManagerのPatch Manager画面から「今すぐパッチ適用」を選択します。

・パッチ適応操作はスキャンを選択します。
インストールを行わないのは、パッチについての情報を取得してから実施したいためです。
・今回は特定の1つのインスタンスに適応するため、手動で選択します。
複数のインスタンスがある場合タグなどでまとめて適応できます。

今すぐパッチ適用を選択します。

実施した結果がこちらです。(失敗しました)

5.躓いた箇所①

5-1.躓いた事象
スキャンに失敗しました。

エラー内容は下記の通りです。

C:\ProgramData\Amazon\SSM\InstanceData\i-093cc9389fe364452\document\orchestration\e1544cd1-3cf9-49e7-be86-80b7a23c09b1\PatchWindows\_script.ps1 :An error occurred when executing PatchBaselineOperations: The remote server returned an error: (403) Forbidden.
+ CategoryInfo : NotSpecified: (:) [Write-Error], WriteErrorException
+FullyQualifiedErrorId:Microsoft.PowerShell.Commands.WriteErrorException,_script.ps1
 
failed to run commands: exit status 0xffffffff

5-2. 原因特定と解決
エラー内に「Microsoft.PowerShell.Commands.WriteErrorException」とありましたので、こちらの公式サイトから該当エラーを探しました。
Patch Manager のトラブルシューティング - AWS Systems Manager (amazon.com)

SSM Agent と AWS マネージド S3 バケットとの通信にあります設定を、S3 endpointポリシーに記載する必要がありました。
追加した設定は下記の通りです。

 

{
 "Version": "2012-10-17",
 "Statement": [
  {
   "Effect": "Allow",
   "Principal": "*",
   "Action": "s3:GetObject",
   "Resource": [
    "arn:aws:s3:::aws-ssm-ap-northeast-1/*",
    "arn:aws:s3:::aws-windows-downloads-ap-northeast-1/*",
    "arn:aws:s3:::amazon-ssm-ap-northeast-1/*",
    "arn:aws:s3:::amazon-ssm-packages-ap-northeast-1/*",
    "arn:aws:s3:::ap-northeast-1-birdwatcher-prod/*",
    "arn:aws:s3:::patch-baseline-snapshot-ap-northeast-1/*"
   ]
  }
 ]
}

5-3. 解決策実施後の結果
エラーが変わりました。(嬉しいです!)

6.躓いた箇所②

6-1.躓いた事象
5-3実施後に出力されたエラーです。

 

Invoke-PatchBaselineOperation : Exception Details: An error occurred when attempting to search Windows Update.
Exception Level 1:
Error Message: Exception from HRESULT: 0x80072EE2
Stack Trace: at WUApiLib.IUpdateSearcher.Search(String criteria)
at Amazon.Patch.Baseline.Operations.PatchNow.Implementations.WindowsUpdateAgent.SearchForUpdates(StringsearchCriteria)
At C:\ProgramData\Amazon\SSM\InstanceData\i-081247a23797e0c11\document\orchestration\f7c1cd4b-b127-4e8a-bc0e-a4db578f0982\PatchWindows\_script.ps1:219 char:13
+ $response = Invoke-PatchBaselineOperation -Operation Scan -SnapshotId ...
+ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+ CategoryInfo : OperationStopped: (Amazon.Patch.Ba...UpdateOperation:FindWindowsUpdateOperation) [Invoke-PatchBaselineOperation], Exception
+ FullyQualifiedErrorId : Exception Level 1:
Error Message: Exception Details: An error occurred when attempting to search Windows Update.
Exception Level 1:
Error Message: Exception from HRESULT: 0x80072EE2
Stack Trace: at WUApiLib.IUpdateSearcher.Search(String criteria)
at Amazon.Patch.Baseline.Operations.PatchNow.Implementations.WindowsUpdateAgent.SearchForUpdates(String searchCriteria)
Stack Trace: at Amazon.Patch.Baseline.Operations.PatchNow.Implementations.WindowsUpdateAgent.SearchForUpdates(String searchCriteria)
at Amazon.Patch.Baseline.Operations.PatchNow.Implementations.WindowsUpdateOperation.SearchAndProcessResult(List`1 kbGuids)
at Amazon.Patch.Baseline.Operations.PatchNow.Implementations.WindowsUpdateOperation.SearchByGuidsPaginated(List`1 kbGuids, Int32 maxPageSize)
at Amazon.Patch.Baseline.Operations.PatchNow.Implementations.WindowsUpdateOperation.FilterWindowsUpdateSearch(List`1 filteringMethods)
at Amazon.Patch.Baseline.Operations.PatchNow.Implementations.FindWindowsUpdateOperation.DoWindowsUpdateOperation()
at Amazon.Patch.Baseline.Operations.PatchNow.Implementations.WindowsUpdateOperation.DoBeginProcessing()
,Amazon.Patch.Baseline.Operations.PowerShellCmdlets.InvokePatchBaselineOperation
failed to run commands: exit status 0xffffffff

6-2. 原因特定と解決

エラー内容に「0x80072EE2」とありましたのでこのエラーコードを調べました。
原因は様々あるそうですが、今回は次の2つのネットワーク設定が原因でした。
 

6-2-1.EC2が外部に接続できない問題(URLフィルタリング)

Internet接続する際に、管理者に通信許可を行うURL申請を行わなければならなかったのですが、それを忘れておりました。
許可いただいた宛先は下記の2つです。(HTTPSとHTTP)
*.windowsupdate.com
*.microsoft.com
 

6-2-2.Windowsサーバでプロキシを設定する際の設定が抜けていた問題

プロキシ経由でWindows Updateをする際、以下の2種類の設定が必要でした。
 ・Windows にブラウザ用のプロキシ
 ・Windows Updateなどシステムの通信で使われるWinHTTP Proxy
ブラウザでWindows Updateカタログにアクセス出来ていたので通信は問題ないと思ってしまいました。
下記公式サイトを参考に実施しました。
Windows Update に関する問題のトラブルシューティング - Windows クライアント |マイクロソフト学習 (microsoft.com)

設定はPowerShellで行います。
・Winhttpプロキシの内容を確認するコマンドを実行します。
netsh winhttp show proxy

Winhttpプロキシは設定されていません。
・インターネットオプションで設定されているプロキシをインポートするコマンドを実行します。
netsh winhttp import proxy source=ie

設定後もう一度「netsh winhttp show proxy」

Winhttpプロキシにインターネットオプションで設定されているプロキシが設定されました。
 

6-3. 解決策実施後の結果
スキャンが成功しました!

7.おわりに

AWSやネットワーク、OSの知識が乏しいのもあり、躓いた箇所をまとめさせていただきました。
AWSの公式サイトにエラーの原因と解決策が記載されているので、大抵の問題はそれでクリアできて大変助かりました。
しかし、OSやネットワーク周りの知識の必要性を痛感したのでもっと学んでいきたいと思いました。
同じようなエラーに遭遇した方の参考になれば幸いです。