Contas de serviço do Google Cloud Deploy

Mantenha tudo organizado com as coleções Salve e categorize o conteúdo com base nas suas preferências.

Neste documento, descrevemos as contas de serviço usadas para executar o Google Cloud Deploy e como chamar o Google Cloud Deploy para executar várias operações.

O Google Cloud Deploy usa duas contas de serviço:

  • Agente de serviço do Google Cloud Deploy

    O Google Cloud Deploy usa essa conta de serviço para interagir com seu projeto. Não é possível substituir esse agente de serviço por uma conta de serviço alternativa, mas é possível editar permissões nele, por exemplo, quando você usa recursos fora do projeto, como uma conta de serviço ou um pool de workers particular do Cloud Build.

  • A conta de serviço de execução do Google Cloud Deploy

    O Google Cloud Deploy usa essa conta de serviço para executar operações de renderização e implantação no Cloud Build. Essa conta precisa de permissões suficientes para ler e gravar no bucket do Cloud Storage e acessar os destinos de implantação.

    A conta de serviço padrão para execução é a conta de serviço padrão do Compute Engine. É possível especificar uma conta de serviço alternativa na configuração de destino.

Consulte Como criar e gerenciar contas de serviço para ver instruções sobre como editar as permissões de uma conta de serviço e criar uma conta de serviço alternativa.

Agente de serviço do Google Cloud Deploy

O agente de serviço do Google Cloud Deploy é uma conta de serviço que o Google Cloud Deploy usa para interagir com outros serviços do Google Cloud em que o Google Cloud Deploy depende. Esses serviços incluem os registros de auditoria do Cloud Build, Pub/Sub e Cloud Audit Logs.

O nome dessa conta de serviço segue este padrão:

service-<project-number>@gcp-sa-clouddeploy.iam.gserviceaccount.com

Não é possível substituir o agente de serviço por uma conta de serviço alternativa. No entanto, talvez você precise adicionar permissões, por exemplo, para permitir o acesso a um pool particular em outro projeto, configurado como parte de um ambiente de execução.

Conta de serviço de execução do Google Cloud Deploy

Por padrão, o Google Cloud Deploy é executado usando a conta de serviço padrão do Compute Engine. Essa conta de serviço tem permissões suficientes no projeto que a contém para renderizar manifestos e implantar nos destinos.

O nome dessa conta de serviço segue este padrão:

[project-number]-compute@developer.gserviceaccount.com

Essa conta de serviço padrão tem permissões amplas. A prática recomendada é alterar o ambiente de execução para que o Google Cloud Deploy seja executado como uma conta de serviço diferente. É possível alterar a conta de serviço de execução para cada destino usando a propriedade executionConfigs.privatePool.serviceAccount ou a propriedade executionConfigs.defaultPool.serviceAccount na definição de destino.

Qualquer conta de serviço definida para essas propriedades precisa ter o papel roles/clouddeploy.jobRunner no projeto do Cloud Deploy. Se a conta de serviço de execução padrão não tiver essa permissão, execute o seguinte comando:

 gcloud projects add-iam-policy-binding PROJECT_ID \
     --member=serviceAccount:$(gcloud projects describe PROJECT_ID \
     --format="value(projectNumber)")-compute@developer.gserviceaccount.com \
     --role="roles/clouddeploy.jobRunner"

Quais contas de serviço criar

Se você optar por não usar a conta de serviço de execução padrão para renderização e implantação, será necessário criar uma ou mais contas de serviço alternativas para usar. Essas são as contas de serviço nas quais o Google Cloud Deploy é executado e estão configuradas na configuração de destino.

Um motivo para criar mais de um é ter uma conta de serviço específica ou contas para implantar em destinos restritos, como um destino de produção.

Uma abordagem possível é usar contas de serviço separadas por pipeline de entrega. Cada conta de serviço incluiria papéis com permissões suficientes para renderizar e implantar.

Para implantações no Google Kubernetes Engine, é possível restringir a conta de serviço a um namespace.

Usar contas de serviço de um projeto diferente

Para o ambiente de execução, é possível especificar uma conta de serviço que está em um projeto diferente daquele em que você cria o pipeline de entrega:

  1. No projeto que é proprietário da conta de serviço, ative a política da organização do SA de vários projetos.

  2. Conceda ao agente de serviço (service-<project-number>@gcp-sa-clouddeploy.iam.gserviceaccount.com) do Google Cloud Deploy a permissão iam.serviceAccounts.actAs para sua conta de serviço.

    Você também pode conceder o papel roles/iam.serviceAccountUser, que inclui essa permissão.

  3. Conceda ao agente de serviço do Cloud Build (service-<project-number>@gcp-sa-cloudbuild.iam.gserviceaccount.com) o papel roles/iam.serviceAccountTokenCreator.

  4. Conceda ao autor da chamada as permissões gcloud deploy releases create e gcloud deploy rollouts create iam.serviceAccounts.actAs na conta de serviço.

Permissões necessárias

  • A conta de serviço usada para configurações de renderização precisa ter permissões suficientes para acessar o bucket do Cloud Storage em que os recursos do Google Cloud Deploy estão armazenados (pipelines de entrega, versões, lançamentos).

    O papel roles/clouddeploy.jobRunner inclui todas as permissões que a conta de serviço de renderização (privatePool ou defaultPool) precisa.

  • A conta de serviço usada para implantação precisa ter permissões suficientes para implantar no cluster de destino e permissão para acessar o bucket do Cloud Storage.

  • A conta de serviço que chama o Google Cloud Deploy para criar uma versão precisa ter o papel clouddeploy.releaser. Ele também precisa ter a permissão iam.serviceAccount.actAs para usar a conta de serviço que renderiza manifestos (por exemplo, por meio do papel roles/iam.serviceAccountUser).

  • A conta de serviço que chama o Google Cloud Deploy para promover uma versão ou criar uma rollout precisa ter a permissão iam.serviceAccount.actAs para usar a conta de serviço que implanta em destinos.

A seguir