Proxyサーバを用いるAWS環境でPatch Managerがこける場合の確認事項

クマ松です。

Windowsサーバへパッチを適用する為にSystems Managerの一機能**Patch Manager**を用いている方も多いのでないでしょうか。
インターネットへの通信時にProxyサーバを経由させる環境でPatch Managerが異常終了した場合に、まず確認した方が良いことをご紹介します。

1. SSM Agent のプロキシ設定(レジストリ)
1. WinHTTP プロキシの設定
1. LocalSystemユーザーアカウントのInternet Explorerのプロキシ設定

10.10.10.10:8080というプロキシとポートを利用しているような環境で、コマンドや確認結果を解説します。

##SSM Agent のプロキシ設定
SSM Agentのプロキシが設定されているかを確認します。
Environmentにhttp_proxyとno_proxyが設定されていることを確認しましょう。

```powershell
PS C:\Windows\system32> $serviceKey = "HKLM:\SYSTEM\CurrentControlSet\Services\AmazonSSMAgent"
PS C:\Windows\system32> Get-ItemProperty -Path $serviceKey

Version                          : 3.0.882.0
Environment                      : {http_proxy=10.10.10.10:8080, no_proxy=169.254.169.254}
DependOnService                  : Winmgmt
Type                             : 16
Start                            : 2
ErrorControl                     : 1
ImagePath                        : "C:\Program Files\Amazon\SSM\amazon-ssm-agent.exe"
DisplayName                      : Amazon SSM Agent
ObjectName                       : LocalSystem
Description                      : Amazon SSM Agent
FailureActions                   : {128, 81, 1, 0...}
FailureActionsOnNonCrashFailures : 1
PSPath                           : Microsoft.PowerShell.Core\Registry::HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\AmazonSSMAgent
PSParentPath                     : Microsoft.PowerShell.Core\Registry::HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services
PSChildName                      : AmazonSSMAgent
PSDrive                          : HKLM
PSProvider                       : Microsoft.PowerShell.Core\Registry
```

##WinHTTPプロキシ設定
管理者権限で起動したコマンドプロンプトにて、WinHTTPプロキシの設定を確認します。

```text
netsh winhttp show proxy

現在の WinHTTP プロキシ設定:

    プロキシ サーバー:  10.10.10.10:8080
    バイパス一覧     :  169.254.169.254
```

##LocalSystemユーザーアカウントのInternet Explorerのプロキシ設定
SYSTEMユーザ（アカウントの実際の名前はnt authority/system）はAdministratorsグループのメンバーと同じ権限レベルを持つ強力なユーザです。
Linuxでいうrootユーザに当たりますが、ユーザプロファイル情報を持たないので「SYSTEMユーザのレジストリ設定をSYSTEMユーザでRDP接続して確認」なんてことはできません。

SYSTEMユーザのInternet Explorerのプロキシ設定は以下の手順で確認します。

①Microsoftのサイトから PsTools をダウンロードします
https://docs.microsoft.com/en-us/sysinternals/downloads/psexec
![PsTools.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/307047/047c532f-cd08-d970-2953-a3c7c89c4b6c.png)


②ダウンロードしたzipを解凍します

③管理者権限でコマンドプロンプトを起動します
④先ほどzipを解凍して作成されたフォルダへ cd コマンドを使用して移動します
![cmd.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/307047/2a04b260-bb8d-3d02-6687-a886033d836f.png)

⑤psexec.exe -i -s -d "C:\Program Files\Internet Explorer\iexplore.exe" コマンドを実行します

PsExecの初回起動時のみ、使用許諾（PsExec License Agreement）のダイアログが表示されます。
内容を読んで［Agree］ボタンをクリックします。

![pslicense.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/307047/425efb95-4214-f788-60dd-ebf8a08ef82a.png)


これでIEをSystemユーザ権限で起動することが出来ます。

⑥設定 > インターネットオプション > 接続タブ > LAN の設定 を開きます
![IE.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/307047/4f5ec465-0238-26b5-5f00-bad1484b177c.png)
![LANの設定.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/307047/4df0b2c7-a1fc-0c18-94f4-25d04f42c168.png)

![IE設定.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/307047/57178dbc-58fe-1871-3465-0206aad37cdd.png)

##3点とも問題なかった場合
SSMエージェント・Patch Managerを利用する為に通信が必要な宛先が3つあります。
以下の宛先をプロキシサーバでブロックしていないかを確認します。

- ssm.ap-northeast-1.amazonaws.com
- ec2messages.ap-northeast-1.amazonaws.com
- s3.ap-northeast-1.amazonaws.com

##何故WinHTTPとIE設定の両方の設定が必要なのか
IEってブラウザですよね。何かを検索するときにしか利用しないイメージがあります。
IEのプロキシ設定はもちろん IE が通信を行う際に利用されます。
しかし一部のWindowsアプリケーションでは、IEと同様の通信モジュールである**wininet.dll**を利用しています。
その場合、IEの設定値を利用してインターネットへ通信しようとします。
IEの設定を参照しないアプリも存在します。

WinHTTPの設定とIEの設定は揃えるのが無難です。
以下のコマンドでIEのプロキシ設定をWinHTTPの設定にインポートし、両方の設定を揃えることが出来ます。

```powershell
netsh winhttp import proxy source=ie
```


##参考サイト
[SSM エージェント が Windows Server インスタンス用にプロキシを使用するように設定する](https://docs.aws.amazon.com/ja_jp/systems-manager/latest/userguide/sysman-install-ssm-proxy.html)
[グループ ポリシーを使用して Windows クライアントに WinHTTP プロキシ設定を適用する](https://docs.microsoft.com/ja-JP/troubleshoot/windows-client/networking/use-group-policy-apply-winhttp-proxy-settings)
[Windows Server EC2インスタンスのプロキシ設定で気を付けるべきこと](https://dev.classmethod.jp/articles/windows-ec2-proxy-settings/)
[IE からみるプロキシの設定について](https://jpdsi.github.io/blog/internet-explorer-microsoft-edge/ProxySettings/)
[System Account in Windows](https://security.stackexchange.com/questions/66743/system-account-in-windows#:~:text=The%20SYSTEM%20account%20is%20the,Session%20Management%20Subsystem%20(SMSS).)