¿Por qué no se produce un error cuando se comete una infracción que esperaba?
Si pruebas tu lógica de validación y observas que la restricción no genera un error cuando debería hacerlo, puede deberse a uno o varios de los siguientes motivos:
- ¿Ha configurado correctamente la biblioteca de políticas? Verifica que tu biblioteca de políticas
contenga un directorio
policies/constraints
, que a su vez contenga la restricción que esperas que provoque una infracción. - ¿El recurso de Terraform que contiene la infracción es un recurso admitido?
gcloud beta terraform vet
solo puede comprobar si hay infracciones en los recursos que se admiten en su versión. Vuelve a ejecutar el comando con--verbosity=debug
y busca un mensaje comounsupported resource: google_resource_name
. También puedes comprobar si tu recurso está en la lista de recursos admitidos. ¿Tu restricción está orientada al recurso de Terraform correcto?
- Consulta el campo
kind
de la restricción. Debería ser algo parecido a esto:GCPAppengineLocationConstraintV1
- Busca en el directorio de
policies/templates
una política que tenga el mismo valor paraspec.crd.spec.names.kind
. - En el campo
rego
, busca algo parecido aasset.asset_type == "appengine.googleapis.com/Application"
. Este es el tipo de recurso de CAI al que se dirige la restricción. - Asegúrate de que el tipo de recurso de CAI esté en la lista de recursos admitidos.
- Consulta el campo
¿Por qué aparece un error que indica que no se ha definido ningún proyecto?
La ascendencia de los recursos se usa para crear un nombre de recurso de CAI preciso. Si gcloud beta terraform vet
no puede determinar automáticamente la ascendencia de un recurso de CAI, devolverá un error que dice: project: required field is not set
. Puedes proporcionar un proyecto predeterminado con la marca --project
o definir uno con gcloud config
.
¿Por qué me aparece el error getting resource ancestry for project PROJECT_ID: googleapi: Error 403: The caller does not have permission, forbidden
?
Ejecuta el comando con --verbosity=debug
y busca un mensaje como Terraform
is using this identity:
. Debe ir seguida de una dirección de correo electrónico, que es la cuenta que se usa para las solicitudes a la API.
- Si no hay ninguna dirección de correo, asegúrate de que la autenticación funciona correctamente.
- Si hay una dirección de correo electrónico, pero no es la cuenta de servicio que quieres suplantar, asegúrate de que la suplantación de identidad de la cuenta de servicio esté configurada correctamente.
- Si se muestra la dirección de correo correcta, asegúrate de que tenga los siguientes
permisos en el proyecto:
getIamPolicy
resourcemanager.projects.get