G-gen の三浦です。当記事では、Secure Web Proxy を使って、Virtual Private Cloud (以下、VPC)上の Compute Engine VM からインターネットへ接続する際の Web アクセス制御の方法を紹介します。
- Secure Web Proxy とは
- 検証内容の概要
- SWP の初期構築
- Web アクセスと Windows Update のブロック確認
- Windows Update 許可ルールの適用
- Windows Update のアクセス確認
Secure Web Proxy とは
Secure Web Proxy(以下、SWP)は、Google Cloud (旧称 GCP)が提供するフルマネージドの HTTP プロキシです。
HTTP プロキシとは、クライアントとサーバー間の HTTP 通信を仲介する中継機能のことであり、セキュリティや統制の強化に利用されます。
例えば、Google 翻訳(https://translate.google.com
)へのアクセスは許可し、YouTube(https://youtube.com
)へのアクセスはブロックするといったように、URL 単位やドメイン名単位でのアクセス制御が可能です。
SWP では、TLS インスペクション機能を利用することで、暗号化された HTTPS 通信でも URL パス単位で詳細なアクセス制御を行うことができます。以下は、その例です。
https://google.com/aaa
へのアクセスは許可https://google.com/bbb
へのアクセスはブロック
このように、SWP を使用することで、業務に必要なサイトのみを許可し、不要なサイトへのアクセスを防ぐことで、セキュリティを強化できます。
- 参考 : Secure Web Proxy の概要
検証内容の概要
構成図
今回は、以下の構成図の環境で検証を行いました。
検証の流れ
検証手順は以下のとおりです。
SWP の初期構築:
最初に、許可ルールを設定せずに SWP を構築します。Web アクセスと Windows Update のブロック確認:
Compute Engine VM(Windows Server 2022 Datacenter)から SWP を通じて、Web アクセスを試みます。この時点では、Windows Update も含めた全てのアクセスがブロックされることを確認します。Windows Update 許可ルールの適用:
Windows Update の URL のみを許可リストに追加し、そのルールを SWP に適用します。Google へのアクセスは引き続きブロックされる状態を維持します。Windows Update のアクセス許可確認:
再度、Windows VM からアクセスを試行します。Windows Update が正常に実行できる一方、www.google.com
へのアクセスが引き続きブロックされることを確認します。
SWP の初期構築
プロキシ専用サブネットの作成
SWP 用の専用サブネットを作成します。このサブネットは、SWP が外部ネットワークと通信するためのものです。/23
のサブネットマスクが推奨されています。
$ gcloud compute networks subnets create proxy-01 \--purpose=REGIONAL_MANAGED_PROXY \--role=ACTIVE \--region=asia-northeast1 \ # SWP を構築するリージョン--network=test-vpc \ # SWP を構築する VPC--range=192.168.0.0/23 # サブネット範囲
- 参考 : プロキシ サブネットを作成する
SSL/TLS 証明書の作成
次に、SWP を構築するリージョンに、SWP に設定するための SSL/TLS 証明書を作成します。本検証では Google Cloud が提供する Google マネージド証明書を使用します。Google マネージド証明書の作成方法は、以下の記事を参照してください。
Google マネージド SSL/TLS 証明書 blog.g-gen.co.jp
SWP のポリシーの設定
SWP に適用するセキュリティポリシーを作成します。このポリシーは、SWP を通じて行われるトラフィックの制御を定義します。以下の YAML ファイルを使用してポリシーを定義します。<PROJECT_ID>
の部分は、自環境の Google Cloud プロジェクトの ID で置き換えてください。
# policy.yamldescription: "Secure Web Proxy policy" # ポリシーの説明name: projects/<PROJECT_ID>/locations/asia-northeast1/gatewaySecurityPolicies/policy1 # プロジェクト ID を入力し、ポリシー名を指定
YAML ファイルが準備できたら、gcloud コマンドを使用してポリシーを設定します。
$ gcloud network-security gateway-security-policies import policy1 \--source=policy.yaml \ # 前手順で作成した policy.yaml を指定--location=asia-northeast1 # SWP を構築するリージョン名を指定
SWP インスタンスの設定
次に、SWP インスタンスの設定ファイルを準備します。このファイルには、SWP の待ち受けポートや IP アドレス、SSL/TLS 証明書、適用するポリシーなどを定義します。
# gateway.yamlname: projects/<PROJECT_ID>/locations/asia-northeast1/gateways/swp1 # SWP インスタンスの名前を指定(例. swp1)type: SECURE_WEB_GATEWAYaddresses: ["192.168.64.99"] # SWP インスタンス用の IP を指定(プロキシ専用サブネットではなくクライアント VM 側のサブネット)ports: [8080] # SWP が待ち受けるポート番号を指定certificateUrls: ["projects/{PROJECT_ID/locations/asia-northeast1/certificates/cert-1"] # 作成した Google マネージド SSL/TLS 証明書を指定gatewaySecurityPolicy: projects/<PROJECT_ID>/locations/asia-northeast1/gatewaySecurityPolicies/policy1 # 前手順で作成したセキュリティポリシーを指定network: projects/<PROJECT_ID>/global/networks/test-vpc # VPC を指定subnetwork: projects/<PROJECT_ID>/regions/asia-northeast1/subnetworks/tokyo-01 # サブネットを指定(プロキシ専用サブネットではなくクライアント VM 側のサブネット)
gcloud コマンドを使用して SWP インスタンスを構築します。SWP 構築時に、Cloud Router と Cloud NAT も自動的に構築されます。この Cloud NAT は SWP 専用のものであり、他のクライアントは利用できません。
$ gcloud network-services gateways import swp1 \ # SWP インスタンスの名前を指定(例. swp1)--source=gateway.yaml \ # 作成した yaml を指定--location=asia-northeast1 # SWP を構築するリージョン名を指定
- 参考 : ウェブプロキシを設定
Web アクセスと Windows Update のブロック確認
プロキシの設定
Windows VM にログインします。Windows キー + R
でコマンド実行プロンプトを開き、ms-settings:network-proxy
と入力してプロキシ設定を開きます。

