GSP1021
總覽
本實驗室將帶您瞭解 gcloud beta terraform vet 指令 (後文簡稱為「驗證」)。「驗證」可納入基礎架構 CI/CD 管道,用來確保符合政策要求。您可以透過這項工具偵測違反政策的情況,並在部署項目進入正式環境前發出警告或停止部署。
您將在本實驗室的引導下,逐步套用規範網域的限制,然後測試該限制並刻意觸發錯誤,最後再修改其中的條件,讓網域通過驗證。
目標
本實驗室的學習內容如下:
- 套用規範網域的限制
- 測試限制,刻意觸發驗證錯誤
- 修改限制,讓網域通過驗證
先備知識
如要完成本實驗室,您應具備 Terraform 使用經驗。您可以參加「在 Google Cloud 使用 Terraform 建構基礎架構」課程,透過更多實作練習熟悉 Terraform。
設定和需求
瞭解以下事項後,再點選「Start Lab」按鈕
請詳閱以下操作說明。實驗室活動會計時,且中途無法暫停。點選「Start Lab」後就會開始計時,顯示可使用 Google Cloud 資源的時間。
您將在真正的雲端環境完成實作實驗室活動,而不是模擬或示範環境。為此,我們會提供新的暫時憑證,供您在實驗室活動期間登入及存取 Google Cloud。
為了順利完成這個實驗室,請先確認:
- 可以使用標準的網際網路瀏覽器 (Chrome 瀏覽器為佳)。
注意事項:請使用無痕模式 (建議選項) 或私密瀏覽視窗執行此實驗室,這可以防止個人帳戶和學員帳戶之間的衝突,避免個人帳戶產生額外費用。
- 是時候完成實驗室活動了!別忘了,活動一旦開始將無法暫停。
注意事項:務必使用實驗室專用的學員帳戶。如果使用其他 Google Cloud 帳戶,可能會產生額外費用。
如何開始實驗室及登入 Google Cloud 控制台
-
按一下「Start Lab」按鈕。如果實驗室會產生費用,請在開啟的對話方塊中選取付款方式。右側的「Lab setup and access」面板會顯示下列項目:
- 「Open Google Cloud console」按鈕
- 此實驗室所需的臨時憑證 (使用者名稱和密碼)
- 完成此實驗室所需的其他資訊 (如有)
請注意,實驗室計時器位於頁面頂端附近,會顯示剩餘時間。
-
按一下「Open Google Cloud console」。如果使用 Chrome 瀏覽器,也可以按一下滑鼠右鍵,選取「在無痕視窗中開啟連結」。
接著,實驗室會啟動相關資源,並開啟另一個分頁,顯示「登入」頁面。
提示:您可以在不同的視窗並排開啟分頁。
注意:頁面顯示「選擇帳戶」對話方塊時,請點選「使用其他帳戶」。
-
如有必要,請將下方的 Username 貼到「登入」對話方塊。
{{{user_0.username | "Username"}}}
您也可以在「Lab setup and access」面板找到「Username」。
-
點選「下一步」。
-
複製下方的 Password,並貼到「歡迎使用」對話方塊。
{{{user_0.password | "Password"}}}
您也可以在「Lab setup and access」面板找到「Password」。
-
點選「下一步」。
重要事項:請務必使用實驗室提供的憑證,而非自己的 Google Cloud 帳戶憑證。
注意:如果使用自己的 Google Cloud 帳戶來進行這個實驗室,可能會產生額外費用。
-
繼續點按後續頁面:
- 接受條款及細則。
- 由於這是臨時帳戶,請勿新增救援選項或雙重驗證機制。
- 請勿申請免費試用。
Google Cloud 控制台稍後會在這個分頁開啟。
注意:如要使用 Google Cloud 產品和服務,請按一下「導覽選單」,或在「搜尋」欄位輸入服務或產品名稱。
啟動 Cloud Shell
Cloud Shell 是搭載多項開發工具的虛擬機器,提供永久的 5 GB 主目錄,而且在 Google Cloud 中運作。Cloud Shell 提供指令列存取權,方便您使用 Google Cloud 資源。
-
點按 Google Cloud 控制台頂端的「啟用 Cloud Shell」圖示
。
-
系統顯示視窗時,請按照下列步驟操作:
- 繼續操作 Cloud Shell 視窗。
- 授權 Cloud Shell 使用您的憑證發出 Google Cloud API 呼叫。
連線建立完成即代表已通過驗證,而且專案已設為您的 Project_ID:。輸出內容中有一行文字,宣告本工作階段的 Project_ID:
Your Cloud Platform project in this session is set to {{{project_0.project_id | "PROJECT_ID"}}}
gcloud 是 Google Cloud 的指令列工具,已預先安裝於 Cloud Shell,並支援 Tab 鍵自動完成功能。
- (選用) 您可以執行下列指令來列出使用中的帳戶:
gcloud auth list
- 點按「授權」。
輸出內容:
ACTIVE: *
ACCOUNT: {{{user_0.username | "ACCOUNT"}}}
To set the active account, run:
$ gcloud config set account `ACCOUNT`
- (選用) 您可以使用下列指令來列出專案 ID:
gcloud config list project
輸出內容:
[core]
project = {{{project_0.project_id | "PROJECT_ID"}}}
注意:如需 gcloud 的完整說明,請前往 Google Cloud 參閱 gcloud CLI 總覽指南。
工作 1:驗證限制
您將透過以下操作,瞭解限制的實作方式:複製現有限制、提供無法通過驗證的測試案例,然後修改限制,讓該案例通過驗證。
複製限制
- 開啟新的 Cloud Shell 視窗,然後執行以下指令來複製政策庫存放區。
git clone https://github.com/GoogleCloudPlatform/policy-library.git
- 在命令提示字元中輸入下列指令,複製範例 IAM 網域限制:
cd policy-library/
cp samples/iam_service_accounts_only.yaml policies/constraints
- 將剛才複製的限制輸出至終端機,以便查看內容。
cat policies/constraints/iam_service_accounts_only.yaml
輸出內容大致如下:
# This constraint checks that all IAM policy members are in the
# "gserviceaccount.com" domain.
apiVersion: constraints.gatekeeper.sh/v1alpha1
kind: GCPIAMAllowedPolicyMemberDomainsConstraintV2
metadata:
name: service_accounts_only
annotations:
description: Checks that members that have been granted IAM roles belong to allowlisted
domains.
spec:
severity: high
match:
target: # {"$ref":"#/definitions/io.k8s.cli.setters.target"}
- "organizations/**"
parameters:
domains:
- gserviceaccount.com
請注意底部醒目顯示的部分。這項設定指定 IAM 政策中只能加入 gserviceaccount.com 網域的成員。
測試限制
- 為確認政策是否正常運作,您將在目前的目錄中建立 Terraform 檔案。
touch main.tf
-
在 Cloud Shell 工具列,按一下「開啟編輯器」。如要在 Cloud Shell 與程式碼編輯器之間切換,請視需求點選「開啟編輯器」或「開啟終端機」。您也可以點選「在新視窗中開啟」,在另一個分頁中保持開啟編輯器。
-
開啟 policy-library/main.tf 檔案,並將以下程式碼複製到檔案中:
terraform {
required_providers {
google = {
source = "hashicorp/google"
version = "~> 3.84"
}
}
}
resource "google_project_iam_binding" "sample_iam_binding" {
project = "<YOUR PROJECT ID>"
role = "roles/viewer"
members = [
"user:<USER>"
]
}
-
將 <YOUR PROJECT ID> 改成 。
-
將 <USER> 改成 。
-
接著返回終端機,執行以下指令來初始化 Terraform:
terraform init
- 執行以下指令,匯出 Terraform 計畫。如果系統提示您授權,請點選「授權」。
terraform plan -out=test.tfplan
- 將 Terraform 計畫轉換為 JSON。
terraform show -json ./test.tfplan > ./tfplan.json
- 安裝 terraform-tools 元件。
sudo apt-get install google-cloud-sdk-terraform-tools
- 執行以下指令,確認 Terraform 計畫是否符合政策。
gcloud beta terraform vet tfplan.json --policy-library=.
注意:您可以忽略任何有關擷取專案 ID 的警告。
您在 IAM 政策繫結中提供的電子郵件地址不屬於服務帳戶,因此計畫違反您設定的限制。輸出內容應大致如下:
constraint: GCPIAMAllowedPolicyMemberDomainsConstraintV2.service_accounts_only
constraint_config:
api_version: constraints.gatekeeper.sh/v1alpha1
kind: GCPIAMAllowedPolicyMemberDomainsConstraintV2
metadata:
annotations:
description: Checks that members that have been granted IAM roles belong to
allowlisted domains.
validation.gcp.forsetisecurity.org/originalName: service_accounts_only
validation.gcp.forsetisecurity.org/yamlpath: policies/constraints/iam_service_accounts_only.yaml
name: service-accounts-only
spec:
match:
target:
- organizations/**
parameters:
domains:
- gserviceaccount.com
severity: high
message: 'IAM policy for //cloudresourcemanager.googleapis.com/projects/qwiklabs-gcp-02-ec89de7c9f9d
contains member from unexpected domain: user:student-02-0edcb8aed69f@qwiklabs.net'
metadata:
ancestry_path: organizations/616463121992/folders/365352270458/folders/474147567761/folders/125430737939/projects/qwiklabs-gcp-02-ec89de7c9f9d
constraint:
annotations:
description: Checks that members that have been granted IAM roles belong to
allowlisted domains.
validation.gcp.forsetisecurity.org/originalName: service_accounts_only
validation.gcp.forsetisecurity.org/yamlpath: policies/constraints/iam_service_accounts_only.yaml
labels: {}
parameters:
domains:
- gserviceaccount.com
details:
member: user:student-02-0edcb8aed69f@qwiklabs.net
resource: //cloudresourcemanager.googleapis.com/projects/qwiklabs-gcp-02-ec89de7c9f9d
resource: //cloudresourcemanager.googleapis.com/projects/qwiklabs-gcp-02-ec89de7c9f9d
severity: high
疑難排解:如果出現「Error 403: The caller does not have permission, forbidden」錯誤,表示您未替換 policy-library/main.tf 中的 project_id 引數值,或是您沒有指定專案的必要權限。
工作 2:修改限制
這項限制運作正常,但假設您想讓網域內的其他電子郵件地址也能加入 IAM 政策中,接下來就必須修改其中的條件。
-
在編輯器中,前往 policy-library/policies/constraints/iam_service_accounts_only.yaml 檔案。
-
在 domains 部分,將 qwiklabs.net 電子郵件網域加入許可清單中:
apiVersion: constraints.gatekeeper.sh/v1alpha1
kind: GCPIAMAllowedPolicyMemberDomainsConstraintV1
metadata:
name: service_accounts_only
spec:
severity: high
match:
target: ["organizations/**"]
parameters:
domains:
- gserviceaccount.com
- qwiklabs.net
- 返回 Cloud Shell 視窗,然後匯出新的 JSON Terraform 計畫。
terraform plan -out=test.tfplan
- 再次驗證 Terraform 計畫,這次應該不會發現任何違規情況。
gcloud beta terraform vet tfplan.json --policy-library=.
輸出內容:
Validating resources...done.
- 最後,套用 IAM 政策的 Terraform 計畫,將角色授予成員。
terraform apply test.tfplan
點選「Check my progress」,確認目標已達成。
修改限制
恭喜!
在本實驗室,您順利完成了以下操作:套用規範網域的限制,然後測試限制並觸發錯誤,最後再修改其中的條件,讓指定的網域能夠通過驗證。
後續行動/瞭解詳情
歡迎參考下列資源,進一步練習使用 Validator 和 Terraform:
Google Cloud 教育訓練與認證
協助您瞭解如何充分運用 Google Cloud 的技術。我們的課程會介紹專業技能和最佳做法,讓您可以快速掌握要領並持續進修。我們提供從基本到進階等級的訓練課程,並有隨選、線上和虛擬課程等選項,方便您抽空參加。認證可協助您驗證及證明自己在 Google Cloud 技術方面的技能和專業知識。
使用手冊上次更新日期:2024 年 11 月 29 日
實驗室上次測試日期:2024 年 11 月 29 日
Copyright 2026 Google LLC 保留所有權利。Google 和 Google 標誌是 Google LLC 的商標,其他公司和產品名稱則有可能是其關聯公司的商標。