Conta de serviço do Cloud Build

O Cloud Build usa uma conta de serviço especial para executar versões em seu nome. O e-mail da conta de serviço do Cloud Build é [PROJECT_NUMBER]@cloudbuild.gserviceaccount.com. Por padrão, a conta de serviço do Cloud Build tem permissões para executar várias tarefas, como buscar um código do Cloud Source Repositories do seu projeto ou gravar objetos em qualquer bucket do Cloud Storage do seu projeto. Em vez de usar a conta de serviço padrão do Cloud Build, é possível especificar sua própria conta de serviço para executar versões em seu nome.

Nesta página, explicamos todas as permissões que a conta de serviço do Cloud Build tem por padrão. Para saber como conceder ou revogar permissões à conta de serviço do Cloud Build, consulte Como configurar o acesso à conta de serviço do Cloud Build.

Permissões padrão da conta de serviço do Cloud Build

Quando você ativa a API Cloud Build em um projeto do Cloud, a conta de serviço do Cloud Build é criada automaticamente no projeto e recebe o papel da conta de serviço do Cloud Build para os recursos no projeto. Esse papel contém várias permissões, como a capacidade de atualizar versões ou gravar registros. A conta de serviço usa essas permissões somente conforme necessário para executar ações durante a execução da versão. Por exemplo, a conta de serviço usará a permissão source.repos.get para buscar o código no Cloud Source Repositories se o código-fonte do build estiver no Cloud Source Repositories. Se você não pretende executar uma ação como parte do processo de compilação, recomendamos que revogue a permissão correspondente da conta de serviço do Cloud Build para obedecer ao princípio de segurança do privilégio mínimo.

A tabela a seguir lista as permissões que o papel da conta de serviço do Cloud Build contém e a finalidade dessas permissões para a conta.

Permissão Descrição Finalidade da permissão
cloudbuild.builds.create Pode criar builds e gatilhos Obrigatório para:
  • Use gatilhos de compilação.
  • Criar, listar, receber ou cancelar builds.
cloudbuild.builds.update Pode atualizar builds e gatilhos
cloudbuild.builds.list Pode listar builds e gatilhos
cloudbuild.builds.get Pode receber um build e um gatilho
storage.buckets.create Pode criar buckets do Cloud Storage Obrigatório para:
  • Armazenar e receber imagens do Container Registry.
  • Armazenar e receber artefatos no Cloud Storage.
  • Enviar builds manualmente usando gcloud builds submit.
  • Armazenar registros de build no bucket de registros criado pelo usuário.
storage.buckets.get Pode receber buckets do Cloud Storage
storage.buckets.list Pode listar buckets do Cloud Storage
storage.objects.list Pode listar objetos do Cloud Storage
storage.objects.update Pode atualizar objetos do Cloud Storage
storage.objects.create Pode gravar objetos do Cloud Storage
storage.objects.delete Pode excluir objetos do Cloud Storage
storage.objects.get Pode ler objetos do Cloud Storage
artifactregistry.repositories.list Pode listar repositórios no Artifact Registry Necessário para armazenar e receber artefatos no Artifact Registry.
artifactregistry.repositories.get Pode receber um repositório do Artifact Registry
artifactregistry.repositories.downloadArtifacts Pode fazer o download de artefatos de um repositório no Artifact Registry
artifactregistry.files.list Pode listar arquivos no Artifact Registry
artifactregistry.files.get Pode receber arquivos do Artifact Registry
artifactregistry.packages.list Pode listar pacotes no Artifact Registry
artifactregistry.packages.get Pode receber pacotes do Artifact Registry
artifactregistry.tags.list Pode listar tags no Artifact Registry
artifactregistry.tags.get Pode receber tags do Artifact Registry
artifactregistry.versions.list Pode listar versões no Artifact Registry
artifactregistry.versions.get Pode receber versões no Artifact Registry
logging.logEntries.create Pode gravar registros Necessário para criar registros do build no Cloud Logging.
pubsub.topics.create Pode criar tópicos do Pub/Sub Necessário para enviar atualizações do build ao Pub/Sub.
pubsub.topics.publish Pode publicar no Pub/Sub
resourcemanager.projects.get Pode receber informações do projeto Obrigatório para receber informações e listar projetos.
resourcemanager.projects.list Pode listar projetos
source.repos.get Pode ler o código-fonte dos repositórios no Cloud Source Repositories. Obrigatório para:
  • Usar gatilhos do Bitbucket e do Cloud Source Repositories.
  • Extrair o código-fonte do Cloud Source Repositories.
source.repos.list Pode listar repositórios no Cloud Source Repositories

Acionadores da versão

Por padrão, os acionadores de versão usam a conta de serviço do Cloud Build para executar versões. Como alternativa, é possível configurar acionadores de versão para executar versões com uma conta de serviço de sua escolha. É possível configurar cada gatilho com uma conta de serviço diferente.

Lembre-se das seguintes considerações ao escolher a conta de serviço para especificar para um gatilho de compilação:

  • Conta de serviço padrão do Cloud Build: qualquer usuário com o papel Editor do Cloud Build pode criar e executar diretamente um gatilho. Por exemplo, um usuário pode executar o gatilho manualmente. Qualquer usuário também pode executar um gatilho indiretamente. Por exemplo, um usuário pode invocar indiretamente um gatilho quando enviar um novo código-fonte para um repositório conectado. Qualquer usuário com o papel Editor do Cloud Build pode atualizar um gatilho, desde que a conta de serviço anterior e a nova conta de serviço especificadas no gatilho sejam a conta padrão do Cloud Build.

  • Conta de serviço especificada pelo usuário: qualquer usuário com o papel Editor do Cloud Build que tenha permissões de representação na conta de serviço (iam.serviceAccount.actAs) pode criar e executar diretamente um gatilho. Por exemplo, um usuário pode executar o acionador manualmente. Qualquer usuário também pode executar um gatilho indiretamente. Por exemplo, um usuário pode invocar indiretamente um gatilho quando enviar a nova fonte para um repositório conectado. Qualquer usuário com o papel Editor do Cloud Build pode atualizar um gatilho, desde que tenha permissões de representação na conta de serviço configurada anteriormente e na nova conta de serviço especificada no gatilho. Crie um papel do IAM personalizado com uma permissão de representação ou use papéis predefinidos que permitam que os principais representem uma conta de serviço. Para saber mais sobre permissões de representação, consulte Como gerenciar a representação da conta de serviço.

Além disso, a conta de serviço padrão do Cloud Build e as contas de serviço especificadas pelo usuário podem fornecer permissões elevadas de tempo de criação para os usuários que usam acionadores para invocar uma versão. Tenha em mente as seguintes implicações de segurança ao usar gatilhos de compilação associados à conta de serviço padrão do Cloud Build:

  • Um usuário sem acesso ao projeto do Cloud, mas com acesso de gravação ao repositório associado aos gatilhos de compilação no projeto, terá permissões para alterar o código que está sendo criado.
  • Se você estiver usando acionadores de solicitação de envio do GitHub, qualquer usuário com acesso de leitura ao repositório poderá enviar uma solicitação de envio, que pode acionar um build que inclua alterações no código. Você pode desativar esse comportamento escolhendo a opção Controle de comentários ao criar um gatilho de solicitação pull do GitHub. A seleção dessa opção garante que o build seja iniciado somente se um proprietário do repositório ou um colaborador fizerem comentários /gcbrun. Para saber mais sobre como usar o controle de comentários com acionadores do GitHub, consulte Como criar gatilhos do GitHub.

A seguir