Conta de serviço personalizada para o Cloud Build

As funções do Cloud Run usam o Cloud Build ao criar e implantar a função do Cloud Run. Por padrão, as funções do Cloud Run usam a conta de serviço padrão do Cloud Build como principal ao executar o build. A partir de julho de 2024, o Cloud Build mudou o comportamento padrão de como o Cloud Build usa contas de serviço em novos projetos. Essa mudança está detalhada em Alteração da conta de serviço do Cloud Build. Como resultado dessa mudança, os novos projetos que implantam funções pela primeira vez podem estar usando uma conta de serviço padrão do Cloud Build com permissões insuficientes para criar uma função. Se você for afetado por essa mudança, faça o seguinte:

  • Revise as orientações do Cloud Build sobre mudanças na conta de serviço padrão e desative essas mudanças.

  • Adicione o papel da conta do Cloud Build (roles/cloudbuild.builds.builder) à conta de serviço padrão do Compute Engine.

  • Crie uma conta de serviço personalizada do Cloud Build para implantações de função.

Neste documento, descrevemos como transmitir uma conta de serviço criada pelo usuário para ser usada pelo Cloud Build ao implantar a função.

É possível implantar funções com contas de serviço personalizadas usando a CLI do Google Cloud, o console do Google Cloud ou a API de funções do Cloud Run.

Aqui estão alguns cenários em que convém fornecer uma conta de serviço diferente para ser usada quando o Cloud Build cria sua função:

  • Você quer mais controle sobre quais contas de serviço adicionar ao seu perímetro do VPC-SC.

  • Você quer que o Cloud Build seja executado com permissões diferentes da conta de serviço padrão, sem precisar revogar cada permissão individualmente.

  • Se você quer definir permissões granulares do Cloud Build especificamente para suas funções, não compartilhe uma conta de serviço do Cloud Build otimizada para outras finalidades.

  • Sua organização desativou o uso da conta de serviço padrão.

Ativar APIs

Este recurso exige que a API IAM esteja ativada.

Use a CLI do Google Cloud para ativar as APIs necessárias para implantar uma função do Cloud Run ou use o Console do Google Cloud:

gcloud services enable iam.googleapis.com

Configurar conta de serviço

Neste documento, descrevemos como criar uma nova conta de serviço e conceder as permissões necessárias. Se você quiser usar uma conta de serviço atual, precisará do endereço de e-mail da conta de serviço que planeja usar. Para mais detalhes, consulte Como configurar contas de serviço especificadas pelo usuário.

É possível visualizar as contas de serviço atuais da seguinte maneira ou usar o console do Google Cloud:

gcloud iam service-accounts list

Criar a conta de serviço

Use a CLI do Google Cloud para criar sua conta de serviço ou use o console do Google Cloud:

gcloud iam service-accounts create SA_EMAIL

Substitua SA_EMAIL pelo endereço de e-mail da sua conta de serviço.

Conceder permissões

A conta de serviço que você usa precisará dos seguintes papéis:

  • roles/logging.logWriter Necessário para criar registros do build no Cloud Logging.
  • roles/artifactregistry.writer: necessário para armazenar imagens do build no Artifact Registry. Para o comportamento padrão, a conta de serviço precisa de acesso a repositórios com o nome "gcf-artifacts" e "cloud-run-source-deploy". O acesso aos repositórios pode ser definido na política do IAM do repositório. Como alternativa, é possível fornecer seu próprio repositório de artefatos pelo campo dockerRepository.
  • roles/storage.objectViewer: necessária para recuperar a origem da função do bucket do Cloud Storage e armazenar imagens de build no Container Registry. Para o comportamento padrão, a conta de serviço precisa ter acesso aos buckets "run-sources-*", "gcf-v2-sources-*" e "gcf-v2-uploads-*". Isso pode ser feito adicionando uma condição do IAM à concessão de função, como: (resource.type == "storage.googleapis.com/Object" && (resource.name.startsWith("gcf-v2-sources-") || resource.name.startsWith("gcf-v2-uploads-") || resource.name.startsWith("run-sources-")))

Conceda os papéis a seguir usando a CLI do Google Cloud ou o Console do Google Cloud.

gcloud projects add-iam-policy-binding PROJECT_ID \
--member=serviceAccount:SA_EMAIL \
    --role=roles/logging.logWriter

gcloud projects add-iam-policy-binding PROJECT_ID \
--member=serviceAccount:SA_EMAIL \
--role=roles/artifactregistry.writer

gcloud projects add-iam-policy-binding PROJECT_ID \
--member=serviceAccount:SA_EMAIL \
--role=roles/storage.objectViewer

Substitua:

Implantar uma função com uma conta de serviço personalizada

É possível usar a CLI do Google Cloud para implantar uma função que usa uma conta de serviço personalizada para o Cloud Build:

  • A flag --build-service-account especifica uma conta de serviço do IAM com credenciais que serão usadas para a etapa de criação. Se uma conta de serviço personalizada não for fornecida, a função usará a conta de serviço padrão do projeto para o Cloud Build.
  • Também é possível usar um pool particular, especificado usando a flag --build-worker-pool.

gcloud functions deploy FUNCTION_NAME \
   --gen2 \
   --region=REGION \
   --project=PROJECT_ID \
   --runtime=RUNTIME \
   --entry-point=CODE_ENTRYPOINT \
   --build-service-account=projects/PROJECT_ID/serviceAccounts/SA_EMAIL \
   --memory=256Mi \
   --trigger-http \
   --source=.

Substitua: