1. はじめに
Cloud Armor セキュリティ ポリシーは、インフラストラクチャの上流にある Google ネットワークのエッジでトラフィックをフィルタリングするユーザー定義ルールを構成するために使用されます。Network Edge セキュリティ ポリシーを使用すると、次のエンドポイント タイプを対象とするトラフィックを保護し、許可またはブロックできます。ネットワーク ロードバランサ、プロトコル転送、パブリック IP を持つ VM。

このコードラボでは、ユーザー定義ルールを使用して Cloud Armor セキュリティ ポリシーを構成し、DDoS 攻撃を防ぐ方法をデモします。

図 1. パブリック IP を持つ VM の保護のための Cloud Armor。
学習内容
- ユーザー定義ルール構成を含む Cloud Armor セキュリティ ポリシー
- UDP オフセットの構成とテスト。
必要なもの
- TCP/IP の知識
- Unix/Linux コマンドラインに関する知識
2. 始める前に
Cloud Shell で、プロジェクト ID が設定されていることを確認します。
gcloud config list project gcloud config set project [YOUR-PROJECT-NAME] prodproject=YOUR-PROJECT-NAME echo $prodproject
3. ターゲット VPC ネットワークを作成する
次のセクションでは、VPC ネットワークと関連するネットワーキング構成を設定します。Cloud Armor ネットワーク エッジ セキュリティ ポリシーはリージョン ベースであるため、関連するすべてのリソースを asia-southeast1 リージョンに設定します。
VPC ネットワーク
Cloud Shell から
gcloud compute networks create ca4nlb --project=$prodproject --subnet-mode=custom
サブネットの作成
Cloud Shell から
gcloud compute networks subnets create ca4nlb-asia-southeast1 --project=$prodproject --range=10.0.0.0/24 --network=ca4nlb --region=asia-southeast1
ファイアウォール ルールを作成します。
このセクションでは、想定される UDP トラフィックをポート 10000 に許可するファイアウォール ルールを追加します。
Cloud Shell で、次のテスト用に UDP ポート 10000 を開くファイアウォール ルールを作成します。
gcloud compute firewall-rules create ca4nlb-udp10000 --allow udp:10000 --network ca4nlb --source-ranges 0.0.0.0/0 --enable-logging
Cloud Shell から、IAP が VM インスタンスに接続できるようにするファイアウォール ルールを作成します。
gcloud compute firewall-rules create ca4nlb-iap-prod --network ca4nlb --allow tcp:22 --source-ranges=35.235.240.0/20 --enable-logging
4. ターゲット VM インスタンスを作成する
セキュリティ ポリシーをテストするためのターゲット VM を作成します。この VM にはパブリック IP アドレスがあり、UDP ポート 10000 が開いている必要があります。
Cloud Shell からインスタンス targetvm を作成します。
gcloud compute instances create targetvm \ --zone=asia-southeast1-b \ --image-family=debian-11 \ --image-project=debian-cloud \ --network-interface=network-tier=PREMIUM,nic-type=GVNIC,stack-type=IPV4_ONLY,subnet=ca4nlb-asia-southeast1 \ --shielded-secure-boot \ --shielded-vtpm \ --shielded-integrity-monitoring
5. 高度なネットワーク DDoS 対策を構成する
Cloud Shell から
gcloud compute security-policies create ca_advanced_ddos \
--type CLOUD_ARMOR_NETWORK \
--region asia-southeast1
gcloud compute security-policies update ca_advanced_ddos \
--network-ddos-protection ADVANCED \
--region asia-southeast1
gcloud compute network-edge-security-services create caedgepolicy \
--security-policy ca_advanced_ddos \
--region asia-southeast1
6. デフォルト ルールを使用してネットワーク エッジ セキュリティ ポリシーを作成する
ネットワーク エッジのセキュリティ ポリシーを作成する
Cloud Shell から
gcloud alpha compute security-policies create customnetworkedge --type=CLOUD_ARMOR_NETWORK --region=asia-southeast1
デフォルトのルールを変更する
Cloud Shell から
gcloud alpha compute security-policies rules update 2147483647 --security-policy=customnetworkedge --action=deny --region=asia-southeast1
7. 使用済みの構成済みルールを使用してネットワーク エッジ セキュリティ ポリシーを作成する
ユーザー定義の UDP オフセットが使用され、クラウド アーマー ポリシーで構成されています。この「オフセット値」を含むパケットは、ポリシー チェックに合格し、バックエンド VM に送信されます。次の例では、異なる値を持つ 2 つの「オフセット」を定義します。
最初の値は UDP ヘッダーの直後で、2 バイトの 0x1700 と完全に一致します。
2 番目の値は UDP ヘッダーのオフセット 8 バイトで、4 バイトの 0x12345678 と完全に一致します。
上記の事前定義された値は、UDP パケット ビットビューに変換されます。

