Conta de serviço predefinida do Cloud Build

Consoante as definições da sua organização, o Cloud Build pode usar a conta de serviço predefinida do Compute Engine ou a conta de serviço do Cloud Build antiga para executar compilações em seu nome.

As contas de serviço predefinidas podem ter autorizações desnecessariamente amplas para o seu exemplo de utilização. Pode melhorar a sua postura de segurança seguindo o princípio do menor privilégio. Como parte deste princípio, recomendamos que crie a sua própria conta de serviço para executar compilações em seu nome. Isto pode reduzir o potencial impacto de configurações incorretas ou utilizadores maliciosos.

Para saber como conceder ou revogar autorizações às contas de serviço predefinidas do Cloud Build, consulte o artigo Configure o acesso para a conta de serviço predefinida do Cloud Build.

Acerca da conta de serviço predefinida do Compute Engine

As políticas da sua organização podem definir a conta de serviço predefinida do Cloud Build como a conta de serviço predefinida do Compute Engine. O endereço de email desta conta de serviço é
PROJECT_NUMBER-compute@developer.gserviceaccount.com.

Para obter informações sobre a conta de serviço predefinida do Compute Engine, consulte o artigo Conta de serviço predefinida do Compute Engine.

Acerca da conta de serviço antiga do Cloud Build

As políticas da sua organização podem definir a conta de serviço do Cloud Build predefinida como a conta de serviço antiga. O email da conta de serviço do Cloud Build antigo é
PROJECT_NUMBER@cloudbuild.gserviceaccount.com

Esta secção explica todas as autorizações que a conta de serviço do Cloud Build antigo tem por predefinição.

Autorizações predefinidas da conta de serviço do Cloud Build antiga

Se as definições do seu projeto permitirem a utilização da conta de serviço do Cloud Build antigo, é atribuída à conta de serviço antiga a função Conta de serviço do Cloud Build (roles/cloudbuild.builds.builder) para os recursos no projeto. Esta função contém várias autorizações, como a capacidade de atualizar compilações ou escrever registos. A conta de serviço usa estas autorizações apenas conforme necessário para realizar ações quando executa a compilação. Por exemplo, a conta de serviço usa a autorização artifactregistry.dockerimages.get para obter uma imagem do Docker do Artifact Registry, se a sua compilação estiver configurada para o fazer.

Se não planeia realizar uma ação como parte do processo de compilação, recomendamos que revogue a autorização correspondente da conta de serviço para agir em conformidade com o princípio de segurança do mínimo privilégio.

A tabela seguinte indica as autorizações que a função conta de serviço do Cloud Build (roles/cloudbuild.builds.builder) contém e a finalidade para a qual a conta de serviço do Cloud Build antiga usa estas autorizações.

Autorização Descrição Finalidade da autorização
cloudbuild.builds.create Pode criar compilações e acionadores Obrigatório para:
  • Use acionadores de compilação.
  • Criar, listar, obter ou cancelar compilações.
cloudbuild.builds.update Pode atualizar compilações e acionadores
cloudbuild.builds.list Pode listar compilações e acionadores
cloudbuild.builds.get Pode obter uma compilação e um acionador
cloudbuild.workerpools.use Pode usar uma piscina privada Necessário para executar compilações num conjunto privado.
logging.logEntries.create Pode escrever registos Necessário para criar e listar registos de compilação no Cloud Logging.
logging.logEntries.list Pode listar registos
logging.views.access Podem ver registos
pubsub.topics.create Pode criar tópicos do Pub/Sub Necessário para enviar atualizações de compilação para o Pub/Sub.
pubsub.topics.publish Pode publicar no Pub/Sub
remotebuildexecution.blobs.get Pode obter acesso para aprovar ou rejeitar compilações. rowspan=3>Necessário para aprovar ou rejeitar compilações pendentes
resourcemanager.projects.get Pode obter informações do projeto
resourcemanager.projects.list Podem listar projetos
source.repos.get Pode ler código-fonte de repositórios nos Cloud Source Repositories Obrigatório para:
  • Use acionadores do Bitbucket e dos Cloud Source Repositories.
  • Extrair código-fonte dos Cloud Source Repositories.
