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.

Veja as contas de serviço do projeto através do menu IAM do Console do GCP.

Quando você ativa a API Cloud Build, a conta de serviço é criada automaticamente e recebe o papel do 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 intervalo 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 autorizam 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 Kubernetes Engine ou acesso a um intervalo 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 "IAM" no console do GCP.

    Abrir a página do IAM

  2. Selecione o projeto e clique em Continuar.

  3. Na lista de membros, procure sua conta de serviço do Cloud Build chamada [PROJECT_NUMBER]@cloudbuild.gserviceaccount.com, em que [PROJECT_NUMBER] é o número do seu projeto do GCP.

  4. Clique no ícone de lápis nessa linha.

  5. Clique em Adicionar outro papel, selecione um papel na lista suspensa e clique em Salvar.

Extrair imagens particulares de outros projetos do Google Cloud Platform

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, em que [PROJECT_NUMBER_A] é o número do PROJETO A e [PROJECT_ID_B] é o código do Projeto B.

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

    gsutil ls
    

    O URL do intervalo do Container Registry será listado como gs://artifacts.[PROJECT-ID].appspot.com or gs://[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 intervalo 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
    

Console

Para instruções sobre a concessão de permissões usando o Console do GCP, consulte Como criar e gerenciar listas de controle de acesso.

Enviar imagens privadas para outros projetos do Google Cloud Platform

Conceda 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, em que [PROJECT_NUMBER_A] é o número do PROJETO A e [PROJECT_ID_B] é o código do Projeto B.

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

    gsutil ls
    

    O URL do intervalo do Container Registry será listado como gs://artifacts.[PROJECT-ID].appspot.com or gs://[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 intervalo 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
    

Console

Para instruções sobre a concessão de permissões usando o Console do GCP, consulte Como criar e gerenciar listas de controle de acesso.

Como solucionar 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.

Próximas etapas

Enviar comentários sobre…