1. 簡介
網路防火牆政策
防火牆是安全雲端環境的基本構成元素。我們先前是在機構和資料夾層級推出防火牆政策,同時讓虛擬私有雲防火牆保持不變。這個版本將把防火牆政策結構擴展至虛擬私有雲層級,並針對現行的防火牆政策支援做出多項強化措施,讓 Google Cloud 資源階層結構提供統一的防火牆支援,並為使用者提供一致的使用者體驗,以安全、有彈性且可擴充的方式管理防火牆政策控制項。
網路防火牆政策可做為防火牆規則的容器使用。在政策與虛擬私有雲網路建立關聯之前,網路防火牆政策中定義的規則不會在任何位置強制執行。每個虛擬私有雲網路都只能有一項相關聯的網路防火牆政策。網路防火牆政策支援防火牆規則中受 IAM 規範的標記 (或只有標記),這類標記會取代目前的網路標記,並可用於為工作負載提供身分。
跨網路共用網路防火牆政策,並與受 IAM 控管的標記整合,可大幅簡化防火牆的設定與管理作業。
隨著網路防火牆政策推出,Google Cloud 的防火牆政策現在包含以下元件:
- 階層式防火牆政策
- 虛擬私有雲防火牆規則
- 網路防火牆政策 ( 全域和區域性)
階層式防火牆政策支援資源階層內的機構和資料夾節點,虛擬私有雲防火牆規則和網路防火牆政策則會在虛擬私有雲層級套用。虛擬私有雲防火牆規則和網路防火牆政策的一大差異在於,虛擬私有雲防火牆規則只能套用至單一虛擬私有雲網路,網路防火牆政策則可連結至單一虛擬私有雲或一組虛擬私有雲,並具備批次更新等其他好處。
最後,每個虛擬私有雲網路都有默示防火牆規則:
- 輸出規則,其動作允許,目的地為 0.0.0.0/0
- 輸入規則的動作遭拒,來源為 0.0.0.0/0
根據預設,強制執行順序如下圖所示:
請注意,您可以交換虛擬私有雲防火牆規則和全域網路防火牆政策之間的強制執行順序。客戶隨時可以使用 gcloud 指令指定強制執行順序。
標記
新的整合至網路防火牆政策規則的標記,是在 Google Cloud 資源階層的機構層級定義的鍵/值組合資源。顧名思義,這類標記包含 IAM 存取權控管,指定誰可以對標記執行動作。例如,允許某個主體指定哪些主體可以指派值給標記,以及哪些主體可將標記附加至資源。將標記套用至資源後,網路防火牆規則即可使用該標記來允許及拒絕流量。
標記會遵循 Google Cloud 的繼承資源模型,也就是說,標記及其值會從父項向下傳遞。因此,如果您在同一處建立標記,就能供資源階層結構中的其他資料夾和專案使用。如要進一步瞭解代碼和存取權限制,請前往這個頁面。
標記不應與網路標記混淆,後者是可新增至 Compute Engine 執行個體的字串;這些執行個體會與執行個體相關聯,並在執行個體停用時消失。虛擬私有雲防火牆規則可能包含網路標記,但這類標記不視為雲端資源,因此不受 IAM 存取權控管限制。
請注意,本文件中會交替使用標記和受 IAM 控管的標記。
建構項目
本程式碼研究室分為兩個部分:第一部分示範使用單一虛擬私有雲網路的網路防火牆政策和標記;第二部分則會說明在對等互連的虛擬私有雲網路之間使用標記,如下圖所示。因此,本程式碼研究室需要一項專案,並建立多個虛擬私有雲網路。
課程內容
- 如何建立網路防火牆政策
- 如何搭配網路防火牆政策建立及使用標記
- 如何透過虛擬私有雲網路對等互連使用標記
軟硬體需求
- Google Cloud 專案
- 具備部署執行個體與設定網路元件的知識
- 虛擬私有雲防火牆設定知識
2. 事前準備
建立/更新變數
本程式碼研究室會使用 $variables,協助在 Cloud Shell 中實作 gcloud 設定。
在 Cloud Shell 中執行以下操作:
gcloud config set project [project-id] export project_id=`gcloud config list --format="value(core.project)"` export org_id=[org] export region=us-central1 export zone=us-central1-a export prefix=fwpolicy
3. 建立虛擬私有雲網路和子網路
虛擬私人雲端網路
建立 fwpolicy-vpc1:
gcloud compute networks create $prefix-vpc1 --subnet-mode=custom
子網路
在所選區域中建立個別的子網路:
gcloud compute networks subnets create $prefix-vpc1-subnet \ --range=10.0.0.0/24 --network=$prefix-vpc1 --region=$region
Cloud NAT
為 fwpolicy-pc1 建立 Cloud Router 和 Cloud NAT 閘道:
gcloud compute routers create $prefix-vpc1-cr \ --region=$region --network=$prefix-vpc1 gcloud compute routers nats create $prefix-vpc1-cloudnat \ --router=$prefix-vpc1-cr --router-region=$region \ --auto-allocate-nat-external-ips \ --nat-all-subnet-ip-ranges
4. 建立執行個體
建立防火牆規則,允許從 IAP 範圍輸入 SSH 流量,以免尚未在 IAP 設定過程中定義流量:
gcloud compute firewall-rules create allow-ssh-ingress-from-iap-vpc1 \ --direction=INGRESS \ --action=allow \ --network=$prefix-vpc1 \ --rules=tcp:22 \ --source-ranges=35.235.240.0/20
建立 fwpolicy-vpc1 用戶端和網路伺服器執行個體:
gcloud compute instances create $prefix-vpc1-www \ --subnet=$prefix-vpc1-subnet --no-address --zone $zone \ --metadata startup-script='#! /bin/bash apt-get update apt-get install apache2 -y a2ensite default-ssl a2enmod ssl # Read VM network configuration: md_vm="http://169.254.169.254/computeMetadata/v1/instance/" vm_hostname="$(curl $md_vm/name -H "Metadata-Flavor:Google" )" filter="{print \$NF}" vm_network="$(curl $md_vm/network-interfaces/0/network \ -H "Metadata-Flavor:Google" | awk -F/ "${filter}")" vm_zone="$(curl $md_vm/zone \ -H "Metadata-Flavor:Google" | awk -F/ "${filter}")" # Apache configuration: echo "Page on $vm_hostname in network $vm_network zone $vm_zone" | \ tee /var/www/html/index.html systemctl restart apache2' gcloud compute instances create $prefix-vpc1-client \ --subnet=$prefix-vpc1-subnet --no-address --zone $zone
由於未定義任何虛擬私有雲防火牆規則 (如本節開頭所述,設定 IAP 時應建立的允許 SSH 規則除外),而且根據預設,系統會拒絕所有輸入流量,因此用戶端執行個體無法存取各個網路伺服器。為了驗證要求是否會逾時,請開啟新視窗,並啟動對 fwpolicy-vpc1-client 執行個體的 SSH 工作階段,然後嘗試 curl 網路伺服器:
user@fwpolicy-vpc1-client$ curl fwpolicy-vpc1-www --connect-timeout 2
預期輸出內容:
curl: (28) Connection timed out after 2001 milliseconds
如有需要,請透過 Cloud Shell 確認未針對 fwpolicy-vpc1 定義虛擬私有雲防火牆規則:
gcloud compute firewall-rules list --filter="network:$prefix-vpc1"
5. 全域網路防火牆政策
建立全域網路防火牆政策:
gcloud compute network-firewall-policies create \ $prefix-example --description \ "firewall-policy-description" --global
新增允許網路流量的規則:
gcloud compute network-firewall-policies rules create 500 \ --action allow \ --description "allow-web" \ --layer4-configs tcp:80,tcp:443 \ --firewall-policy $prefix-example \ --src-ip-ranges 10.0.0.0/16 \ --global-firewall-policy --enable-logging
說明網路防火牆政策,並驗證規則已成功 added
:
gcloud compute network-firewall-policies describe \ $prefix-example --global
預期的輸出內容 (向上捲動至輸出的開頭;請注意,系統也會顯示隱含規則):
creationTimestamp: '2022-09-23T12:46:53.677-07:00' description: "firewall-policy-description" fingerprint: Np1Rup09Amc= id: '7021772628738421698' kind: compute#firewallPolicy name: fwpolicy-example ruleTupleCount: 13 rules: - action: allow description: allow-web direction: INGRESS disabled: false enableLogging: true kind: compute#firewallPolicyRule match: layer4Configs: - ipProtocol: tcp ports: - '80' - ipProtocol: tcp ports: - '443' srcIpRanges: - 10.0.0.0/16 priority: 500 ruleTupleCount: 5 ...
將網路防火牆政策與 fwpolicy-vpc1 建立關聯:
gcloud compute network-firewall-policies associations create \ --firewall-policy $prefix-example \ --network $prefix-vpc1 \ --name $prefix-vpc1-association \ --global-firewall-policy
驗證是否已成功套用至 fwpolicy-vpc1 網路:
gcloud compute networks get-effective-firewalls $prefix-vpc1
預期的輸出內容 (請注意,如果有優先順序執行階層式防火牆政策,相關規則會顯示在頂端):
TYPE FIREWALL_POLICY_NAME PRIORITY ACTION DIRECTION IP_RANGES network-firewall-policy fwpolicy-example 500 ALLOW INGRESS 10.0.0.0/16 network-firewall-policy fwpolicy-example 2147483645 GOTO_NEXT INGRESS ::/0 network-firewall-policy fwpolicy-example 2147483647 GOTO_NEXT INGRESS 0.0.0.0/0 network-firewall-policy fwpolicy-example 2147483644 GOTO_NEXT EGRESS ::/0 network-firewall-policy fwpolicy-example 2147483646 GOTO_NEXT EGRESS 0.0.0.0/0
驗證是否也已成功套用至 fwpolicy-vpc1 網路伺服器:
gcloud compute instances network-interfaces \ get-effective-firewalls $prefix-vpc1-www --zone $zone
預期的輸出內容與上述指令類似 (fwpolicy-vpc1 有效防火牆):
TYPE FIREWALL_POLICY_NAME PRIORITY ACTION DIRECTION IP_RANGES network-firewall-policy fwpolicy-example 500 ALLOW INGRESS 10.0.0.0/16 network-firewall-policy fwpolicy-example 2147483645 GOTO_NEXT INGRESS ::/0 network-firewall-policy fwpolicy-example 2147483647 GOTO_NEXT INGRESS 0.0.0.0/0 network-firewall-policy fwpolicy-example 2147483644 GOTO_NEXT EGRESS ::/0 network-firewall-policy fwpolicy-example 2147483646 GOTO_NEXT EGRESS 0.0.0.0/0
切換回 vpc1-client SSH 工作階段,然後再次嘗試使用 curl (請注意,下方指令假設 fwpolicy
已用作前置字串;如有使用其他名稱,請據此調整 curl
指令):
user@vpc1-client$ curl fwpolicy-vpc1-www --connect-timeout 2 Page on vpc1-www in network vpc1 zone us-central1-a
在 Cloud Shell 中,確認網路防火牆政策已套用至 fwpolicy-vpc1:
gcloud compute network-firewall-policies describe \ $prefix-example --global
預期的輸出內容 (向上捲動至輸出的開頭):
--- associations: - attachmentTarget: https://www.googleapis.com/compute/v1/projects/PROJECT_ID/global/networks/fwpolicy-vpc1 name: fwpolicy-vpc1-association ...
6. IAM 控管的標記
標記是可以附加至機構、資料夾或專案的鍵/值組合。詳情請參閱「建立及管理標記」和「必要權限」。
「tagAdmin」角色可讓您建立新的代碼、更新及刪除現有代碼。機構管理員可以授予這個角色。在 Cloud Shell 中更新 IAM 政策,為使用者新增 tagAdmin 角色。如要查看每個預先定義角色所包含的權限,請參閱權限參考資料頁面。
gcloud organizations add-iam-policy-binding $org_id \ --member user:[user@example.com] --role roles/resourcemanager.tagAdmin
執行下列指令,確認哪些使用者俱有 resourcemanager.tagAdmin 角色:
gcloud organizations get-iam-policy $org_id --flatten=bindings \ --filter=bindings.role:roles/resourcemanager.tagAdmin
建立新的標記鍵:
gcloud resource-manager tags keys create tags-vpc1 \ --parent organizations/$org_id \ --purpose GCE_FIREWALL \ --purpose-data network=$project_id/$prefix-vpc1
預期輸出內容:
Waiting for TagKey [tags-vpc1] to be created...done. createTime: '2022-09-23T20:49:01.162228Z' etag: PwvmFuHO4wK1y6c5Ut2n5w== name: tagKeys/622132302133 namespacedName: ORGANIZATION_ID/tags-vpc1 parent: organizations/ORGANIZATION_ID purpose: GCE_FIREWALL purposeData: network: https://www.googleapis.com/compute/v1/projects/PROJECT_ID/global/networks/6749205358365096383 shortName: tags-vpc1 updateTime: '2022-09-23T20:49:03.873776Z'
建立新標記值:
gcloud resource-manager tags values create web-servers \ --parent=$org_id/tags-vpc1 gcloud resource-manager tags values create web-clients \ --parent=$org_id/tags-vpc1
確認標記值已成功建立:
gcloud resource-manager tags values list \ --parent=$org_id/tags-vpc1
預期輸出內容:
NAME SHORT_NAME DESCRIPTION tagValues/349564376683 web-servers tagValues/780363571446 web-clients
在 Cloud Shell 中說明現有的網路防火牆政策規則,確認未使用標記:
gcloud compute network-firewall-policies rules describe 500 \ --firewall-policy $prefix-example \ --global-firewall-policy
預期輸出內容:
--- action: allow description: allow-web direction: INGRESS disabled: false enableLogging: true kind: compute#firewallPolicyRule match: layer4Configs: - ipProtocol: tcp ports: - '80' - ipProtocol: tcp ports: - '443' srcIpRanges: - 10.0.0.0/16 priority: 500 ruleTupleCount: 5
在 Cloud Shell 中更新規則,僅允許來自 vpc1-tags/web-clients 標記金鑰的流量,並在具有 vpc1-tags/web-servers 標記鍵的執行個體上安裝規則。
gcloud compute network-firewall-policies rules update 500 \ --firewall-policy $prefix-example \ --src-secure-tags $org_id/tags-vpc1/web-clients \ --target-secure-tags $org_id/tags-vpc1/web-servers \ --global-firewall-policy
在 Cloud Shell 中說明現有的網路防火牆政策規則,確認已成功套用標記,並回報為 effectiveIVE:
gcloud compute network-firewall-policies rules describe 500 \ --firewall-policy $prefix-example \ --global-firewall-policy
預期輸出內容:
--- action: allow description: allow-web direction: INGRESS disabled: false enableLogging: false kind: compute#firewallPolicyRule match: layer4Configs: - ipProtocol: tcp ports: - '80' - ipProtocol: tcp ports: - '443' srcIpRanges: - 10.0.0.0/16 srcSecureTags: - name: tagValues/479619031616 state: EFFECTIVE priority: 500 ruleTupleCount: 7 targetSecureTags: - name: tagValues/230424970229 state: EFFECTIVE
接著透過 Cloud Shell 來確認規則已套用至 vpc1:
gcloud compute networks get-effective-firewalls $prefix-vpc1
預期輸出內容:
network-firewall-policy fwpolicy-example 500 ALLOW INGRESS 10.0.0.0/16 network-firewall-policy fwpolicy-example 2147483645 GOTO_NEXT INGRESS ::/0 network-firewall-policy fwpolicy-example 2147483647 GOTO_NEXT INGRESS 0.0.0.0/0 network-firewall-policy fwpolicy-example 2147483644 GOTO_NEXT EGRESS ::/0 network-firewall-policy fwpolicy-example 2147483646 GOTO_NEXT EGRESS 0.0.0.0/0
驗證即使網路防火牆政策仍與虛擬私有雲網路相關聯,允許網路流量的規則也不會再套用至網路伺服器,因為標記未新增至執行個體:
gcloud compute instances network-interfaces \ get-effective-firewalls $prefix-vpc1-www --zone $zone
預期的輸出內容 (請注意,未顯示優先順序為 500 的防火牆規則):
network-firewall-policy fwpolicy-example 2147483645 GOTO_NEXT INGRESS ::/0 network-firewall-policy fwpolicy-example 2147483647 GOTO_NEXT INGRESS 0.0.0.0/0 network-firewall-policy fwpolicy-example 2147483644 GOTO_NEXT EGRESS ::/0 network-firewall-policy fwpolicy-example 2147483646 GOTO_NEXT EGRESS 0.0.0.0/0
將代碼使用者角色授予特定代碼和使用者。如要查看每個預先定義角色所包含的權限,請參閱權限參考資料頁面。
gcloud resource-manager tags keys add-iam-policy-binding \ $org_id/tags-vpc1 \ --member user:[email] --role roles/resourcemanager.tagUser gcloud projects add-iam-policy-binding $project_id \ --member user:[email] --role roles/resourcemanager.tagUser
確認已成功新增角色:
gcloud resource-manager tags keys get-iam-policy $org_id/tags-vpc1 gcloud projects get-iam-policy $project_id --flatten=bindings \ --filter=bindings.role:roles/resourcemanager.tagUser
預期輸出內容:
bindings: - members: - user:[user] role: roles/resourcemanager.tagUser ...
將標記套用至 fwpolicy-vpc1-www 執行個體:
gcloud resource-manager tags bindings create \ --location $zone \ --tag-value $org_id/tags-vpc1/web-servers \ --parent \ //compute.googleapis.com/projects/$project_id/zones/$zone/instances/$prefix-vpc1-www
預期輸出內容:
Waiting for TagBinding for parent [//compute.googleapis.com/projects/PROJECT_ID/zones/us-central1-a/instances/38369703403698502] and tag value [tagValues/34 9564376683] to be created with [operations/rctb.us-central1-a.6144808968019372877]...done. done: true metadata: '@type': type.googleapis.com/google.cloud.resourcemanager.v3.CreateTagBindingMetadata name: operations/rctb.us-central1-a.6144808968019372877 response: '@type': type.googleapis.com/google.cloud.resourcemanager.v3.TagBinding name: tagBindings/%2F%2Fcompute.googleapis.com%2Fprojects%2FPROJECT_NUMBER%2Fzones%2Fus-central1-a%2Finstances%2F38369703403698502/tagValues/349564376683 parent: //compute.googleapis.com/projects/PROJECT_NUMBER/zones/us-central1-a/instances/38369703403698502 tagValue: tagValues/349564376683
驗證繫結:
gcloud resource-manager tags bindings list --location $zone --effective --parent //compute.googleapis.com/projects/$project_id/zones/$zone/instances/$prefix-vpc1-www
預期輸出內容:
namespacedTagKey: ORGANIZATION_ID/tags-vpc1 namespacedTagValue: ORGANIZATION_ID/tags-vpc1/web-servers tagKey: tagKeys/622132302133 tagValue: tagValues/349564376683
再次驗證有效的防火牆規則:
gcloud compute instances network-interfaces \ get-effective-firewalls $prefix-vpc1-www --zone $zone
預期輸出內容:
network-firewall-policy fwpolicy-example 490 ALLOW INGRESS 10.0.0.0/16 network-firewall-policy fwpolicy-example 2147483645 GOTO_NEXT INGRESS ::/0 network-firewall-policy fwpolicy-example 2147483647 GOTO_NEXT INGRESS 0.0.0.0/0 network-firewall-policy fwpolicy-example 2147483644 GOTO_NEXT EGRESS ::/0 network-firewall-policy fwpolicy-example 2147483646 GOTO_NEXT EGRESS 0.0.0.0/0
切換回 fwpolicy-vpc1-client SSH 工作階段分頁,然後嘗試 curl:
user@fwpolicy-vpc1-client$ curl fwpolicy-vpc1-www --connect-timeout 2
可以連線了嗎?
如要確認這一點,請更新規則,透過 Cloud Shell 移除來源 CIDR 條件。
gcloud compute network-firewall-policies rules update 500 \ --firewall-policy $prefix-example \ --src-ip-ranges "" \ --global-firewall-policy gcloud compute network-firewall-policies rules describe 500 \ --firewall-policy $prefix-example \ --global-firewall-policy action: allow description: allow-web direction: INGRESS disabled: false enableLogging: false kind: compute#firewallPolicyRule match: layer4Configs: - ipProtocol: tcp ports: - '80' - ipProtocol: tcp ports: - '443' srcSecureTags: - name: tagValues/479619031616 state: EFFECTIVE priority: 490 ruleTupleCount: 7 targetSecureTags: - name: tagValues/230424970229 state: EFFECTIVE
請切換回 fwpolicy-vpc1-client SSH 工作階段分頁,然後再試一次:
user@fwpolicy-vpc1-client$ curl fwpolicy-vpc1-www --connect-timeout 2
由於標記未新增至 fwpolicy-vpc1-client,因此連線應會逾時。請在 Cloud Shell 中新增,然後再試一次。
gcloud resource-manager tags bindings create \ --location $zone \ --tag-value $org_id/tags-vpc1/web-clients \ --parent \ //compute.googleapis.com/projects/$project_id/zones/$zone/instances/$prefix-vpc1-client
請切換回 fwpolicy-vpc1-client SSH 工作階段分頁,然後再試一次。現在應該可以成功執行。
user@fwpolicy-vpc1-client$ curl fwpolicy-vpc1-www --connect-timeout 2
7. 透過虛擬私有雲網路對等互連使用 IAM 控管標記
在 Cloud Shell 中建立新的虛擬私有雲、子網路和用戶端,並設定網路之間的虛擬私有雲網路對等互連:
gcloud compute networks create $prefix-vpc2 --subnet-mode=custom gcloud compute networks subnets create $prefix-vpc2-subnet \ --range=10.0.1.0/24 --network=$prefix-vpc2 --region=$region gcloud compute instances create $prefix-vpc2-client \ --subnet=$prefix-vpc2-subnet --no-address --zone $zone gcloud compute networks peerings create vpc1-to-vpc2 \ --network=$prefix-vpc1 \ --peer-project $project_id \ --peer-network $prefix-vpc2 gcloud compute networks peerings create vpc2-to-vpc1 \ --network=$prefix-vpc2 \ --peer-project $project_id \ --peer-network $prefix-vpc1
建立防火牆規則,允許從 IAP 範圍輸入 SSH 流量,以免尚未在 IAP 設定過程中定義流量:
gcloud compute firewall-rules create allow-ssh-ingress-from-iap-vpc2 \ --direction=INGRESS \ --action=allow \ --network=$prefix-vpc2 \ --rules=tcp:22 \ --source-ranges=35.235.240.0/20
雖然標記是整個機構的物件,但標記金鑰已連結至特定虛擬私有雲,因此無法套用至不同網路中的執行個體。因此,您必須建立適用於 vpc2 的新標記鍵和值:
gcloud resource-manager tags keys create tags-vpc2 \ --parent organizations/$org_id \ --purpose GCE_FIREWALL \ --purpose-data network=$project_id/$prefix-vpc2 gcloud resource-manager tags values create web-clients \ --parent=$org_id/tags-vpc2
將新標記套用至 fwpolicy-vpc2-client 執行個體:
gcloud resource-manager tags bindings create \ --location $zone \ --tag-value $org_id/tags-vpc2/web-clients \ --parent \ //compute.googleapis.com/projects/$project_id/zones/$zone/instances/$prefix-vpc2-client
(選用) 列出 fwpolicy-vpc2-client 的繫結:
gcloud resource-manager tags bindings list --location $zone --effective --parent //compute.googleapis.com/projects/$project_id/zones/$zone/instances/$prefix-vpc2-client
預期輸出內容:
namespacedTagKey: ORGANIZATION_ID/tags-vpc2 namespacedTagValue: ORGANIZATION_ID/tags-vpc2/web-clients tagKey: tagKeys/916316350251 tagValue: tagValues/633150043992
在 Cloud Shell 中說明現有的網路防火牆政策規則,確認新標記目前並未使用:
gcloud compute network-firewall-policies rules describe 500 \ --firewall-policy $prefix-example \ --global-firewall-policy
預期輸出內容:
--- action: allow description: allow-web direction: INGRESS disabled: false enableLogging: true kind: compute#firewallPolicyRule match: layer4Configs: - ipProtocol: tcp ports: - '80' - ipProtocol: tcp ports: - '443' srcSecureTags: - name: tagValues/479619031616 state: EFFECTIVE priority: 500 ruleTupleCount: 6 targetSecureTags: - name: tagValues/230424970229 state: EFFECTIVE
更新現有的防火牆規則,允許對等互連虛擬私有雲網路中的標記:
gcloud compute network-firewall-policies rules update 500 \ --firewall-policy $prefix-example \ --src-secure-tags $org_id/tags-vpc1/web-clients,$org_id/tags-vpc2/web-clients \ --global-firewall-policy
說明防火牆規則,確認是否已成功套用,並回報為 EffectiveIVE (有效性):
gcloud compute network-firewall-policies rules describe 500 \ --firewall-policy $prefix-example \ --global-firewall-policy
預期輸出內容:
--- action: allow description: allow-web direction: INGRESS disabled: false enableLogging: false kind: compute#firewallPolicyRule match: layer4Configs: - ipProtocol: tcp ports: - '80' - ipProtocol: tcp ports: - '443' srcSecureTags: - name: tagValues/479619031616 state: EFFECTIVE - name: tagValues/633150043992 state: EFFECTIVE priority: 500 ruleTupleCount: 7 targetSecureTags: - name: tagValues/230424970229 state: EFFECTIVE
透過以下 gcloud 指令找出 fwpolicy-vpc1-www 的 IP:
gcloud compute instances list --filter=vpc1-www
透過 SSH 連線至 fwpolicy-vpc2-client,然後嘗試 curl fwpolicy-vpc1 的 IP:
user@fwpolicy-vpc2-client$ curl [fwpolicy-vpc1-www_IP] --connect-timeout 2
您應可連線至 fwpolicy-vpc1-www 伺服器。請前往下一節瞭解清除步驟。
8. 清除步驟
在 Cloud Shell 中,移除執行個體、Cloud NAT 和 Cloud Router:
gcloud -q compute instances delete $prefix-vpc2-client --zone=$zone gcloud -q compute instances delete $prefix-vpc1-client --zone=$zone gcloud -q compute instances delete $prefix-vpc1-www --zone=$zone gcloud -q compute routers nats delete $prefix-vpc1-cloudnat \ --router=$prefix-vpc1-cr --router-region=$region gcloud -q compute routers delete $prefix-vpc1-cr --region=$region
移除全域網路防火牆政策和標記:
gcloud -q resource-manager tags values delete \ $org_id/tags-vpc2/web-clients gcloud -q resource-manager tags keys delete $org_id/tags-vpc2 gcloud -q resource-manager tags values delete \ $org_id/tags-vpc1/web-servers gcloud -q resource-manager tags values delete \ $org_id/tags-vpc1/web-clients gcloud -q resource-manager tags keys delete $org_id/tags-vpc1 gcloud -q compute network-firewall-policies associations delete \ --firewall-policy $prefix-example \ --name $prefix-vpc1-association \ --global-firewall-policy gcloud -q compute network-firewall-policies delete \ $prefix-example --global gcloud -q compute firewall-rules delete allow-ssh-ingress-from-iap-vpc1 gcloud -q compute firewall-rules delete allow-ssh-ingress-from-iap-vpc2
如果 tagAdmin 和 tagUsers 角色有所變更,請執行下列步驟:
gcloud organizations remove-iam-policy-binding $org_id \ --member user:[email] --role roles/resourcemanager.tagAdmin gcloud organizations remove-iam-policy-binding $org_id \ --member user:[email] --role roles/resourcemanager.tagUser
最後,移除虛擬私有雲網路對等互連、子網路和虛擬私有雲網路:
gcloud -q compute networks peerings delete vpc1-to-vpc2 \ --network $prefix-vpc1 gcloud -q compute networks peerings delete vpc2-to-vpc1 \ --network $prefix-vpc2 gcloud -q compute networks subnets delete $prefix-vpc1-subnet \ --region $region gcloud -q compute networks subnets delete $prefix-vpc2-subnet \ --region $region gcloud -q compute networks delete $prefix-vpc1 gcloud -q compute networks delete $prefix-vpc2
9. 恭喜!
恭喜!您已成功使用標記設定,成功設定並驗證全域網路防火牆政策。