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:
|
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:
|
source.repos.list |
Pode listar repositórios nos Cloud Source Repositories | |
storage.buckets.create |
Pode criar contentores do Cloud Storage | Obrigatório para:
|
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çãoiam.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.serviceAccountTokenCreator
função na conta de serviço antiga.
O que se segue?
- Saiba mais sobre as contas de serviço especificadas pelo utilizador.
- Saiba como configurar o acesso para a conta de serviço predefinida do Cloud Build.
- Saiba como configurar o acesso aos recursos do Cloud Build.
- Saiba mais sobre as autorizações necessárias para ver os registos de compilação.