[プレビュー]Network Firewall ProxyでWindows Updateのアウトバウンド制御を試してみた

[プレビュー]Network Firewall ProxyでWindows Updateのアウトバウンド制御を試してみた

2025.11.30

はじめに

こんにちは、こんばんは。コンサルティング部のぐっさんです。

「AWS Network Firewall Proxy」というサービスが先日プレビュー公開されました。
NAT Gatewayと統合されたマネージドな明示的プロキシサービスで、VPCからのアウトバウンド通信をドメインベースで制御できることに加えHTTPメソッド・URI・ヘッダー・ステータスコードなどの細かなフィルタリングを使った通信制御が可能になります。

https://aws.amazon.com/jp/about-aws/whats-new/2025/11/aws-network-firewall-proxy-preview/

https://aws.amazon.com/blogs/networking-and-content-delivery/securing-egress-architectures-with-network-firewall-proxy/

簡単ですが以下のような構成で閉域網からのインターネットアクセスにプロキシサーバーをSquid等で自前で立ててアウトバウンドの通信制御を行っていることが多いと思います。
(ECS等でコンテナ運用されていることもありますよね。)

proxy_1

この自前のプロキシサーバーがマネージドなサービスとして運用可能になるかも?!という話です。
パブリックプレビューはオハイオ(us-east-2)リージョンで無料で試すことができます。
※紐づくNAT Gatewayは通常通りの料金がかかりますので注意

今回は実用的なシナリオとして「Windows Updateのアウトバウンド制御」を検証してみました。
許可したドメインのみ通信可能なホワイトリスト方式で設定し、Allow/Denyの両方のログを確認します。

検証環境

構成図

シンプルですが以下のような構成になります。

proxy_2

使用リソース

※VPC(サブネット/ルートテーブル含む)・EC2の作成は完了しているものとして今回の記事では手順を割愛し、主な設定値のみ記載します。

リソース 用途
VPC 検証用VPC(パブリック/プライベートサブネット)
NAT Gateway パブリックサブネットに配置
SSM用VPCエンドポイント プライベートサブネットからのRDP接続用
Windows EC2 テスト用クライアント(プライベートサブネット)
Network Firewall Proxy★新規作成 NAT Gatewayに関連付け
Proxy Endpoint★新規作成 パブリックサブネットに自動作成(NAT GWと同じサブネット)

VPC・サブネットの構成

項目 設定値
VPC CIDR 10.0.0.0/16
パブリックサブネット 10.0.1.0/24(us-east-2a)
プライベートサブネット 10.0.100.0/24(us-east-2a)
インターネットゲートウェイ パブリックサブネット用
NAT Gateway (Zonal) パブリックサブネットに配置

リソースマップはこんな感じです。

vpc_map

ルートテーブル

パブリックサブネット:

送信先 ターゲット
10.0.0.0/16 local
0.0.0.0/0 Internet Gateway

プライベートサブネット:
※ここにはNat Gatewayへの経路を設定しません。エンドポイント経由でアクセス可能です。

送信先 ターゲット
10.0.0.0/16 local

EC2の準備

項目 設定
リージョン us-east-2(オハイオ)
AMI ami-0e76804793f63f57e(Windows_Server-2022-Japanese-Full-Base-2025.09.10)
サブネット プライベート
インスタンスタイプ t3.medium
IAMロール AmazonSSMManagedInstanceCore ポリシーをアタッチ
接続方法 SSM Fleet Manager経由でRDP

アップデート検証のため少し古いAMIを使いました。

セキュリティグループ

インバウンドルール:

タイプ ポート ソース 用途
なし - - SSM経由のためインバウンド不要

アウトバウンドルール:

タイプ ポート 送信先 用途
HTTPS すべて 0.0.0.0/0 アウトバウンドアクセスを全て許可

SSM用VPCエンドポイント

プライベートサブネットからSSM経由でRDP接続するため、以下のVPCエンドポイントを作成します:

  • com.amazonaws.us-east-2.ssm
  • com.amazonaws.us-east-2.ssmmessages

VPCエンドポイントのセキュリティグループでは、EC2のSGからの443ポートでのインバウンドアクセスを許可しておきます。
アウトバウンドルールは不要です。

NFW Proxyのセットアップ

ルールグループ作成

  • VPCコンソールから「Proxy rule groups」を選択し、ルールグループを作成します。

