Perché una violazione che mi aspettavo non genera un errore?
Se testi la logica di convalida e scopri che il vincolo non genera un errore quando dovrebbe, la causa potrebbe essere una o più delle seguenti situazioni:
- La tua libreria di criteri è configurata correttamente? Verifica che la libreria dei criteri contenga una directory
policies/constraints
, che contiene il vincolo che prevedi causi una violazione. - La risorsa Terraform che contiene la violazione è una risorsa supportata?
gcloud beta terraform vet
può verificare la presenza di violazioni solo per le risorse supportate nella sua versione. Esegui di nuovo il comando con--verbosity=debug
e cerca un messaggio come:unsupported resource: google_resource_name
. In alternativa, puoi verificare se la tua risorsa è nell'elenco delle risorse supportate. Il tuo vincolo ha come target la risorsa Terraform corretta?
- Controlla il campo
kind
del vincolo. Dovrebbe essere qualcosa del tipo:GCPAppengineLocationConstraintV1
- Cerca nella directory
policies/templates
un criterio che abbia lo stesso valore perspec.crd.spec.names.kind
- Nel campo
rego
, cerca qualcosa del tipo:asset.asset_type == "appengine.googleapis.com/Application"
. Questo è il tipo di asset CAI che il vincolo ha come target. - Assicurati che il tipo di asset CAI sia nell'elenco delle risorse supportate.
- Controlla il campo
Perché viene visualizzato un errore che mi informa che non è stato definito alcun progetto?
L'origine delle risorse viene utilizzata per creare un nome preciso dell'asset CAI. Se gcloud beta terraform vet
non riesce a determinare automaticamente la discendenza di un asset CAI, restituirà un errore che dice: project: required field is not set
. Puoi fornire un progetto predefinito con il flag --project
o impostandone uno utilizzando gcloud config
.
Perché viene visualizzato il messaggio di errore getting resource ancestry for project PROJECT_ID: googleapi: Error 403: The caller does not have permission, forbidden
?
Esegui il comando con --verbosity=debug
e cerca un messaggio come Terraform
is using this identity:
. Deve essere seguito da un indirizzo email, ovvero
l'account utilizzato per le richieste API.
- Se non è presente alcun indirizzo email, assicurati che l'autenticazione funzioni correttamente.
- Se esiste un indirizzo email, ma non si tratta dell'account di servizio che volevi impersonare, assicurati che il furto d'identità del tuo account di servizio sia configurato correttamente.
- Se viene visualizzato l'indirizzo email corretto, assicurati che disponga delle seguenti
autorizzazioni per il progetto:
getIamPolicy
resourcemanager.projects.get