想定した違反でエラーがスローされないのはなぜですか?
検証ロジックをテストして、制約でエラーがスローされていないことがわかった場合は、次のいずれかが原因となっている可能性があります。
- ポリシー ライブラリは正しく設定されていますか?ポリシー ライブラリに
policies/constraints
ディレクトリが含まれていることを確認します。このディレクトリには、違反を引き起こすことが想定される制約が含まれています。 - 違反を含んでいる Terraform リソースは、サポート対象のリソースですか?
gcloud beta terraform vet
は、そのバージョンでサポートされているリソースの違反のみをチェックできます。--verbosity=debug
を付けてコマンドを再実行し、「unsupported resource: google_resource_name
」のようなメッセージを探します。または、サポートされているリソースの一覧にリソースが記載されているかどうかを確認します。 制約で正しい Terraform リソースが対象になっていますか?
- 制約の
kind
フィールドを確認します。GCPAppengineLocationConstraintV1
のような形です。 policies/templates
ディレクトリで、spec.crd.spec.names.kind
と同じ値を持つポリシーを検索します。rego
フィールドで、「asset.asset_type == "appengine.googleapis.com/Application"
」のような記述を探します。これは、制約の対象となる CAI アセットタイプです。- その 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 リクエストに使用しているアカウントです。
- メールアドレスが表示されない場合は、認証が正しく機能していることを確認してください。
- メールアドレスが表示されるものの、それが権限借用のためのサービス アカウントでない場合は、サービス アカウントの権限借用が正しく設定されていることを確認してください。
- 正しいメールアドレスが表示されている場合は、該当のプロジェクトに関する次の権限が付与されていることを確認してください。
getIamPolicy
resourcemanager.projects.get