排解 gcloud beta terraform vet 問題

為什麼我預期的違規行為不會擲回錯誤?

如果您測試驗證邏輯,發現限制條件在應擲回錯誤時未擲回錯誤,這可能是下列一或多項原因造成的結果:

  • 政策程式庫是否設定正確?請確認政策程式庫包含 policies/constraints 目錄,其中包含您預期會造成違規的限制條件。
  • 含有違規事項的 Terraform 資源是否為支援的資源?gcloud beta terraform vet 只能檢查其版本支援的資源是否違規。使用 --verbosity=debug 重新執行指令,然後尋找類似 unsupported resource: google_resource_name 的訊息。或者,您也可以查看支援的資源清單,確認您的資源是否在其中。
  • 限制條件是否指定正確的 Terraform 資源?

    1. 檢查限制條件的 kind 欄位。應該會像這樣:GCPAppengineLocationConstraintV1
    2. 搜尋 policies/templates 目錄,找出 spec.crd.spec.names.kind 的值相同的政策
    3. rego 欄位中,尋找類似 asset.asset_type == "appengine.googleapis.com/Application" 的內容。這是限制目標的 CAI 資產類型
    4. 請確認 CAI 資產類型位於支援的資源清單中。

為什麼我會收到「沒有定義專案」錯誤訊息?

資源階層可用於建立準確的 CAI 資產名稱。如果 gcloud beta terraform vet 無法自動判斷 CAI 資產的祖系,則會傳回錯誤訊息:project: required field is not set。您可以使用 --project 標記提供預設專案,也可以使用 gcloud config 設定預設專案。

為什麼我會收到 getting resource ancestry for project PROJECT_ID: googleapi: Error 403: The caller does not have permission, forbidden 錯誤訊息?

使用 --verbosity=debug 執行指令,然後查看 Terraform is using this identity: 這類訊息。後面應接著電子郵件地址,這是用於 API 要求的帳戶。