1. 簡介
有了 Google Cloud Armor 已命名的 IP 位址清單,您就能參照由第三方服務供應商維護的 IP 位址和 IP 範圍清單。您可以在安全性政策中設定已命名的 IP 位址清單。您不必個別手動指定每個 IP 位址或 IP 範圍。
課程內容
- Cloud Armor 已命名 IP 位址清單的優點
- 建立 Cloud Armor 安全性政策
- 部署 Cloud Armor 已命名 IP 位址清單
- 建立全域負載平衡器
- 使用範例測試應用程式建立代管執行個體群組
軟硬體需求
- 具備安全性政策和負載平衡器的經驗
2. 只允許來自合格第三方供應商的流量
一般使用案例是建立許可清單,並將許可第三方合作夥伴的 IP 位址加入許可清單,確保只有來自這個合作夥伴的流量才能存取負載平衡器和後端。
例如,CDN 供應商需要定期從來源伺服器提取內容,才能分配給其自己的快取。與 Google 合作提供 CDN 供應商和 Google 網路邊緣之間的直接連線。Google Cloud 的 CDN 使用者可以在來源提取期間使用這個直接連線。在這種情況下,CDN 使用者可能會想要建立安全性政策,只允許來自該特定 CDN 供應商的流量。
在本例中,某 CDN 供應商發布了其 IP 位址清單 23.235.32.0/20、43.249.72.0/22、⋯。CDN 使用者設定的安全性規則僅允許來自這些 IP 位址的流量。因此,系統允許兩個 CDN 供應商存取點 (23.235.32.10 和 43.249.72.10),並允許其流量。來自未授權存取點 198.51.100.1 的流量遭到封鎖。
Google Cloud Armor 已命名 IP 位址
3. 使用預先設定的規則,簡化設定與管理作業
CDN 供應商通常會使用眾所周知的 IP 位址,以及許多 CDN 使用者需要使用的 IP 位址。隨著供應商新增、移除及更新 IP 位址,這些清單也會隨著時間而改變。
在安全性政策規則中使用已命名的 IP 位址清單,可簡化 IP 位址的設定和管理流程,因為 Google Cloud Armor 每天都會自動同步處理 CDN 供應商提供的資訊。這樣就不必手動維護大量 IP 位址清單,過程既耗時又容易出錯。
IP 位址清單提供者
Google Cloud Armor 支援下表中的 IP 位址清單提供者。這些是與 Google 合作的 CDN 供應商。他們的 IP 位址清單是透過個別公開網址發布。
這些合作夥伴提供個別的 IPv4 位址和 IPv6 位址清單。Google Cloud Armor 會使用您提供的網址擷取清單,然後將清單轉換成已命名的 IP 位址清單。您可以透過表格中的名稱參照這些清單。
您也可以使用 Cloud Shell 取得預先設定的已命名 IP 位址清單清單
登入 Cloud Shell 並設定 projectid
gcloud config list project gcloud config set project [YOUR-PROJECT-ID] Perform setting your projectID: projectid=YOUR-PROJECT-ID echo $projectid
來自 Cloud Shell
gcloud compute security-policies list-preconfigured-expression-sets \ --filter="id:sourceiplist"
這會傳回:
EXPRESSION_SET sourceiplist-fastly sourceiplist-cloudflare sourceiplist-imperva
4. 程式碼研究室拓撲
5. 設定和需求
自修環境設定
提醒您,專案 ID 是所有 Google Cloud 專案的專屬名稱 (已經有人使用上述名稱,很抱歉對您不符!)。稍後在本程式碼研究室中會稱為 PROJECT_ID
。
- 接下來,您需要在 Cloud 控制台中啟用計費功能,才能使用 Google Cloud 資源。
執行這個程式碼研究室並不會產生任何費用,如果有的話。請務必依照「清除所用資源」一節指示本節將說明如何關閉資源,這樣您就不會產生本教學課程結束後產生的費用。Google Cloud 的新使用者符合 $300 美元免費試用計畫的資格。
啟動 Cloud Shell
雖然 Google Cloud 可以從筆記型電腦遠端操作,但在本程式碼研究室中,您將使用 Google Cloud Shell,這是一種在 Cloud 中執行的指令列環境。
在 GCP 控制台的右上方,按一下「Cloud Shell」圖示:
佈建並連線至環境的作業只需幾分鐘的時間。完成後,您應該會看到類似下方的內容:
這部虛擬機器都裝載了您需要的所有開發工具。提供永久的 5 GB 主目錄,而且在 Google Cloud 中運作,大幅提高網路效能和驗證能力。這個研究室中的所有工作都可以透過瀏覽器完成。
6. 建立虛擬私有雲網路
虛擬私有雲網路
透過 Cloud Shell
gcloud compute networks create
named-list-vpc
--subnet-mode custom
建立子網路
透過 Cloud Shell
gcloud compute networks subnets create named-ip-subnet \ --network
named-list-vpc
--range 10.0.0.0/24 --region us-east1
建立防火牆規則
透過 Cloud Shell
gcloud compute --project=$projectid firewall-rules create default-allow-http --direction=INGRESS --priority=1000 --network=named-list-vpc --action=ALLOW --rules=tcp:80 --source-ranges=0.0.0.0/0
gcloud compute --project=$projectid firewall-rules create default-allow-health-check --direction=INGRESS --priority=1000 --network=named-list-vpc --action=ALLOW --rules=tcp --source-ranges=130.211.0.0/22,35.191.0.0/16
建立負載平衡器
建立執行個體範本
透過 Cloud Shell
gcloud beta compute --project=$projectid instance-templates create us-east1-template --machine-type=e2-medium --subnet=projects/$projectid/regions/us-east1/subnetworks/named-ip-subnet --network-tier=PREMIUM --metadata=startup-script-url=gs://cloud-training/gcpnet/httplb/startup.sh --maintenance-policy=MIGRATE --image=debian-10-buster-v20210217 --image-project=debian-cloud --boot-disk-size=10GB --boot-disk-type=pd-balanced --boot-disk-device-name=us-east1-template --no-shielded-secure-boot --no-shielded-vtpm --no-shielded-integrity-monitoring --reservation-affinity=any
建立代管執行個體群組
透過 Cloud Shell
gcloud compute --project=$projectid instance-groups managed create us-east1-mig --base-instance-name=us-east1-mig --template=us-east1-template --size=1 --zone=us-east1-b
7. 驗證後端
驗證在兩個區域中建立的 VM 執行個體,並且存取其 HTTP 網站。
- 在 Compute Engine 中,按一下左側選單的「VM 執行個體」
- 請注意,名稱開頭為 us-east1-mig 的執行個體,屬於代管執行個體群組的一部分。
- 點選 us-east1-mig 執行個體的外部 IP。畫面上應該會顯示用戶端 IP (您的 IP 位址)、主機名稱 (開頭為 us-east1-mig)
設定 HTTP 負載平衡器
- 在 Cloud 控制台中,按一下「導覽選單」圖示 >按一下「網路服務」>「然後點選「建立負載平衡器」
- 在「HTTP(S) Load Balancing」(HTTP(S) 負載平衡) 下方,按一下「Start configuration」(啟動設定)。
- 選取「從網際網路到我的 VM」,然後點選「繼續」。
- 將「Name」(名稱) 設為 http-lb。
設定後端
後端服務會將傳入流量導向至一或多個連接的後端。每個後端都含有執行個體群組,以及其他負載能力中繼資料。
- 按一下「後端設定」。
- 後端服務請點選「建立」或「選取後端服務」依序點選「後端服務」和「建立後端服務」
- 後端類型為「執行個體群組」
- 依據下方的值進行設定,其他設定均保留預設值:
- 按一下 [完成]。
- 在「健康狀態檢查」部分,選取「建立健康狀態檢查」。
- 依據下方的值進行設定,其他設定均保留預設值:
- 按一下「儲存並繼續」。
- 點選「建立」即可建立後端服務。
設定前端
主機與路徑規則會決定流量的導向方式。舉例來說,您可以將影片流量導向某個後端,然後把靜態流量導向另一個後端。不過,您不會在本研究室中設定主機和路徑規則。
- 按一下「前端」設定。
- http-front-end
- 指定以下屬性,其餘值均保留預設值
- 按一下 [完成]。
8. 查看並建立 HTTP 負載平衡器
- 按一下「檢查並完成」。
- 檢查後端服務和前端。
- 按一下「建立」
- 請等待幾分鐘,讓系統建立負載平衡器
- 按一下負載平衡器的名稱 (http-lb)。
- 記下負載平衡器的 IPv4 位址,用於下一項工作。這個位址稱為 http-lb。
9. 驗證未經授權的存取行為
實作「已命名 IP 位址」政策前,請先驗證是否成功存取研究室和後續網頁應用程式。請注意,實行已命名的 IP 位址政策後,只有佈建的運算式集才能存取網頁應用程式。
- 找出在上一步 (http-lb) 建立的負載平衡器 IP 位址,然後貼到網路瀏覽器中。輸出內容會與下方螢幕截圖類似。
注意:這個步驟需要幾分鐘才能完成,但網頁產生後,用戶端 IP 的是 Google Front End,而不是工作站 IP。
在您的工作站中執行類似的驗證,如下所示
bash-3.2$ curl <load-balancer-IP>
10. 輸出內容範例
bash-3.2$ curl <load-balancer-ip> <h1>HTTP Load Balancing Lab</h1><h2>Client IP</h2>Your IP address : 35.191.0.151<h2>Hostname</h2>Server Hostname: us-east1-mig-8nqq<h2>Server Location</h2>Region and Zone: us-east1-b
11. 設定已命名 IP 清單
針對已命名 IP 清單建立新的雲端自動化政策
透過 Cloud Shell
gcloud compute --project=$projectid security-policies create ca-policy
透過 Cloud Shell
gcloud compute --project=$projectid security-policies rules update 2147483647 --action=deny-403 --security-policy=ca-policy --description="Default rule, higher priority overrides it" --src-ip-ranges=\*
找出可用的 CDN 已命名 IP 清單位址。
透過 Cloud Shell
gcloud compute security-policies list-preconfigured-expression-sets \ --filter="id:sourceiplist"
這會傳回:
EXPRESSION_SET sourceiplist-fastly sourceiplist-cloudflare sourceiplist-imperva
在 Cloud Shell 中,根據您的 CDN 可用的運算式組合,設定已命名的 IP 位址清單
gcloud beta compute security-policies rules create 600 \ --security-policy ca-policy \ --expression "evaluatePreconfiguredExpr('expression_set')" \ --action "allow"
使用 cloudflare 的範例
gcloud beta compute security-policies rules create 600 \ --security-policy ca-policy \ --expression "evaluatePreconfiguredExpr('sourceiplist-cloudflare')" \ --action "allow"
12. 套用 CA 安全性政策
套用 CA 安全性政策,並等待幾分鐘讓全域政策生效
gcloud compute backend-services update http-backend --security-policy ca-policy --global
13. 已命名 IP 位址驗證
- 由於已實施安全性政策,因此未經授權的工作站存取負載平衡器時,便處於未授權狀態。
- 如要進行驗證,請從工作站開啟終端機視窗,然後對負載平衡器 IP 位址執行 curl 指令。curl 的輸出內容會產生「403」工作站目前未獲授權,因此發生禁止的錯誤。
從工作站操作
bash-3.2$ curl <load-balancer-IP> <!doctype html><meta charset="utf-8"><meta name=viewport content="width=device-width, initial-scale=1"><title>403</title>403 Forbidden
清除步驟
gcloud -q compute backend-services update http-backend --security-policy "" --global gcloud -q compute --project=$projectid security-policies delete ca-policy gcloud -q compute forwarding-rules delete http-front-end --global gcloud -q compute target-http-proxies delete http-lb-target-proxy gcloud -q compute url-maps delete http-lb gcloud -q compute backend-services delete http-backend --global gcloud -q compute health-checks delete http-health-check gcloud -q compute --project=$projectid instance-groups managed delete us-east1-mig --zone=us-east1-b gcloud -q beta compute --project=$projectid instance-templates delete us-east1-template gcloud -q compute --project=$projectid firewall-rules delete default-allow-http gcloud -q compute --project=$projectid firewall-rules delete default-allow-health-check gcloud -q compute networks subnets delete named-ip-subnet --region us-east1 gcloud -q compute networks delete named-list-vpc
14. 恭喜!
恭喜您完成本程式碼研究室。
涵蓋內容
- Cloud Armor 已命名 IP 位址清單的優點
- 建立全域負載平衡器
- 使用範例測試應用程式建立代管執行個體群組
- 建立 Cloud Armor 安全性政策
- 部署 Cloud Armor 已命名 IP 位址清單
- 驗證已命名的 IP Cloud Armor 政策