PS課の杉村です。AWS Systems Managerは本当に便利になってきました。特にEC2では、Agentをインストールすることでログインすることなく様々なオペレーションが実施できます。しかし特にエンタープライズのお客様ではいろいろな制約から、なかなか有効活用できていないケースがあるのではないでしょうか。
「社内LANに存在するすべてのPC、サーバーはインターネットに出る場合はHTTP Proxyを経由せよ。それは専用線やVPNで社内LANと接続されているVPCも同様である」
そんなルールを課され、AWSを利用するときにいつも四苦八苦しているお客様も多いことでしょう。
SSMを便利に使いこなしたいのに、Proxy設定が大変。。。という目に私自身遭遇したので、今回はそれについて書いてみます。
SSM Agent自体のProxy設定
Amazon Linux (1/2) や最近のWindowsインスタンスにはSSM Agentが最初からインストールされています。
SSM Agentは、APIを実行するためにSSMのエンドポイントにアクセスしたり、特定のS3バケットへ接続する必要があります。そのためインターネットアクセスが必須なのです。
以下の手順で、SSMがProxyを経由してインターネットへ出るように設定してあげましょう。
Linuxの場合: プロキシを使用するように SSM エージェント を設定する
Windowsの場合: SSM エージェント が Windows インスタンス用にプロキシを使用するように設定する
さらにもう一歩。Linuxの場合...
例えばSSM RunCommandでスクリプトを実行するようなとき、そのスクリプトの中でAWS CLIを利用しているとします。
その場合はAWS CLIがProxyを利用するように設定してあげなければいけません。
下記を参照し環境変数を設定してあげてください。
HTTP プロキシを使用する
さらにもう一歩。Windowsの場合...
Linuxの場合と同様にSSM RunCommandでスクリプトを実行するようなときは、スクリプト内で環境変数をセットしてあげてください。
ただしAWS-RunPatchBaselineのように出来合いのRunCommand用ドキュメントを実行するときに、裏ではAWS Tools for Powershellを用いてS3のAPIを呼んだりしています。
そのためには SYSTEMアカウントのwininet.dll 用のProxy設定をしてあげなくてはいけません。
また、自動更新Windows UpdateはWinHttpのProxy設定を見に行くため、そちらも設定する必要があります。
...非常に面倒で、分かりづらいですね。
以下にその手順を記載します。
winhttp.dll用のProxy設定
Windows Update クライアントのために必要です。
参照: Windows Update クライアントが Windows Update Web サイトへの接続に使用するプロキシ サーバーを決定するしくみ
1. コマンドプロンプトを管理者として開く
2. 以下のコマンドを実行する
netsh winhttp set proxy proxy-server="your.proxy.net:80" bypass-list="169.254.169.254"
※your.proxy.net:80の部分は実際のHTTPプロキシのホスト名に置き換えてください
SYSTEMアカウントのwininet.dll用Proxy設定
SSM Agentが実行されるのはWindows上のSYSTEMアカウントです。RunCommandの各種ドキュメントは同アカウントにより実行されるのですが、ドキュメント内でAWSのAPIを呼んでいる場合、Proxy経由にするために以下の設定をしなくてはいけません。
1. 下記MicrosoftのサイトからツールをDLして対象マシン上に展開する
PsExec https://technet.microsoft.com/ja-jp/sysinternals/bb897553.aspx
2. コマンドプロンプトを管理者として開く
3. psexecがあるディレクトリにcdしてから以下のコマンドを実行する
.\psexec -i -s powershell.exe
4. psexecの使用許諾を問うプロンプトが現れたら、Agreeボタンを押下
5. 新しく開いたPowershellのプロンプトで以下のコマンドを実行(インターネットのプロパティが開く)
inetcpl.cpl
6. 「接続」タブを選択>ボタン「LAN の設定」をクリック
7. 以下設定を実施
7-1. チェックボックス「LAN にプロキシ サーバーを使用する(~)」をON
7-2. "アドレス"に ProxyサーバのFQDNを、 "ポート"に ポート番号 を入力
7-3. チェックボックス「ローカル アドレスにはプロキシ サーバーを使用しない」をON
7-4. ボタン「詳細設定」をクリック
7-5. 例外に 169.254.169.254;*.local;localhost を入力
ポイント
- SSM AgentでProxyを使いたいなら基本的にはSSM Agentに設定すればOK
- ただしスクリプト内でAWS CLI/SDKを使う場合は要注意
- WindowsでRunCommandでAWS管理のドキュメントを使う場合も要注意
杉村 勇馬 (記事一覧)
サーバーワークス → 株式会社G-gen 執行役員CTO
2021 Japan APN Ambassadors / 2021 APN All AWS Certifications Engineers
マルチAWSアカウント管理運用やネットワーク関係のAWSサービスに関するブログ記事を過去に執筆。
2021年09月から株式会社G-genに出向、Google Cloud(GCP)が専門に。G-genでもGoogle Cloud (GCP) の技術ブログを執筆中。