nfw_p_1

  • 適当なルールグループ名を設定します。文字/数字/ハイフンのみ使用できます。

nfw_p_2

  • ルールの定義
    Network Firewall Proxyには3つの検証フェーズがあり、以下の順にトラフィック検査が走ります。
    • PreDNS – プロキシが目的の宛先ドメインのDNSを解決しようとする前に適用される
    • PreRequest – プロキシが宛先サーバーにHTTPリクエストを送信する前に適用される
    • PostResponse – プロキシが宛先サーバーからHTTP応答を受信した後に適用される

今回のユースケースではシンプルにPreDNSフェーズで特定ドメインへのアクセスを許可し、
他のドメインへはデフォルト拒否を行うイメージで設定してみます。
いわゆるホワイトリスト形式の運用を想定しています。

ルール名を設定し、条件を追加します。

nfw_p_3

Windows Update用に以下のドメインを許可設定します。

windowsupdate.microsoft.com
*.windowsupdate.microsoft.com
*.update.microsoft.com
*.windowsupdate.com
download.windowsupdate.com
download.microsoft.com
*.download.windowsupdate.com
wustat.windows.com
ntservicepack.microsoft.com
go.microsoft.com
dl.delivery.mp.microsoft.com
*.delivery.mp.microsoft.com

許可ドメインの一覧はWSUS用の手順ですが、以下を参照しました。

https://learn.microsoft.com/ja-jp/windows-server/administration/windows-server-update-services/deploy/2-configure-wsus

実際のルール設定値:

項目 設定値
フェーズ PreDNS
条件キー request:DestinationDomain
演算子 StringLike
windowsupdate.microsoft.com, *.windowsupdate.microsoft.com, *.update.microsoft.com, *.windowsupdate.com, download.windowsupdate.com, download.microsoft.com, *.download.windowsupdate.com, wustat.windows.com, ntservicepack.microsoft.com, go.microsoft.com, dl.delivery.mp.microsoft.com, *.delivery.mp.microsoft.com
アクション Allow
優先度 0

補足: ワイルドカードで指定したかったため、演算子をStringLikeにしてみました。

nfw_p_4

条件が追加され、「値」の部分を押下すると設定されているドメインリストを確認できました。

nfw_p_5

ルールグループが無事作成されました!

nfw_p_6

Proxy Configuration作成

作成したルールグループを関連付け、デフォルトアクションを設定します。

VPCコンソールの「プロキシ設定」へ。

nfw_p_7

デフォルトアクション
ドメインホワイトリスト形式の運用を想定しているため、PreDNSのデフォルトアクションを拒否にして
その他フェーズは「許可」とします。

フェーズ デフォルトアクション
PreDNS Deny
PreRequest Allow
PostResponse Allow

nfw_p_8

ルールグループのアタッチ
先ほど作成したホワイトリストをアタッチします。優先度は「0」のままとします。

nfw_p_9

作成
確認して作成します。

nfw_p_10

作成後の詳細画面はこんな感じです。

nfw_p_11

Proxy作成

いよいよProxyを作成します!
VPCのコンソールから「プロキシ」を選択し作成します。

nfw_p_12

詳細設定の内容です。
任意のプロキシ名を入力し、先ほど設定したプロキシのConfigを選択します。

先に作っておいたNatゲートウェイをここで指定。
オプションのTLS検査は無効にしておき、ポートはデフォルト。ログ記録を有効化します。

nfw_p_13

ログはCloudWatch Logs、S3、Data Firehoseへ配信できます。
今回はAllow/Alert/Deny全てのログをCloudWatch Logsに出力することとします。この設定でプロキシを作成します!

nfw_p_14

作成すると状態が「アタッチ中」となります。
Nat Gatewayへのアタッチをしている状態で、私の環境ではおよそ10分でアタッチ済みとなりました。

nfw_p_15

作成完了後にNat Gatewayの設定を見てみます。
「Attachments」タブにnetwork-firewall-proxyが存在し、紐づくVPCエンドポイントが設定されています。

nat_1

このVPCエンドポイントの設定を見てみます。

nat_2

Nat Gatewayと同じパブリックサブネットに、プロキシ用のVPCエンドポイントが自動作成されていました。
同じVPC内であればルートテーブルでアクセス許可されているのでEC2からのエンドポイントアクセスはこのまま出来そうですね。
ちなみに、このVPCエンドポイントのセキュリティグループはVPCのデフォルトセキュリティグループがアタッチされていました。
デフォルトのセキュリティグループはSecurity HubのEC2.2対応などでルール削除している環境もありそうなのでGAでどんな仕様になるか気になりました。