source.repos.list Pode listar repositórios nos Cloud Source Repositories
storage.buckets.create Pode criar contentores do Cloud Storage Obrigatório para:
  • Armazene e obtenha artefactos no Cloud Storage.
  • Envie compilações manualmente através do gcloud builds submit.
  • Armazenar registos de compilação no contentor de registos criado pelo utilizador.
storage.buckets.get Pode obter contentores do Cloud Storage
storage.buckets.list Pode listar contentores 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 escrever objetos do Cloud Storage
storage.objects.delete Podem eliminar objetos do Cloud Storage
storage.objects.get Pode ler objetos do Cloud Storage
artifactregistry.repositories.uploadArtifacts Pode carregar artefactos para repositórios no Artifact Registry Necessário para gerir artefactos no Artifact Registry.
artifactregistry.repositories.downloadArtifacts Pode transferir artefactos de um repositório no Artifact Registry
artifactregistry.aptartifacts.create Pode carregar artefactos Apt para o Artifact Registry
artifactregistry.dockerimages.get Pode obter imagens Docker do Artifact Registry
artifactregistry.dockerimages.list Pode listar imagens Docker armazenadas no Artifact Registry
artifactregistry.kfpartifacts.create Pode carregar um artefacto do KFP para o Artifact Registry
artifactregistry.locations.get Pode obter informações sobre a localização de um recurso no Artifact Registry
artifactregistry.locations.list Pode listar as localizações suportadas para o Artifact Registry
artifactregistry.mavenartifacts.get Pode obter pacotes Maven do Artifact Registry
artifactregistry.mavenartifacts.list Pode listar pacotes Maven do Artifact Registry
artifactregistry.npmpackages.get Pode obter pacotes npm do Artifact Registry
artifactregistry.npmpackages.list Pode listar pacotes npm do Artifact Registry
artifactregistry.projectsettings.get Pode obter as definições do projeto a partir do Artifact Registry
artifactregistry.pythonpackages.get Pode obter pacotes Python do Artifact Registry
artifactregistry.pythonpackages.list Pode listar pacotes Python do Artifact Registry
artifactregistry.yumartifacts.create Pode carregar artefactos Yum para o Artifact Registry
artifactregistry.repositories.createOnPush Pode criar um repositório gcr.io no Artifact Registry na primeira vez que uma imagem é enviada para um nome de anfitrião gcr.io no projeto.
artifactregistry.repositories.get Pode obter um repositório do Artifact Registry
artifactregistry.repositories.list Pode listar repositórios no Artifact Registry
artifactregistry.repositories.listEffectiveTags Pode listar etiquetas para artefactos no Artifact Registry Necessário para gerir etiquetas de artefactos no Artifact Registry.
artifactregistry.repositories.listTagBindings Pode listar informações de associação de etiquetas para artefactos no Artifact Registry
artifactregistry.tags.create Pode criar etiquetas no Artifact Registry
artifactregistry.tags.get Pode obter etiquetas do Artifact Registry
artifactregistry.tags.list Pode listar etiquetas no Artifact Registry
artifactregistry.tags.update Pode atualizar etiquetas no Artifact Registry
artifactregistry.versions.list Pode listar versões no Artifact Registry
artifactregistry.versions.get Pode obter versões no Artifact Registry
containeranalysis.occurrences.create Pode criar uma ocorrência de análise de artefactos A conta de serviço do Cloud Build não usa estas autorizações, mas estão incluídas para efeitos de retrocompatibilidade.
containeranalysis.occurrences.delete Pode eliminar uma ocorrência de análise de artefactos
containeranalysis.occurrences.get Pode obter uma ocorrência da análise de artefactos
containeranalysis.occurrences.list Pode listar ocorrências da Artifact Analysis
containeranalysis.occurrences.update Pode atualizar ocorrências da análise de artefactos

Acionadores de compilação

