Modify the constraint

Check my progress

/ 100

This lab may incorporate AI tools to support your learning.

GSP1021

Google Cloud 自學實驗室

總覽

本實驗室將帶您瞭解 gcloud beta terraform vet 指令 (後文簡稱為「驗證」)。「驗證」可納入基礎架構 CI/CD 管道,用來確保符合政策要求。您可以透過這項工具偵測違反政策的情況,並在部署項目進入正式環境前發出警告或停止部署。

您將在本實驗室的引導下,逐步套用規範網域的限制,然後測試該限制並刻意觸發錯誤,最後再修改其中的條件,讓網域通過驗證。

目標

本實驗室的學習內容如下:

  • 套用規範網域的限制
  • 測試限制,刻意觸發驗證錯誤
  • 修改限制,讓網域通過驗證

先備知識

如要完成本實驗室,您應具備 Terraform 使用經驗。您可以參加「在 Google Cloud 使用 Terraform 建構基礎架構」課程,透過更多實作練習熟悉 Terraform。

設定和需求

瞭解以下事項後,再點選「Start Lab」按鈕

請詳閱以下操作說明。實驗室活動會計時,且中途無法暫停。點選「Start Lab」後就會開始計時,顯示可使用 Google Cloud 資源的時間。

您將在真正的雲端環境完成實作實驗室活動,而不是模擬或示範環境。為此,我們會提供新的暫時憑證,供您在實驗室活動期間登入及存取 Google Cloud。

為了順利完成這個實驗室,請先確認:

  • 可以使用標準的網際網路瀏覽器 (Chrome 瀏覽器為佳)。
注意事項:請使用無痕模式 (建議選項) 或私密瀏覽視窗執行此實驗室,這可以防止個人帳戶和學員帳戶之間的衝突,避免個人帳戶產生額外費用。
  • 是時候完成實驗室活動了!別忘了,活動一旦開始將無法暫停。
注意事項:務必使用實驗室專用的學員帳戶。如果使用其他 Google Cloud 帳戶,可能會產生額外費用。

如何開始實驗室及登入 Google Cloud 控制台

  1. 按一下「Start Lab」按鈕。如果實驗室會產生費用,請在開啟的對話方塊中選取付款方式。右側的「Lab setup and access」面板會顯示下列項目:

    • 「Open Google Cloud console」按鈕
    • 此實驗室所需的臨時憑證 (使用者名稱和密碼)
    • 完成此實驗室所需的其他資訊 (如有)

    請注意,實驗室計時器位於頁面頂端附近,會顯示剩餘時間。

  2. 按一下「Open Google Cloud console」。如果使用 Chrome 瀏覽器,也可以按一下滑鼠右鍵,選取「在無痕視窗中開啟連結」

    接著,實驗室會啟動相關資源,並開啟另一個分頁,顯示「登入」頁面。

    提示:您可以在不同的視窗並排開啟分頁。

    注意:頁面顯示「選擇帳戶」對話方塊時,請點選「使用其他帳戶」
  3. 如有必要,請將下方的 Username 貼到「登入」對話方塊。

    {{{user_0.username | "Username"}}}

    您也可以在「Lab setup and access」面板找到「Username」。

  4. 點選「下一步」

  5. 複製下方的 Password,並貼到「歡迎使用」對話方塊。

    {{{user_0.password | "Password"}}}

    您也可以在「Lab setup and access」面板找到「Password」。

  6. 點選「下一步」

    重要事項:請務必使用實驗室提供的憑證,而非自己的 Google Cloud 帳戶憑證。 注意:如果使用自己的 Google Cloud 帳戶來進行這個實驗室,可能會產生額外費用。
  7. 繼續點按後續頁面:

    • 接受條款及細則。
    • 由於這是臨時帳戶,請勿新增救援選項或雙重驗證機制。
    • 請勿申請免費試用。

Google Cloud 控制台稍後會在這個分頁開啟。

注意:如要使用 Google Cloud 產品和服務,請按一下「導覽選單」,或在「搜尋」欄位輸入服務或產品名稱。「導覽選單」圖示和搜尋欄位

啟動 Cloud Shell