nat_3

EC2からこのVPCエンドポイントへアクセスする必要があるため、紐づいているデフォルトのセキュリティグループのインバウンドルールへ以下を追加しました。

タイプ プロトコル ポート範囲 ソース
HTTPS TCP 443 EC2のSG
カスタムTCP TCP 1080 EC2のSG

作成完了後、コンソールからProxy EndpointのDNS名とポート番号を確認しておきます。

nfw_p_16

Windows側の設定

Windows EC2にRDP接続し、システムプロキシを設定します。

事前確認: プロキシ設定前のアクセステスト

まず、プロキシ設定前に直接インターネットへアクセスできないことを確認します。

curl.exe http://go.microsoft.com

プライベートサブネットでNAT Gateway経由のルートがないため、タイムアウトするはずです。

実行結果

PS C:\Users\Administrator> curl.exe http://go.microsoft.com
curl: (28) Failed to connect to go.microsoft.com port 80 after 21049 ms: Could not connect to server

想定通りですね。

curlでProxy経由のアクセステスト

OSのプロキシ設定前に、curlの -x オプションで直接プロキシを指定して接続動作を確認します。
curlでのHTTPSアクセスは追加のオプションが必要となるためシンプルに確認できるHTTPのURLへリクエストを送ってみます。

<proxy-endpoint>の部分にはプロキシのプライベートDNS名が入ります。

許可ドメインへのアクセス(成功するはず):

curl.exe -x "<proxy-endpoint>" http://go.microsoft.com

こちらは実行後特にプロンプトへ返答がありませんでした。

許可していないドメインへのアクセス(拒否されるはず):

curl.exe -x "<proxy-endpoint>" http://example.com

結果は「Forbidden」が返されました。想定通りです!

Windows PowerShellでは curlInvoke-WebRequest のエイリアスになっているため、一般的なcurlを使う場合は curl.exe と明示的に指定します。

この時点で許可ドメインへのアクセスが成功し、許可外のドメインが拒否されていれば、Proxyの設定は正しく動作しています。

ログ確認

curlアクセス後のCloudWatch Logsを見てみましょう。

Allowログ(go.microsoft.com)

以下のようなログがALLOW_LOGSにありました。
"final_action": "allow"で、"dest_domain": "go.microsoft.com."とあり想定される動きをしていそうです。

{
    "event_timestamp": 1764488306,
    "proxy_name": "test-nfw-proxy",
    "client_src_ip": "10.0.100.210",
    "final_action": "allow",
    "src_vpc": "vpc-xxxxxxxxxxxxxxxxx",
    "dest_domain": "go.microsoft.com.",
    "http_method": "GET",
    "dest_ip": "23.221.245.214",
    "http_status_code": 302,
    "final_rule_name": "default",
    "final_rule_group_name": ""
}

Denyログ(example.com)

DENY_LOGSもみてみます。
"final_action": "deny"で、"dest_domain": "example.com."とあり、デフォルトアクションで拒否されたことがわかります。
ドメインチェックのフェーズで拒否されているため、"dest_ip"やステータスコードの値は詳細が入っていません。

{
    "event_timestamp": 1764489065,
    "proxy_name": "test-nfw-proxy",
    "client_src_ip": "10.0.100.210",
    "final_action": "deny",
    "src_vpc": "vpc-xxxxxxxxxxxxxxxxx",
    "dest_domain": "example.com.",
    "http_method": "GET",
    "dest_ip": "<nil>",
    "http_status_code": -1,
    "final_rule_name": "default",
    "final_rule_group_name": ""
}

Windowsのプロキシ設定

今回Windows Updateを実行するために、以下のプロキシ設定を行いました。

設定 用途 ポート
ユーザープロキシ GUIの「設定」から手動更新 1080(HTTP)

補足: 設定アプリから手動でWindows Updateを実行する場合はユーザープロキシのみでも動作しますが、自動更新やSSMパッチマネージャー経由の場合はSYSTEMアカウントで実行されるため、WinHTTPプロキシ設定が必要かと思います。

1. ユーザープロキシ設定(GUI)

