排查 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 资产类型位于支持的资源列表中。

为什么我会收到一条指出未定义项目的错误,?

Resource Ancestry 用于构建准确的 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 请求的账号。