Cloud Armor NamedIP 清單

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 的流量。

27243e72ee25ee16.png

Google Cloud Armor 已命名 IP 位址

3. 使用預先設定的規則簡化設定和管理作業

CDN 供應商通常會使用許多 CDN 使用者需要使用的知名 IP 位址。這些清單會隨時間變更,因為供應商會新增、移除及更新 IP 位址。

在安全性政策規則中使用已命名的 IP 位址清單,可簡化 IP 位址的設定和管理程序,因為 Google Cloud Armor 會每天自動從 CDN 供應商同步處理資訊。這樣一來,您就不必手動維護龐大的 IP 位址清單,省時省力又不易出錯。

IP 位址清單供應商

下表列出的 IP 位址清單供應商,均支援 Google Cloud Armor。這些是與 Google 合作的 CDN 供應商。IP 位址清單會透過個別公開網址發布。

這些合作夥伴會分別提供 IPv4 位址和 IPv6 位址清單。Google Cloud Armor 會使用提供的網址擷取清單,然後將清單轉換為已命名的 IP 位址清單。您可透過表格中的名稱參照清單。

7e9c09a008e04656.png

或者,您也可以使用 Cloud Shell 取得預先設定的已命名 IP 位址清單

登入 Cloud Shell 並設定專案 ID

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. 程式碼研究室拓撲

68a800f9adbf4570.png

5. 設定和需求

自修實驗室環境設定

  1. 登入 Cloud 控制台,建立新專案或重複使用現有專案。(如果沒有 Gmail 或 Google Workspace 帳戶,請先建立帳戶)。

96a9c957bc475304.png

b9a10ebdf5b5a448.png

a1e3c01a38fa61c2.png

請記住專案 ID,這是所有 Google Cloud 專案中不重複的名稱 (上述名稱已遭占用,因此不適用於您,抱歉!)。本程式碼研究室稍後會將其稱為 PROJECT_ID

  1. 接著,您必須在 Cloud 控制台中啟用帳單,才能使用 Google Cloud 資源。

完成本程式碼研究室的費用應該不高,甚至完全免費。請務必按照「清除」部分的指示操作,瞭解如何停用資源,避免在本教學課程結束後繼續產生帳單費用。Google Cloud 新使用者可參加價值$300 美元的免費試用計畫。

啟動 Cloud Shell

雖然可以透過筆電遠端操作 Google Cloud,但在本程式碼研究室中,您將使用 Google Cloud Shell,這是可在雲端執行的指令列環境。

在 GCP 主控台,按一下右上角工具列的 Cloud Shell 圖示:

bce75f34b2c53987.png

佈建並連線至環境的作業需要一些時間才能完成。完成後,您應該會看到如下的內容:

f6ef2b5f13479f3a.png

這部虛擬機器搭載各種您需要的開發工具,並提供永久的 5GB 主目錄,而且可在 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 網站。

  1. 一樣在 Compute Engine 頁面,點選左選單中的「VM 執行個體」
  2. 請留意開頭為 us-east1-mig 的執行個體。這些執行個體屬於代管執行個體群組。
  3. 點選 us-east1-mig 執行個體的「外部 IP」。畫面上會顯示「用戶端 IP」(您的 IP 位址)、「主機名稱」(開頭為 us-east1-mig)

設定 HTTP 負載平衡器

  1. 在 Cloud 控制台中,依序點選「導覽選單」圖示 ( mainmenu.png) >「網路服務」>「負載平衡」,然後點選「建立負載平衡器」。
  2. 在「HTTP(S) 負載平衡」下方,按一下「啟動設定」。

start_config.png

  1. 選取「From Internet to my VMs」(從網際網路到我的 VM),然後按一下「Continue」(繼續)。
  2. 將「Name」(名稱) 設為 http-lb。

設定後端

後端服務會將傳入流量導向至一或多個連接的後端。每個後端都含有執行個體群組,以及其他負載能力中繼資料。

  1. 按一下「後端設定」。
  2. 在「後端服務和後端 bucket」部分,依序點選「建立或選取後端服務和後端 bucket」、「後端服務」和「建立後端服務」。
  3. 後端類型為執行個體群組
  4. 設定下列值,其他值均保留預設值:18bf7a852f0759ee.png
  5. 按一下 [完成]。
  6. 在「健康狀態檢查」部分,選取「建立健康狀態檢查」。health_check.png
    1. 設定下列值,其他值均保留預設值:d2f85af1e988532b.png
  7. 按一下「儲存並繼續」。
  8. 按一下「建立」即可建立後端服務。

b00c217bf592f0.png

設定前端

主機與路徑規則會決定流量的導向方式。舉例來說,您可以將影片流量導向至其中一個後端,並將靜態內容流量導向至另一個後端。不過,您不會在本研究室中設定主機和路徑規則。

  1. 按一下「前端設定」。
  2. http-front-end
  3. 指定下列值,其他屬性均保留預設值 51ae16211e72142f.png
  4. 按一下 [完成]。

8. 檢查並建立 HTTP 負載平衡器

  1. 按一下「檢查並完成」。

8efe5b462a80071d.png

  1. 檢查後端服務和前端。

30b06910bf7fae29.png

  1. 按一下「建立」。
  2. 等待負載平衡器建立完成 (需要幾分鐘)
  3. 按一下負載平衡器的名稱 (http-lb)。
  4. 記下負載平衡器的 IPv4 位址,下一個工作中會用到,該位址稱為 http-lb。

9. 驗證是否成功防止未經授權的存取行為

實作具名 IP 位址政策前,請先驗證是否能成功未經授權存取實驗室負載平衡器和後續的 Web 應用程式。請注意,實作具名 IP 位址政策後,只有佈建的運算式集可以存取網頁應用程式。

  1. 找出上一步建立的負載平衡器 IP 位址 (http-lb),然後貼到網路瀏覽器中。輸出內容會與下方螢幕截圖類似。

注意:這個步驟需要幾分鐘的時間。網頁產生後,用戶端 IP 會來自 Google 前端,而非工作站 IP。

f93410e9568f1f32.png

在工作站上執行類似的驗證,如下所示

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 Armor 政策

透過 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 位址驗證

  1. 由於已實作安全政策,因此您無法從工作站存取負載平衡器。
  2. 如要驗證,請在工作站開啟終端機視窗,然後對負載平衡器 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 政策