Quando criar acionadores de compilação, tem de escolher a conta de serviço usada para executar a compilação. Pode configurar cada acionador com uma conta de serviço diferente. A única exceção é se o seu projeto tiver a conta de serviço do Cloud Build antiga ativada. Neste caso, os acionadores de compilação usam por predefinição a conta de serviço antiga quando não é selecionada nenhuma outra conta.

Acesso dos utilizadores a acionadores

O acesso dos utilizadores aos acionadores depende do tipo de conta de serviço configurado para o acionador:

  • Conta de serviço do Cloud Build antiga (se ativada): qualquer utilizador com a função Editor do Cloud Build pode criar e executar diretamente um acionador. Por exemplo, um utilizador pode executar o acionador manualmente. Qualquer utilizador com a função de editor do Cloud Build pode atualizar um acionador, desde que o acionador esteja a usar a conta de serviço antiga do Cloud Build.

  • Conta de serviço especificada pelo utilizador ou conta de serviço predefinida do Compute Engine: qualquer utilizador com a função de editor do Cloud Build que tenha a autorização iam.serviceAccounts.actAs pode criar e executar diretamente um acionador. Por exemplo, um utilizador pode executar o acionador manualmente.

    Qualquer utilizador com a função Editor do Cloud Build pode atualizar um acionador, desde que tenha as autorizações iam.serviceAccounts.actAs na conta de serviço configurada anteriormente e na nova conta de serviço especificada no acionador. Para conceder esta autorização a um utilizador, pode conceder-lhe uma função predefinida com a autorização, como a função Utilizador da conta de serviço (roles/iam.serviceAccountUser). Em alternativa, pode criar uma função de IAM personalizada com a autorização iam.serviceAccounts.actAs e, em seguida, conceder essa função ao utilizador. Para saber mais sobre as autorizações da conta de serviço, consulte o artigo Funções para a autenticação da conta de serviço.

Privilégios de tempo de compilação dos acionadores

A conta de serviço configurada para um acionador de compilação pode fornecer autorizações de tempo de compilação elevadas aos utilizadores que usam acionadores para invocar uma compilação. Isto aplica-se à conta de serviço antiga e às contas de serviço especificadas pelo utilizador. Tenha em atenção as seguintes implicações de segurança quando usar acionadores de compilação:

  • Um utilizador sem acesso ao seu projeto Google Cloud , mas com acesso de escrita ao repositório associado a acionadores de compilação no projeto, tem autorizações para alterar o código que está a ser compilado. Por exemplo, os utilizadores podem invocar indiretamente um acionador quando enviam novo código fonte para um repositório associado.

  • Se estiver a usar acionadores de pedidos de envio do GitHub, qualquer utilizador com acesso de leitura ao repositório pode enviar um pedido de envio, o que pode acionar uma compilação que inclua alterações ao código no pedido de envio. Pode desativar este comportamento escolhendo a opção Controlo de comentários quando criar um acionador de pedido de envio do GitHub. Se selecionar esta opção, garante que a compilação só é iniciada se um proprietário do repositório ou um colaborador comentar /gcbrun. Para informações sobre a utilização do Controlo de comentários com acionadores do GitHub, consulte o artigo Criar acionadores do GitHub.

Limitações na conta de serviço do Cloud Build antiga

  • Se precisar de fazer a autenticação entre serviços através de um token de ID, tem de executar as compilações com uma conta de serviço especificada pelo utilizador. Não pode usar a conta de serviço do Cloud Build antiga para gerar tokens de ID.

    Por exemplo, se usar aplicações de plataforma sem servidor, como as funções do Cloud Run, o Cloud Run ou o App Engine, e quiser invocar a sua aplicação a partir do Cloud Build, isto requer uma conta de serviço especificada pelo utilizador configurada com as autorizações necessárias para a autenticação de serviço a serviço.

    Para ver instruções, consulte o artigo Autorize o acesso de serviço a serviço.

  • Não pode adicionar uma associação de política IAM na conta de serviço antiga. Por exemplo, não pode criar uma associação de política de IAM que conceda a outra conta de serviço a roles/iam.serviceAccountTokenCreatorfunção na conta de serviço antiga.

O que se segue?