Como configurar permissões da conta de serviço

Veja nesta página como a conta de serviço do Cloud Build funciona e como conceder acesso à conta de serviço a outros projetos.

O que é a conta de serviço do Cloud Build?

O Cloud Build executa suas versões usando uma conta de serviço, uma conta do Google especial que executa versões em seu nome. O e-mail da conta de serviço do Cloud Build é [PROJECT_NUMBER]@cloudbuild.gserviceaccount.com.

É possível ver as contas de serviço do seu projeto por meio do menu "IAM" do Console do Cloud.

Quando você ativa a API Cloud Build, a conta de serviço é criada automaticamente e recebe o papel Cloud Build Service Account para o projeto. Esse papel é suficiente para várias tarefas, incluindo:

  • solicitar código do Cloud Source Repository do seu projeto;
  • fazer o download de arquivos de qualquer bucket do Cloud Storage pertencente ao seu projeto;
  • salvar registros da versão no Cloud Logging;
  • enviar as imagens do Docker para o Container Registry;
  • extrair imagens básicas do Container Registry.

A conta de serviço realiza essas ações somente quando necessário para executar sua versão. Por exemplo, a conta de serviço não procura o código no seu Cloud Source Registry, a menos que você o oriente a fazer isso.

Como conceder acesso adicional

As permissões padrão da conta de serviço não permitem que a conta execute determinadas ações, como implantação no App Engine ou no Cloud Functions, gerenciamento de recursos do Compute Engine e do Google Kubernetes Engine ou acesso a um bucket do Cloud Storage.

Ative sua conta de serviço para executar essas ações concedendo outros papéis do IAM à conta.

Para conceder um papel do IAM a uma conta de serviço do Cloud Build, siga estas etapas:

  1. Abra a página "Configurações" do Cloud Build:

    Abrir a página "Configurações do Cloud Build"

    Você verá a página Permissões da conta de serviço:

    Captura de tela da página

  2. Defina o status do papel que você quer adicionar como Ativar.

Extrair imagens particulares de outros projetos do Google Cloud

Conceda permissões para extrair imagens privadas de outro projeto do Cloud Platform, desde que a conta de serviço tenha acesso ao projeto. Por exemplo, execute uma versão no Projeto A que pode extrair imagens do Projeto B.

gsutil

Para conceder essas permissões à sua conta de serviço, execute os seguintes comandos no shell ou na janela do terminal:

  1. Encontre o nome do bucket do Cloud Storage referente ao registro. Para fazer isso, liste os buckets:

    gsutil ls
    

    O URL do bucket do Container Registry será listado como gs://artifacts.[PROJECT_ID].appspot.com ou gs://[STORAGE_REGION].artifacts.[PROJECT_ID].appspot.com.

  2. Conceda permissões à conta de serviço do Projeto A para ler os objetos do Projeto B:

    gsutil acl ch -r -u [PROJECT_NUMBER_A]@cloudbuild.gserviceaccount.com:R \
        gs://artifacts.[PROJECT_ID_B].appspot.com
    
  3. Conceda permissões para a conta de serviço do Projeto A para ler o bucket do Projeto B:

    gsutil acl ch -u [PROJECT_NUMBER_A]@cloudbuild.gserviceaccount.com:R \
        gs://artifacts.[PROJECT_ID_B].appspot.com
    
  4. Atualize a ACL padrão do Projeto B para que a conta de serviço do Projeto A tenha permissões de leitura para os objetos criados após a execução das etapas 1 e 2 acima:

    gsutil defacl ch -u [PROJECT_NUMBER_A]@cloudbuild.gserviceaccount.com:R \
        gs://artifacts.[PROJECT_ID_B].appspot.com
    

Onde:

  • [STORAGE_REGION] é a multirregião (asia, eu ou us) do registro que hospeda a imagem;
  • [PROJECT_NUMBER_A] é o número do Projeto A;
  • [PROJECT_ID_B] é o código do projeto B.

console

Para instruções sobre como conceder permissões usando o Console do Cloud, consulte Como criar e gerenciar listas de controle de acesso.

Enviar imagens particulares para outros projetos do Google Cloud

É possível conceder permissões para enviar imagens privadas a outro projeto do Cloud Platform, desde que a conta de serviço tenha acesso ao projeto. Por exemplo, execute uma versão no Projeto A que envia imagens ao Projeto B.

gsutil

Para conceder essas permissões à sua conta de serviço, execute os seguintes comandos no shell ou na janela do terminal:

  1. Encontre o nome do bucket do Cloud Storage referente ao registro. Para fazer isso, liste os buckets:

    gsutil ls
    

    O URL do bucket do Container Registry será listado como gs://artifacts.[PROJECT_ID].appspot.com ou gs://[STORAGE_REGION].artifacts.[PROJECT_ID].appspot.com.

  2. Conceda permissões à conta de serviço do Projeto A para atualizar os objetos do Projeto B:

    gsutil acl ch -r -u [PROJECT_NUMBER_A]@cloudbuild.gserviceaccount.com:W \
        gs://artifacts.[PROJECT_ID_B].appspot.com
    
  3. Conceda permissões para a conta de serviço do Projeto A para gravar no bucket do Projeto B:

    gsutil acl ch -u [PROJECT_NUMBER_A]@cloudbuild.gserviceaccount.com:W \
        gs://artifacts.[PROJECT_ID_B].appspot.com
    
  4. Atualize a ACL padrão do Projeto B para que a conta de serviço do Projeto A tenha permissões de gravação para os objetos criados após a execução das etapas 1 e 2 acima:

    gsutil defacl ch -u [PROJECT_NUMBER_A]@cloudbuild.gserviceaccount.com:W \
        gs://artifacts.[PROJECT_ID_B].appspot.com
    

Onde:

  • [STORAGE_REGION] é a multirregião (asia, eu ou us) do registro que hospeda a imagem;
  • [PROJECT_NUMBER_A] é o número do Projeto A;
  • [PROJECT_ID_B] é o código do projeto B.

console

Para instruções sobre como conceder permissões usando o Console do Cloud, consulte Como criar e gerenciar listas de controle de acesso.

Resolver problemas

Se você encontrar erros 403 (acesso negado) nos registros da sua versão, teste as seguintes etapas:

  • Desative a API do Cloud Build e ative-a novamente. Isso deve conceder à sua conta de serviço acesso ao seu projeto novamente.
  • Execute novamente os comandos acima.

A seguir