表示された画面で、スクリーンショットを参考に、プロキシの設定を有効化します。
設定項目 | 設定値 |
---|---|
Address | 192.168.64.99(SWP インスタンスの IP アドレス) |
Port | 8080(SWP インスタンスのポート番号 ) |

Web アクセスの確認
Web ブラウザで Google(https://www.google.com
)にアクセスし、ページが表示されないことを確認します。

Cloud Logging の確認
次に、Cloud Logging を使用してアクセスログを確認します。Cloud Logging の確認方法に関しては、以下記事を参照してください。
Cloud Loggingの概念と仕組みをしっかり解説 blog.g-gen.co.jp
ログには、許可ルールが未設定のため、デフォルトの拒否アクションでアクセスがブロックされたことが記録されます。

- 参考 : ログを理解して表示する
Windows Update の確認
Windows キー + R
を押し、ms-settings:windowsupdate
と入力して Windows Update 設定を開きます。

「Check for updates」を選択し、更新プログラムのダウンロードが開始されることを確認します。

プロキシに許可ルールが設定されていないため、ダウンロードが失敗し、エラーが表示されます。

Windows Update 許可ルールの適用
URL リストの設定
Windows Update に必要な URL リストを作成します。このリストには、Windows Update がアクセスするドメインが含まれており、これらのドメインへのアクセスを許可するルールを作成します。
# url.yamlname: projects/<PROJECT_ID>/locations/asia-northeast1/urlLists/url-1 # URL リストの名前を指定。<PROJECT_ID> にはプロジェクト ID を入力。values:- "*.prod.do.dsp.mp.microsoft.com"- "*.dl.delivery.mp.microsoft.com"- "*.windowsupdate.com"- "*.delivery.mp.microsoft.com"- "*.update.microsoft.com"- "adl.windows.com"- "tsfe.trafficshaping.dsp.mp.microsoft.com"- "definitionupdates.microsoft.com"
OS のバージョンやエディションによって必要な URL が異なる場合があるため、詳細は以下の参考ドキュメントを参照してください。
作成した URL リストを SWP に設定します。
$ gcloud network-security url-lists import url-1 \--location=asia-northeast1 \ # SWP を構築するリージョンを指定--source=url.yaml # 作成した URL リストの YAML ファイルを指定
ルールの設定
次に、作成した URL リストに基づいて、Windows Update だけを許可するルールを作成します。このルールは、アクセスを許可するドメインリスト(url-1)に基づいて動作します。
# rule.yamlname: projects/<PROJECT_ID>/locations/asia-northeast1/gatewaySecurityPolicies/policy1/rules/rule-1 # ルール名を指定。<PROJECT_ID> にはプロジェクト ID を入力basicProfile: ALLOW # ルールのアクションを指定(今回は許可のため "ALLOW" を指定)enabled: true # ルールの状態を指定(今回は"有効" を指定)priority: 100 # 優先度を指定(数値が小さいほど優先)description: Allow Windows Update # ルールの説明sessionMatcher: "inUrlList(host(), 'projects/<PROJECT_ID>/locations/asia-northeast1/urlLists/url-1')" # ルールとURLリストを紐づけ、指定したドメインにアクセスを許可
作成したルールを SWP に適用しているポリシーに反映させます。
$ gcloud network-security gateway-security-policies rules import rule-1 \--source=rule.yaml \ # 作成したルールファイルを指定--location=asia-northeast1 \ # SWP を構築しているリージョンを指定--gateway-security-policy=policy1 # 適用するポリシー名を指定
Windows Update のアクセス確認
Web アクセスの確認
再度、Google(https://www.google.com
)へアクセスし、ページが表示されず、ブロックされていることを確認します。

Windows Update の再確認
Windows Update の画面から「Retry」を選択します。

更新プログラムのダウンロードが進んでいることを確認します。

インストールを続行するために再起動が必要となります。サーバーを再起動しても問題ないことを確認し、「Restart now」をクリックして再起動します。

再起動後に再度 Windows Update の画面を確認し、緑のチェックマークが表示され、Windows が最新の状態であることを確認します。
