O Cloud Build pode usar uma conta de serviço especial para executar builds em
seu nome. O e-mail da conta de serviço do Cloud Build é
[PROJECT_NUMBER]@cloudbuild.gserviceaccount.com
. Essa conta de serviço pode ter permissões desnecessariamente amplas para seu caso de uso. É possível melhorar a
postura de segurança seguindo o princípio de privilégio
mínimo. Como parte desse princípio, recomendamos criar
sua própria conta de serviço para executar builds em seu nome. Isso pode
reduzir o possível impacto de configurações incorretas ou usuários mal-intencionados.
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 Google Cloud, a
conta de serviço do Cloud Build é criada automaticamente no projeto
e recebe o papel de 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 | Necessário para:
|
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 | |
cloudbuild.workerpools.use |
É possível usar um pool privado | Necessário para executar builds em um pool particular. |
logging.logEntries.create |
Pode gravar registros | Necessário para criar e listar registros da versão no Cloud Logging. |
logging.logEntries.list |
Pode listar registros | |
logging.views.access |
Pode ver registros | |
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 | |
remotebuildexecution.blobs.get |
Pode ter acesso para aprovar ou rejeitar builds. | Necessário para aprovar ou rejeitar builds pendentes |
resourcemanager.projects.get |
Pode receber informações do projeto | |
resourcemanager.projects.list |
Pode listar projetos | |
source.repos.get |
Pode ler o código-fonte dos repositórios no Cloud Source Repositories. | Necessário para:
|
source.repos.list |
Pode listar repositórios no Cloud Source Repositories | |
storage.buckets.create |
Pode criar buckets do Cloud Storage | Necessário para:
|
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.uploadArtifacts |
Pode fazer upload de artefatos para repositórios no Artifact Registry | Necessário para gerenciar artefatos no Artifact Registry. |
artifactregistry.repositories.downloadArtifacts |
Pode fazer o download de artefatos de um repositório no Artifact Registry | |
artifactregistry.aptartifacts.create |
Pode fazer upload de artefatos do Apt para o Artifact Registry | |
artifactregistry.dockerimages.get |
Pode receber imagens do Docker do Artifact Registry | |
artifactregistry.dockerimages.list |
Pode listar as imagens Docker armazenadas no Artifact Registry. | |
artifactregistry.kfpartifacts.create |
Pode fazer upload de um artefato KFP para o Artifact Registry | |
artifactregistry.locations.get |
Pode receber informações sobre o local de um recurso no Artifact Registry | |
artifactregistry.locations.list |
Pode listar locais compatíveis com o Artifact Registry | |
artifactregistry.mavenartifacts.get |
Pode receber pacotes Maven do Artifact Registry | |
artifactregistry.mavenartifacts.list |
Pode listar pacotes Maven do Artifact Registry. | |
artifactregistry.npmpackages.get |
Pode receber pacotes npm do Artifact Registry | |
artifactregistry.npmpackages.list |
Pode listar pacotes npm do Artifact Registry | |
artifactregistry.projectsettings.get |
Pode receber as configurações do projeto do Artifact Registry | |
artifactregistry.pythonpackages.get |
Pode receber pacotes Python do Artifact Registry | |
artifactregistry.pythonpackages.list |
Pode listar pacotes Python do Artifact Registry | |
artifactregistry.yumartifacts.create |
Pode fazer upload de artefatos do Yum para o Artifact Registry | |
artifactregistry.repositories.createOnPush |
É possível criar um repositório gcr.io no Artifact Registry na primeira vez que uma imagem é enviada para um nome de host gcr.io no projeto. | |
artifactregistry.repositories.get |
Pode receber um repositório do Artifact Registry | |
artifactregistry.repositories.list |
Pode listar repositórios no Artifact Registry | |
artifactregistry.repositories.listEffectiveTags |
Pode listar tags de artefatos no Artifact Registry | Necessário para gerenciar tags de artefatos no Artifact Registry. |
artifactregistry.repositories.listTagBindings |
Pode listar informações de vinculação de tags para artefatos no Artifact Registry. | |
artifactregistry.tags.create |
Pode criar tags no Artifact Registry | |
artifactregistry.tags.get |
Pode receber tags do Artifact Registry | |
artifactregistry.tags.list |
Pode listar tags no Artifact Registry | |
artifactregistry.tags.update |
Pode atualizar tags no Artifact Registry | |
artifactregistry.versions.list |
Pode listar versões no Artifact Registry | |
artifactregistry.versions.get |
Pode receber versões no Artifact Registry | |
containeranalysis.occurrences.create |
Pode criar uma ocorrência do Artifact Analysis | A conta de serviço do Cloud Build não usa essas permissões, mas elas estão incluídas para compatibilidade com versões anteriores. |
containeranalysis.occurrences.delete |
Pode excluir uma ocorrência do Artifact Analysis | |
containeranalysis.occurrences.get |
Pode receber uma ocorrência do Artifact Analysis | |
containeranalysis.occurrences.list |
Pode listar ocorrências do Artifact Analysis | |
containeranalysis.occurrences.update |
Pode atualizar ocorrências do Artifact Analysis |
Gatilhos de compilação
Por padrão, os gatilhos de compilação usam a conta de serviço do Cloud Build para executar builds. Como alternativa, é possível configurar gatilhos de compilaçã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 de Editor do Cloud Build que tenha a permissão
iam.serviceAccounts.actAs
pode criar e executar diretamente um acionador. Por exemplo, um usuário pode executar o gatilho manualmente. Qualquer usuário também pode executar indiretamente um acionador. Por exemplo, um usuário pode invocar indiretamente um gatilho ao enviar uma nova origem para um repositório conectado. Qualquer usuário com o papel de Editor do Cloud Build pode atualizar um acionador, desde que tenha as permissõesiam.serviceAccounts.actAs
na conta de serviço configurada anteriormente e na nova conta de serviço especificada no acionador. Para conceder essa permissão a um usuário, conceda a ele um papel predefinido com a permissão, como o papel de usuário da conta de serviço (roles/iam.serviceAccountUser
). Como alternativa, é possível criar um papel personalizado do IAM com a permissãoiam.serviceAccounts.actAs
e concedê-lo ao usuário. Para saber mais sobre permissões da conta de serviço, consulte Papéis para autenticaçã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 com tempo de compilação elevado para os usuários que usam gatilhos para invocar um build. 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 Google 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.
- Além disso, se você estiver usando os gatilhos de solicitação de pull do GitHub, qualquer usuário com acesso de leitura ao repositório poderá enviar uma solicitação de pull, que pode acionar um build que inclua alterações no código na solicitação de envio. 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 gatilhos do GitHub, consulte Como criar gatilhos do GitHub.
Limitações
Se você precisar se autenticar entre serviços usando um token de ID, execute as versões com uma conta de serviço especificada pelo usuário. A conta de serviço padrão do Cloud Build não pode ser usada para gerar tokens de ID.
Por exemplo, se você usar aplicativos de plataforma sem servidor, como Cloud Functions, Cloud Run ou App Engine, e quiser invocar seu aplicativo do Cloud Build, isso vai exigir uma conta de serviço especificada pelo usuário e configurada com as permissões necessárias para a autenticação de serviço a serviço.
Para mais instruções, consulte Autorizar o acesso de serviço a serviço.
A seguir
- Saiba mais sobre contas de serviço especificadas pelo usuário.
- Saiba mais sobre como configurar o acesso para a conta de serviço do Cloud Build.
- Saiba como configurar o acesso aos recursos do Cloud Build.
- Saiba mais sobre as permissões necessárias para visualizar os registros de versão.