1. 簡介
您可以透過 Google Cloud Armor Edge 安全性政策,限制 Google Cloud CDN 和 Google Cloud Storage 中快取物件的存取權。造成這種情況的例子包括:確保使用者不會從限制的地理位置存取儲存值區中的物件,或確保你的媒體發布設定是篩選你有權進行存取的地理位置。
在這個研究室中,我們會建立 GCS 值區、上傳映像檔並繫結至負載平衡器,然後為值區啟用 Cloud CDN 和邊緣安全性政策。
課程內容
- 如何設定含有可快取內容的 Cloud Storage 值區
- 如何建立邊緣安全性政策來保護內容
- 如何驗證邊緣安全性政策是否正常運作
軟硬體需求
- 基本網路與 HTTP 知識
- 基本的 Unix/Linux 指令列知識
2. 設定和需求
自修環境設定
- 登入 Google Cloud 控制台,建立新專案或重複使用現有專案。如果您還沒有 Gmail 或 Google Workspace 帳戶,請先建立帳戶。
- 「專案名稱」是這項專案參與者的顯示名稱。這是 Google API 不使用的字元字串,您可以隨時更新。
- 所有 Google Cloud 專案的專案 ID 均不得重複,且設定後即無法變更。Cloud 控制台會自動產生一個不重複的字串。但通常是在乎它何在在大部分的程式碼研究室中,您必須參照專案 ID (通常稱為
PROJECT_ID
),因此如果您不喜歡的話,請隨機產生一個,或者,您也可以自行嘗試看看是否可用。是「凍結」建立專案後 - 還有第三個值,也就是部分 API 使用的專案編號。如要進一步瞭解這三個值,請參閱說明文件。
- 接下來,您需要在 Cloud 控制台中啟用計費功能,才能使用 Cloud 資源/API。執行這個程式碼研究室並不會產生任何費用,如果有的話。如要關閉資源,以免產生本教學課程結束後產生的費用,請按照任「清除所用資源」操作請參閱本程式碼研究室結尾處的操作說明。Google Cloud 的新使用者符合 $300 美元免費試用計畫的資格。
啟動 Cloud Shell
雖然 Google Cloud 可以從筆記型電腦遠端操作,但在本程式碼研究室中,您將使用 Google Cloud Shell,這是一種在 Cloud 中執行的指令列環境。
在 GCP 控制台的右上方,按一下「Cloud Shell」圖示:
佈建並連線至環境的作業只需幾分鐘的時間。完成後,您應該會看到類似下方的內容:
這部虛擬機器都裝載了您需要的所有開發工具。提供永久的 5 GB 主目錄,而且在 Google Cloud 中運作,大幅提高網路效能和驗證能力。這個研究室中的所有工作都可以透過瀏覽器完成。
事前準備
在 Cloud Shell 中,確認您已設定專案 ID
gcloud config list project gcloud config set project [YOUR-PROJECT-NAME] PROJECT_ID=[YOUR-PROJECT-NAME] echo $PROJECT_ID
啟用 API
啟用所有必要服務
gcloud services enable compute.googleapis.com gcloud services enable logging.googleapis.com gcloud services enable monitoring.googleapis.com
3. 建立 Cloud Storage 值區
前往 Cloud 控制台中的「導覽選單」>[Cloud Storage] >瀏覽器。按一下「建立值區」:
值區命名規則:
- 值區命名空間為全域通用並會公開顯示,因此請勿在值區名稱中加入機密資訊。
- 值區名稱只能使用小寫英文字母、數字、破折號 (-)、底線 (_) 與半形句號 (.)。如果名稱含有半形句號,則須通過驗證。
- 值區名稱的開頭與結尾都必須是數字或英文字母。
- 值區名稱必須包含 3 至 63 個字元。如果名稱中包含半形句號,則其長度上限為 222 個字元,但每個以半形句號分隔的組成部分不得超過 63 個字元。
- 值區名稱不得為採用小數點十進位表示法 (例如 192.168.5.4) 的 IP 位址。
- 值區名稱不得以「goog」前置字串為開頭。
- 值區名稱不得包含「google」這個字詞,或是近似「google」的錯別字詞。
- 另外,為符合 DNS 規範並維持日後的相容性,您不得在半形句號或破折號的前後使用底線 (_) 或半形句號。舉例來說,DNS 名稱中不得使用「..」、「-.」或「.-」。
點選「繼續」。
位置類型:區域
位置:選擇離您較遠的區域
點選「繼續」。
預設儲存空間級別:Standard
點選「繼續」。
取消勾選「禁止公開存取」底下的 「強制禁止公開存取這個值區」核取方塊。
在「存取權控管」下方選擇「精細」。
點選「繼續」。
設定值區後,請按一下「建立」:
大功告成,您剛剛建立了一個 Cloud Storage 值區!
4. 將物件上傳至值區
現在,將物件上傳至值區。
首先,請將這個映像檔下載至 Cloud Shell 的臨時執行個體。在下方範例中,我們使用 Google 首頁中的 Google 圖片。
透過 Cloud Shell
wget --output-document google.png https://www.google.com/images/branding/googlelogo/1x/googlelogo_color_272x92dp.png
使用 gsutil cp 指令從儲存位置將圖片上傳至您建立的值區:
透過 Cloud Shell
gsutil cp google.png gs://YOUR-BUCKET-NAME
現在請將下載的圖片移除:
透過 Cloud Shell
rm google.png
找到您的物件,點選右側的三點圖示,然後編輯設為公開的權限。
5. 建立負載平衡器
接下來,我們要建立 HTTP 負載平衡器。
前往「網路」>「>」網路服務 >>負載平衡 >>建立負載平衡器 >>HTTP 負載平衡器 >>網際網路到我的 VM >>傳統版 HTTP(S) 負載平衡器
首先,為您即將建立的負載平衡器命名。
建立後端 Bucket
在剛建立的值區建立新的後端值區,然後選取「已啟用 CDN」和「快取靜態內容」。按一下「建立」。
建立主機與路徑規則
按一下左側的「主機與路徑規則」。我們會使用簡單的主機/路徑規則,並將任何要求傳送至值區。
建立前端設定
選取前端設定。針對前端設定,我們會使用 HTTP (如果您有憑證,則使用 HTTPS 也會正常運作) 和臨時 IP 位址,並確保您已選取進階級網路。
點選 [建立]
取得負載平衡器 IP
在專案的負載平衡器清單中按一下負載平衡器名稱,透過控制台取得負載平衡器 IP。
查詢負載平衡器
過幾分鐘後,嘗試查詢您上傳物件的負載平衡器。您會需要負載平衡器 IP 位址和映像檔的名稱。指令的結構如下:
從航廈出發
curl -svo /dev/null http://LOAD_BALANCER_IP/google.png
輸出
armanrye-macbookpro% curl -svo /dev/null http://34.98.81.123/google.png * Trying 34.98.81.123... * TCP_NODELAY set * Connected to 34.98.81.123 (34.98.81.123) port 80 (#0) > GET /google.png HTTP/1.1 > Host: YOUR_IP > User-Agent: curl/7.64.1 > Accept: */* > < HTTP/1.1 200 OK < X-GUploader-UploadID: ADPycdtoILI76KVsvBvdVGvSfzaxys1m3zYqCepBrmJxAI48ni24cWCRIdNu-53PX3DS6iycxp6xwFbMpwtcHHZQUQmEBxAgng < Expires: Mon, 13 Dec 2021 22:58:26 GMT < Date: Mon, 13 Dec 2021 21:58:26 GMT < Cache-Control: public, max-age=3600 < Last-Modified: Mon, 13 Dec 2021 21:45:57 GMT < ETag: "8f9327db2597fa57d2f42b4a6c5a9855" < x-goog-generation: 1639431957957903 < x-goog-metageneration: 2 < x-goog-stored-content-encoding: identity < x-goog-stored-content-length: 5969 < Content-Type: image/png < x-goog-hash: crc32c=TeiHTA== < x-goog-hash: md5=j5Mn2yWX+lfS9CtKbFqYVQ== < x-goog-storage-class: STANDARD < Accept-Ranges: bytes < Content-Length: 5969 < Server: UploadServer
驗證您的內容是否透過 CDN 或負載平衡監控功能從 CDN 提供。您應該要接近 100% 的命中率。如要執行幾項查詢
從航廈出發
#for i in `seq 1 50`; do curl http://%loadbalncer-IP%/google.png; done
確認 Cloud CDN 提供的內容
請前往網路服務>>,驗證您是否透過 CDN 提供流量CDN
6. 從 GCS 刪除物件
系統已填入快取資料後,就可以從值區中刪除物件,強制將政策套用至快取,而非後端。
前往「Cloud Storage」>「>」%bucket name% >>物品
選取並刪除圖片。
7. 為 CDN 快取建立邊緣安全性政策
瀏覽至 [網路安全性] >>。Cloud Armor,然後點選「建立政策」
選取下列項目
政策類型:邊緣安全性政策
預設動作:拒絕
將政策套用至後端值區。
8. 驗證邊緣安全性政策
現在,我們在後端值區的前面建立了 Edge Security Policy,因此可以驗證其是否如預期運作。
查看安全性政策
等待幾分鐘後,您就能檢查 Cloud Armor 政策是否正在執行。請在指令列執行下列指令,即可獲得 403
從航廈出發
curl -svo /dev/null http://LOAD_BALANCER_IP/google.png
輸出
curl -svo /dev/null http://34.98.81.123/google.png * Trying 34.98.81.123... * TCP_NODELAY set * Connected to 34.98.81.123 (34.98.81.123) port 80 (#0) > GET /google.png HTTP/1.1 > Host: YOUR_IP > User-Agent: curl/7.64.1 > Accept: */* > < HTTP/1.1 403 Forbidden < X-GUploader-UploadID: ADPycdtS6FtJOGIsiWYDrAAE8VFeQuNutcvbGoQe2t8EZxsuspVtmCjyiTv_P3CNktroHMOGFXkTCfG-Jj-rUO60ZGPpEbpqcw < Content-Type: application/xml; charset=UTF-8 < Content-Length: 111 < Date: Mon, 13 Dec 2021 23:09:35 GMT < Expires: Mon, 13 Dec 2021 23:09:35 GMT < Cache-Control: private, max-age=0 < Server: UploadServer <
調查記錄檔
接下來,您可以查看記錄,查看強制執行的邊緣安全性政策。前往「作業 >>」記錄 >>記錄檔探索工具
將下列程式碼片段輸入查詢,然後按一下「執行」
resource.type:(http_load_balancer) AND jsonPayload.enforcedEdgeSecurityPolicy.name:(%SECURITY_POLICY_NAME%)
記下 403 回應和強制執行的安全性政策
移除安全性政策
請移除安全性政策並從快取查詢物件。
瀏覽至 [網路安全性] >>。Cloud Armor >>%POLICY NAME% >>目標,並移除目標值區。
確認已移除政策
幾分鐘後,再傳送另一個 curl 給儲存空間值區中的資源。這次您會收到 200 的回覆。
從航廈出發
curl -svo /dev/null http://LOAD_BALANCER_IP/google.png
輸出
armanrye-macbookpro% curl -svo /dev/null http://34.98.81.123/google.png * Trying 34.98.81.123... * TCP_NODELAY set * Connected to 34.98.81.123 (34.98.81.123) port 80 (#0) > GET /google.png HTTP/1.1 > Host: YOUR_IP > User-Agent: curl/7.64.1 > Accept: */* > < HTTP/1.1 200 OK < X-GUploader-UploadID: ADPycdtI7f49P3MSuZSZ8vl6RwfwmnIDJ59EeSKp7UPvLPawdaiRHXiNWLtseQTxUxceWOvSLvpYmT3pWVkV4qeIP7M < Date: Mon, 13 Dec 2021 23:06:46 GMT < Last-Modified: Mon, 13 Dec 2021 21:45:57 GMT < ETag: "8f9327db2597fa57d2f42b4a6c5a9855" < x-goog-generation: 1639431957957903 < x-goog-metageneration: 2 < x-goog-stored-content-encoding: identity < x-goog-stored-content-length: 5969 < Content-Type: image/png < x-goog-hash: crc32c=TeiHTA== < x-goog-hash: md5=j5Mn2yWX+lfS9CtKbFqYVQ== < x-goog-storage-class: STANDARD < Accept-Ranges: bytes < Content-Length: 5969 < Server: UploadServer < Age: 1621 < Cache-Control: public,max-age=3600 < { [775 bytes data] * Connection #0 to host 34.98.81.123 left intact * Closing connection 0
恭喜!您已完成 Cloud Armor Edge 安全性政策的研究室。
©2020 Google LLC 保留所有權利。Google 和 Google 標誌是 Google LLC 的商標,其他公司和產品名稱則有可能是其關聯公司的商標。
9. 清理研究室
瀏覽至 [網路安全性] >>。Cloud Armor >>%POLICY NAME%,然後選取「刪除」
前往「Cloud Storage」選取您建立的值區,然後按一下「刪除」
前往「網路」>「>」網路服務 >>負載平衡選取您建立的負載平衡器,然後按一下「刪除」。
10. 恭喜!
您已完成「使用 Cloud Armor 防禦邊緣快取」程式碼研究室!
涵蓋內容
- 如何設定 Cloud Storage 值區和相關聯的 Cloud 負載平衡器
- 如何建立 Cloud Armor Edge 安全性政策
- 如何驗證邊緣安全性政策是否正常運作。
後續步驟
- 嘗試設定邊緣安全性政策,並讓 Compute Engine 資源的快取命中。