Windowsの設定 → ネットワークとインターネット → プロキシ で以下を設定します。
<proxy-endpoint>には実際のProxy EndpointのプライベートDNS名をアドレスに設定します。
xxx.proxy.nfw.us-east-2.amazonaws.comのような値です。

項目
プロキシサーバーを使う オン
アドレス <proxy-endpoint>
ポート 1080

ちなみに443を設定した場合は失敗しました。コントロールパネルでLAN設定を見ると、GUIの設定から行ったプロキシ設定はデフォルトでHTTPが指定される仕様のようでした。

WinHTTPプロキシを設定する場合

今回は試していませんが、以下のような設定になるかと思います。

# 設定確認
netsh winhttp show proxy

# プロキシ設定
netsh winhttp set proxy proxy-server="<proxy-endpoint>:ポート番号" bypass-list="169.254.169.254"

補足: bypass-listにEC2のメタデータエンドポイントを入れておかないと、今回のようにSSM経由でアクセスしている場合にWinHTTPプロキシを有効化したままインスタンスを再起動した場合EC2へのアクセス不可となることがありますのでご注意ください。

動作検証

Windows Update実行

Windowsの設定 → Windows Update → 更新プログラムの確認を実行します。

update_1

しばらくするとダウンロードが始まります。更新のチェックは問題なく通っていそうです。

update_2

「再起動が必要です」の表示まできたらあとはEC2を再起動するのみ!(再起動が不要なアップデートもあります)

update_3

Windows Updateのログでも「All federated installs have completed」のメッセージが出力されていました。
ちなみに、UpdateのログはPowerShellで「Get-WindowsUpdateLog」コマンドを実行することでデスクトップに出力されます。

CloudWatch Logsでログ確認

Allow/Denyそれぞれのログを確認します。

Allowログ

ログ自体は大量に出ていますが、以下のようにホワイトリストのルールでワイルドカードで指定したドメインにもアクセスできています。

{
    "event_timestamp": 1764497623,
    "proxy_name": "test-nfw-proxy",
    "client_src_ip": "10.0.100.210",
    "final_action": "allow",
    "src_vpc": "vpc-xxxxxxxxxxxxxxxxx",
    "dest_domain": "au.download.windowsupdate.com.",
    "http_method": "GET",
    "dest_ip": "146.75.78.172",
    "http_status_code": 206,
    "final_rule_name": "default",
    "final_rule_group_name": ""
}

Denyログ

bingへの接続が拒否されていました。アップデート後の検索エンジンの最適化で設定されるものでしょうか。
アップデート自体に直接は関係なさそうなのでそのままにしておきます。

{
    "event_timestamp": 1764498850,
    "proxy_name": "test-nfw-proxy",
    "client_src_ip": "10.0.100.210",
    "final_action": "deny",
    "src_vpc": "vpc-xxxxxxxxxxxxxxxxx",
    "dest_domain": "www.bing.com.",
    "http_method": "",
    "dest_ip": "<nil>",
    "http_status_code": -1,
    "final_rule_name": "default",
    "final_rule_group_name": ""
}

ログを確認したのでEC2を再起動してみます。

update_4

アップデート確認

再起動後、再接続をして設定からWindows Updateの結果をみてみます。

update_5

無事アップデートが完了していますね。

update_6

プロキシ設定解除(検証後)

ユーザープロキシは設定アプリから「プロキシサーバーを使う」をオフにします。

その他、EC2やVPCなど検証に使用したリソースを削除しておきます。

所感

良かった点

  • マネージドなので構築・運用が楽
  • NAT Gatewayとの統合でアーキテクチャがシンプル
  • ルール設定がGUIで直感的に設定できる
  • CloudWatch Logsとの統合が便利

気になった点

  • プロキシエンドポイントのセキュリティグループ設定
  • GAでの料金設定

まとめ

Network Firewall Proxyを使ってWindows Updateのアウトバウンド制御を試してみました。
今回はPreDNSフェーズのみを検証しましたが、PreRequestやPostResponseも試してみたいですね。

マネージドサービスとして運用負荷が下がる点は魅力的です。
現状キャッシュ機能等はなさそうなため、用途によってはSquid等のキャッシュプロキシとの使い分けが必要です。

GA時の料金体系や追加機能に期待しつつ、引き続きウォッチしていきたいと思います!

参考リンク

この記事をシェアする

FacebookHatena blogX

関連記事