Cloud Shell から
gcloud alpha compute security-policies add-user-defined-field customnetworkedge \ --user-defined-field-name=SIG1_AT_0 \ --base=udp --offset=8 --size=2 --mask=0xFF00 \ --region=asia-southeast1 gcloud alpha compute security-policies add-user-defined-field customnetworkedge \ --user-defined-field-name=SIG2_AT_8 \ --base=udp --offset=16 --size=4 --mask=0xFFFFFFFF \ --region=asia-southeast1 gcloud alpha compute security-policies rules create 1000 \ --security-policy=customnetworkedge \ --network-user-defined-fields="SIG1_AT_0;0x1700,SIG2_AT_8;0x12345678" \ --action=allow --region=asia-southeast1
8. セキュリティ ポリシーをターゲット VM に接続する
Cloud Shell から、保護された VM にセキュリティ ポリシーを適用します。
gcloud alpha compute instances network-interfaces update targetvm \ --security-policy=customnetworkedge \ --security-policy-region=asia-southeast1 \ --network-interface=nic0 \ --zone=asia-southeast1-b
Cloud Shell からターゲット VM を記述すると、securityPolicy がアタッチされていることがわかります。以降のテスト用にパブリック IP を記録します。
gcloud alpha compute instances describe targetvm --zone=asia-southeast1-b
networkInterfaces:
- accessConfigs:
- kind: compute#accessConfig
name: External NAT
natIP: 35.240.148.100
networkTier: PREMIUM
securityPolicy: https://www.googleapis.com/compute/alpha/projects/<project>/regions/asia-southeast1/securityPolicies/customnetworkedge
Cloud Shell で、保護された VM からセキュリティ ポリシーを切り離します。
gcloud alpha compute instances network-interfaces update targetvm \ --network-interface=nic0 \ --zone=asia-southeast1-b \ --security-policy=
9. テストリソースを準備します。
テスト VPC ネットワークを作成する
Cloud Shell から
gcloud compute networks create test --project=$prodproject --subnet-mode=custom
テスト サブネットを作成する
Cloud Shell から
gcloud compute networks subnets create test-asia-southeast1 --project=$prodproject --range=10.0.1.0/24 --network=test --region=asia-southeast1
ファイアウォールを作成する
Cloud Shell から、IAP が VM インスタンスに接続できるようにするファイアウォール ルールを作成します。
gcloud compute firewall-rules create test-iap-prod --network test --allow tcp:22 --source-ranges=35.235.240.0/20 --enable-logging
テスト VM を作成する
Cloud Shell から
gcloud compute instances create test01 \
--zone=asia-southeast1-b \
--image-family=debian-11 \
--image-project=debian-cloud \
--network-interface=network-tier=PREMIUM,nic-type=GVNIC,stack-type=IPV4_ONLY,subnet=test-asia-southeast1 \
--shielded-secure-boot \
--shielded-vtpm \
--shielded-integrity-monitoring
10. 確認
テスト VM コンソールにログインし、パケット ジェネレータ packit をインストールします。
sudo apt install packit
UDP オフセット設計に従って、packit を使用して UDP パケットを生成します。インターフェース(-s ens4)の送信元 IP アドレス(-s 10.0.1.2)から送信元ポート(-S 10000)を使用して、宛先ポート(-D 10000)を持つ targetVM 宛先 IP アドレス(-d 35.240.148.100)に送信される(-t udp)パケットをシミュレートします。パケットの内容が値と一致する(-p ‘0x 17 00 00 00 00 00 00 00 12 34 56 78')。(-c 4)パケットを送信します。
sudo packit -m inject -t UDP -i ens4 -s 10.0.1.2 -d 35.240.148.100 -S 10000 -D 10000 -p '0x 17 00 00 00 00 00 00 00 12 34 56 78' -c 4
ターゲット VM で tcpdump を実行して、UDP パケットをキャプチャします。
sudo tcpdump port 10000 -v -n
tcpdump: listening on ens4, link-type EN10MB (Ethernet), snapshot length 262144 bytes
06:36:18.434106 IP (tos 0x0, ttl 128, id 17173, offset 0, flags [none], proto UDP (17), length 40)
35.197.157.140.10000 > 10.0.0.2.10000: UDP, length 12
06:36:19.433656 IP (tos 0x0, ttl 128, id 55641, offset 0, flags [none], proto UDP (17), length 40)
35.197.157.140.10000 > 10.0.0.2.10000: UDP, length 12
06:36:20.433935 IP (tos 0x0, ttl 128, id 27161, offset 0, flags [none], proto UDP (17), length 40)
35.197.157.140.10000 > 10.0.0.2.10000: UDP, length 12
06:36:21.434150 IP (tos 0x0, ttl 128, id 46782, offset 0, flags [none], proto UDP (17), length 40)
35.197.157.140.10000 > 10.0.0.2.10000: UDP, length 12
テスト VM のトラフィック パターンを変更すると、ターゲット VM でパケットをキャプチャできなくなります。
sudo packit -m inject -t UDP -i ens4 -s 10.148.0.6 -d 34.87.79.31 -S 10000 -D 10000 -p '0x 33 33 00 00 00 00 00 00 12 34 56 78' -c 4
11. テレメトリー
Cloud 指標を開き、次の MQL を使用して NetworkSercurityPolicy テレメトリー データをクエリします。
fetch networksecurity.googleapis.com/RegionalNetworkSecurityPolicy | metric 'networksecurity.googleapis.com/l3/external/packet_count' | filter (resource.policy_name == 'customnetworkedge') | align rate(1m) | every 1m | group_by [metric.blocked], [value_packet_count_mean: mean(value.packet_count)] | group_by 1m, [value_packet_count_mean_mean: mean(value_packet_count_mean)] | every 1m
一致オフセット コマンドを使用して大量のトラフィックを生成します。
sudo packit -m inject -t UDP -i ens4 -s 10.148.0.6 -d 34.87.79.31 -S 10000 -D 10000 -p '0x 17 00 00 00 00 00 00 00 12 34 56 78' -c 1000000 -w 0.001 [result] Injected: 1000000 Packets/Sec: 10309.27 Bytes/Sec: 412371.13 Errors: 0
不一致オフセット コマンドを使用して、大量のトラフィックを生成します。
sudo packit -m inject -t UDP -i ens4 -s 10.148.0.6 -d 34.87.79.31 -S 10000 -D 10000 -p '0x 11 00 00 00 00 00 00 00 12 34 56 78' -c 1000000 -w 0.001 [result] Injected: 1000000 Packets/Sec: 10309.27 Bytes/Sec: 412371.13 Errors: 0
テレメトリーは policy_name でフィルタされ、blocked でグループ化されます。青い線は、ポリシールールで許可されたトラフィックを示しています。緑色の線は、ポリシールールによってブロックされたトラフィックを示します。

12. クリーンアップ手順
ターミナルの単一の Cloud Shell からラボ コンポーネントを削除する
gcloud compute instances delete targetvm --zone=asia-southeast1-b gcloud compute firewall-rules delete ca4nlb-udp10000 gcloud compute firewall-rules delete ca4nlb-iap-prod gcloud compute networks subnets delete ca4nlb-asia-southeast1 --region=asia-southeast1 gcloud compute networks delete ca4nlb gcloud alpha compute security-policies delete customnetworkedge --region=asia-southeast1 gcloud alpha compute network-edge-security-services delete caedgepolicy --region=asia-southeast1 gcloud alpha compute security-policies delete ca_advanced_ddos --region=asia-southeast1 gcloud compute instances delete test01 --zone=asia-southeast1-b gcloud compute firewall-rules delete test-iap-prod gcloud compute networks subnets delete test-asia-southeast1 --region=asia-southeast1 gcloud compute networks delete test
13. 完了
以上で、この Codelab は完了です。
学習した内容
- 顧客定義ルールを含む Cloud Armor セキュリティ ポリシー