Controle de acesso com o IAM (1ª geração)

Você (ou seja, o usuário ou a conta de serviço que implanta a função) pode definir o controle de acesso usando papéis no nível do projeto. Conceda um papel a um membro do projeto ou a uma conta de serviço para determinar o nível de acesso ao projeto do Google Cloud e os recursos dele. Por padrão, todos os projetos do Google Cloud vêm com um único usuário: o criador do projeto original. Ninguém mais tem acesso ao projeto e, como consequência, acesso às funções até que um usuário seja adicionado como integrante da equipe do projeto.

Controle de acesso para usuários

Adicione usuários à equipe do projeto e atribua papéis a eles usando o Identity and Access Management (IAM).

O Cloud Run functions oferece suporte aos papéis básicos de Editor, Proprietário e Leitor, que dão as seguintes permissões:

  • Editor e Proprietário: acesso de leitura e gravação a todos os recursos relacionados a funções. Permite que os usuários implantem, atualizem e excluam funções. Acesso extra a outros recursos no projeto.
  • Leitor: acesso somente leitura a funções e locais. Permite que os usuários listem funções e vejam os detalhes, mas não o código-fonte. Acesso extra a outros recursos no projeto.

O Cloud Run functions também aceita os papéis predefinidos Desenvolvedor e Leitor do Cloud Run, que dão as seguintes permissões:

  • Desenvolvedor: acesso de leitura e gravação a todos os recursos relacionados a funções. Permite que os usuários implantem, atualizem e excluam funções. Não há acesso a outros recursos no projeto.
  • Leitor: acesso somente leitura a funções e locais. Permite que os usuários listem funções e vejam os detalhes, mas não o código-fonte. Não há acesso a outros recursos no projeto.

Controle de acesso para contas de serviço

Uma conta de serviço é um tipo especial de Conta do Google que atua como identidade para um usuário não humano que precisa ser autenticado e autorizado para acessar dados e executar várias ações. Algumas dessas contas são criadas e gerenciadas pelo próprio Google e são conhecidas como agentes de serviços.

As contas de serviço a seguir são usadas para o Cloud Run functions:

Nome ID do membro Papel
Conta de serviço padrão do App Engine PROJECT_ID@appspot.gserviceaccount.com Editor
Agente de serviço do Google Cloud Run service-PROJECT_NUMBER@gcf-admin-robot.iam.gserviceaccount.com Agente de serviço de funções do Cloud Run
PROJECT_NUMBER@cloudbuild.gserviceaccount.com Conta de serviço do Cloud Build
Conta de serviço do Cloud Build service-PROJECT_NUMBER@gcp-sa-cloudbuild.iam.gserviceaccount.com Agente de serviço do Cloud Build
Agente de serviço do Google Container Registry service-PROJECT_NUMBER@containerregistry.iam.gserviceaccount.com Agente de serviço do Container Registry
Agente de serviço do Artifact Registry service-PROJECT_NUMBER@gcp-sa-artifactregistry.iam.gserviceaccount.com Agente de serviço do Artifact Registry

Contas de serviço do ambiente de execução

No ambiente de execução, o Cloud Run functions usa a conta de serviço padrão do App Engine (PROJECT_ID@appspot.gserviceaccount.com), que tem o papel Editor no projeto. É possível mudar o papel dessas contas de serviço para limitar ou ampliar as permissões das funções em execução. Além disso, também é possível alterar a conta de serviço usada ao fornecer uma conta de serviço individual não padrão.

Para saber mais sobre contas de serviço, consulte a documentação de contas de serviço.

Contas de serviço administrativas

Para realizar ações administrativas no seu projeto durante a criação, atualização ou exclusão de funções, todos os projetos no Cloud Run functions exigem a conta de serviço do agente de serviço do Google Cloud Run functions (service-PROJECT_NUMBER@gcf-admin-robot.iam.gserviceaccount.com).

Além disso, todos os ambientes de execução criam e armazenam imagens de contêiner no projeto. Para isso, também é preciso provisionar o seguinte:

Essas contas de serviço devem ter os papéis listados na tabela anterior.

