Resolver problemas do gcloud beta terraform vet

Por que uma violação que eu esperava não gerou um erro?

Se você testar sua lógica de validação e descobrir que a restrição não está gerando um erro quando deveria estar, talvez seja por um ou mais dos motivos abaixo:

  • Sua biblioteca de políticas está configurada corretamente? Verifique se a biblioteca de política contém um diretório policies/constraints, que contém a restrição que você espera que cause uma violação.
  • O recurso do Terraform que contém a violação é um recurso compatível? O gcloud beta terraform vet apenas verifica se há violações de recursos compatíveis com a versão. Execute o comando novamente com --verbosity=debug e procure por uma mensagem como esta: unsupported resource: google_resource_name. Você também pode verificar se o recurso está na lista de recursos compatíveis.
  • Sua restrição é voltada ao recurso correto do Terraform?

    1. Verifique o campo kind da restrição. Ele deve ser parecido com este: GCPAppengineLocationConstraintV1
    2. Pesquise no diretório policies/templates uma política que tenha o mesmo valor para spec.crd.spec.names.kind
    3. No campo rego, procure por um texto como este: asset.asset_type == "appengine.googleapis.com/Application". Esse é o Tipo de recurso do CAI que a restrição tem como destino.
    4. Verifique se o tipo de recurso do CAI está na lista de recursos compatíveis.

Por que estou recebendo um erro informando que nenhum projeto foi definido?

A ancestralidade de recursos é usada para criar um nome de recurso preciso do CAI. Se gcloud beta terraform vet não conseguir determinar automaticamente a ancestralidade de um recurso CAI, ele retornará o seguinte erro: project: required field is not set. É possível fornecer um projeto padrão com a sinalização --project ou definir um usando gcloud config.

Por que estou recebendo um erro dizendo getting resource ancestry for project PROJECT_ID: googleapi: Error 403: The caller does not have permission, forbidden?

Execute o comando com --verbosity=debug e procure uma mensagem como Terraform is using this identity:. Ela precisa ser seguida por um endereço de e-mail, que é a conta usada para solicitações de API.