Cloud Shell 是搭載多項開發工具的虛擬機器,提供永久的 5 GB 主目錄,而且在 Google Cloud 中運作。Cloud Shell 提供指令列存取權,方便您使用 Google Cloud 資源。

  1. 點按 Google Cloud 控制台頂端的「啟用 Cloud Shell」圖示 「啟動 Cloud Shell」圖示

  2. 系統顯示視窗時,請按照下列步驟操作:

    • 繼續操作 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 鍵自動完成功能。

  1. (選用) 您可以執行下列指令來列出使用中的帳戶:
gcloud auth list
  1. 點按「授權」

輸出內容:

ACTIVE: * ACCOUNT: {{{user_0.username | "ACCOUNT"}}} To set the active account, run: $ gcloud config set account `ACCOUNT`
  1. (選用) 您可以使用下列指令來列出專案 ID:
gcloud config list project

輸出內容:

[core] project = {{{project_0.project_id | "PROJECT_ID"}}} 注意:如需 gcloud 的完整說明,請前往 Google Cloud 參閱 gcloud CLI 總覽指南

工作 1:驗證限制

您將透過以下操作,瞭解限制的實作方式:複製現有限制、提供無法通過驗證的測試案例,然後修改限制,讓該案例通過驗證。

複製限制

  1. 開啟新的 Cloud Shell 視窗,然後執行以下指令來複製政策庫存放區。
git clone https://github.com/GoogleCloudPlatform/policy-library.git
  1. 在命令提示字元中輸入下列指令,複製範例 IAM 網域限制:
cd policy-library/ cp samples/iam_service_accounts_only.yaml policies/constraints
  1. 將剛才複製的限制輸出至終端機,以便查看內容。
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 網域的成員。

測試限制

  1. 為確認政策是否正常運作,您將在目前的目錄中建立 Terraform 檔案。
touch main.tf
  1. 在 Cloud Shell 工具列,按一下「開啟編輯器」。如要在 Cloud Shell 與程式碼編輯器之間切換,請視需求點選「開啟編輯器」或「開啟終端機」。您也可以點選「在新視窗中開啟」,在另一個分頁中保持開啟編輯器。

  2. 開啟 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>" ] }
  1. <YOUR PROJECT ID> 改成

  2. <USER> 改成

  3. 接著返回終端機,執行以下指令來初始化 Terraform:

terraform init
  1. 執行以下指令,匯出 Terraform 計畫。如果系統提示您授權,請點選「授權」
terraform plan -out=test.tfplan
  1. 將 Terraform 計畫轉換為 JSON。
terraform show -json ./test.tfplan > ./tfplan.json
  1. 安裝 terraform-tools 元件。
sudo apt-get install google-cloud-sdk-terraform-tools
  1. 執行以下指令,確認 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 政策中,接下來就必須修改其中的條件。

  1. 在編輯器中,前往 policy-library/policies/constraints/iam_service_accounts_only.yaml 檔案。

  2. 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
  1. 返回 Cloud Shell 視窗,然後匯出新的 JSON Terraform 計畫。
terraform plan -out=test.tfplan
  1. 再次驗證 Terraform 計畫,這次應該不會發現任何違規情況。
gcloud beta terraform vet tfplan.json --policy-library=.

輸出內容:

Validating resources...done.
  1. 最後,套用 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 的商標,其他公司和產品名稱則有可能是其關聯公司的商標。

Before you begin

  1. Labs create a Google Cloud project and resources for a fixed time
  2. Labs have a time limit and no pause feature. If you end the lab, you'll have to restart from the beginning.
  3. On the top left of your screen, click Start lab to begin

Use private browsing

  1. Copy the provided Username and Password for the lab
  2. Click Open console in private mode

Sign in to the Console

  1. Sign in using your lab credentials. Using other credentials might cause errors or incur charges.
  2. Accept the terms, and skip the recovery resource page
  3. Don't click End lab unless you've finished the lab or want to restart it, as it will clear your work and remove the project

This content is not currently available

We will notify you via email when it becomes available

Great!

We will contact you via email if it becomes available

One lab at a time

Confirm to end all existing labs and start this one

Use private browsing to run the lab

Using an Incognito or private browser window is the best way to run this lab. This prevents any conflicts between your personal account and the Student account, which may cause extra charges incurred to your personal account.