Conta de serviço do agente de serviço do Google Cloud Run Functions

Por padrão, a conta de serviço do agente de serviço do Google Cloud Run functions (service-PROJECT_NUMBER@gcf-admin-robot.iam.gserviceaccount.com) tem o papel cloudfunctions.serviceAgent no projeto.

Veja algumas das permissões importantes que cloudfunctions.serviceAgent usa:

Permissão Descrição
roles/artifactregistry.admin Gerencia repositórios e armazena imagens de builds no Artifact Registry.
roles/cloudbuild.builds.editor Necessário para usar o Cloud Build a fim de executar criações no projeto do usuário.
roles/cloudbuild.customworkers.builder Crie builds em workers personalizados do Cloud Build.
cloudfunctions.functions.invoke Invocar uma função HTTP protegida pelo IAM.
compute.globalOperations.get,
compute.networks.access,
vpcaccess.connectors.{get, use}
Provisione funções com acesso à VPC de projetos do consumidor.
firebasedatabase.instances.{get, update} Crie funções acionadas pelo Firebase Realtime Database.
iam.serviceAccounts.{actAs, getAccessToken, signBlob} Capacidade de receber credenciais da conta de serviço do ambiente de execução.
iam.serviceAccounts.getOpenIdToken Necessário para que o agente receba um token OpenID em uma autoridade especificada pelo usuário. O token OpenID é usado para invocar funções ativadas do IAM.
pubsub.subscriptions Gerencie assinaturas no projeto do usuário.
pubsub.topics Gerencia tópicos no projeto do usuário.
storage.buckets.{get, update} Configurar notificações em um bucket do Cloud Storage que acionam uma função.
storage.buckets.create,
storage.objects.{delete, get, create, list}
Necessário para armazenar o código-fonte no projeto do usuário.

Veja todo o conjunto de permissões nos papéis predefinidos do IAM ou executando este comando:

gcloud iam roles describe roles/cloudfunctions.serviceAgent

Redefina esta conta de serviço para o papel padrão removendo o papel em uso e adicionando o papel agente de serviço do Cloud Run functions:

gcloud projects add-iam-policy-binding PROJECT_ID \
  --member serviceAccount:service-PROJECT_NUMBER@gcf-admin-robot.iam.gserviceaccount.com \
  --role roles/cloudfunctions.serviceAgent

Como solucionar problemas de erros de permissão

Caso haja erros de permissão ao implantar, atualizar, excluir ou executar funções no projeto:

  1. Certifique-se de que você tem o papel de Editor ou Proprietário no projeto, ou de que está usando o papel de Desenvolvedor do Cloud Run functions.

    Se você estiver usando o papel Desenvolvedor de funções do Cloud Run no projeto, verifique também se você concedeu ao usuário o papel de Usuário da conta de serviço do IAM.

    Apenas permissões de execução são permitidas no nível por função.

  2. Verifique se a conta do agente de serviço do Cloud Run functions (service-PROJECT_NUMBER@gcf-admin-robot.iam.gserviceaccount.com) tem o papel cloudfunctions.serviceAgent no seu projeto.

    Verifique se a caixa Incluir concessões de papel fornecidas pelo Google na guia Permissões da página IAM do console está marcada para ver essa conta. Também é possível usar gcloud projects add-iam-policy-binding PROJECT_ID.

  3. Verifique se você tem permissões para origens de gatilho, como Pub/Sub ou Cloud Storage.

Se ocorrer um erro de “permissões insuficientes” ou outros problemas de autenticação ao executar as funções, verifique se a conta do serviço do ambiente de execução tem as permissões corretas para acessar os recursos necessários e siga as etapas 2 e 3 acima.

Se o erro de ”serviço indisponível” for exibido durante a implantação, a conta de serviço do ambiente de execução PROJECT_ID@appspot.gserviceaccount.com deve estar no projeto. Para recriar essa conta de serviço, caso tenha sido excluída, consulte Como cancelar a exclusão de uma conta de serviço.

Consulte também Solução de problemas das funções do Cloud Run.