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, ciò potrebbe essere dovuto a uno o più dei seguenti motivi:
- La libreria delle norme è configurata correttamente? Verifica che la tua libreria di norme
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 le violazioni solo per le risorse supportate nella sua versione. Esegui di nuovo il comando con--verbosity=debug
e cerca un messaggio simile a:unsupported resource: google_resource_name
. In alternativa, puoi controllare se la risorsa è presente nell'elenco delle risorse supportate. Il vincolo ha come target la risorsa Terraform corretta?
- Controlla il campo
kind
del vincolo. Dovrebbe essere simile a questo:GCPAppengineLocationConstraintV1
- Cerca nella directory
policies/templates
un criterio che abbia lo stesso valore perspec.crd.spec.names.kind
- Nel campo
rego
, cerca qualcosa di simile a:asset.asset_type == "appengine.googleapis.com/Application"
. Questo è il tipo di asset CAI a cui è destinato il vincolo. - Assicurati che il tipo di asset CAI sia presente nell'elenco delle risorse supportate.
- Controlla il campo
Perché ricevo un errore che indica che non è stato definito alcun progetto?
La gerarchia delle risorse viene utilizzata per creare un nome asset CAI accurato. Se
gcloud beta terraform vet
non riesce a determinare automaticamente la discendenza di un asset CAI,
restituisce un errore che indica: project: required field is not set
. Puoi
fornire un progetto predefinito con il flag --project
o impostarne uno utilizzando
gcloud config
.
Perché ricevo l'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 è presente un indirizzo email, ma non è il account di servizio che volevi rappresentare, allora assicurati che la rappresentazione deaccount di serviziont sia configurata correttamente.
- Se viene visualizzato l'indirizzo email corretto, assicurati che disponga delle seguenti
autorizzazioni per il progetto:
getIamPolicy
resourcemanager.projects.get