Controle de acesso

Defina 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 Functions oferece suporte aos papéis básicos de Editor, Proprietário e Visualizador, 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 Functions também aceita os papéis predefinidos Desenvolvedor e Visualizador do Cloud Functions, 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

A conta de serviço é um tipo especial de conta do Google Cloud que atua como identidade para um usuário não humano que precisa ser autenticado e autorizado a acessar dados e executar várias ações.

As contas de serviço a seguir são usadas para todos os ambientes de execução do Cloud Functions:

Nome ID do membro Papel
Conta de serviço padrão do App Engine PROJECT_ID@appspot.gserviceaccount.com Editor
Agente de serviços do Google Cloud Functions service-PROJECT_NUMBER@gcf-admin-robot.iam.gserviceaccount.com Agente do serviço do Cloud Functions

Além disso, para todos os ambientes de execução, exceto Node.js 8 e Go 1.11, as seguintes contas de serviço são necessárias:

Nome ID do membro Papel
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

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

No ambiente de execução, o Cloud Functions usa a conta de serviço padrão do App Engine (PROJECT_ID@appspot.gserviceaccount.com), que tem o papel Editor no projeto. Altere os papéis dessa conta 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 Functions exigem a conta de serviço do agente de serviço do Google Cloud Functions (service-PROJECT_NUMBER@gcf-admin-robot.iam.gserviceaccount.com).

Além disso, todos os ambientes de execução, exceto Node.js 8 e Go 1.11, executam a criação e o armazenamento de imagens de contêiner dentro do seu projeto. Nesse caso, você também precisa 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 Functions

Por padrão, a conta de serviço do agente de serviço do Google Cloud Functions (service-PROJECT_NUMBER@gcf-admin-robot.iam.gserviceaccount.com) tem o papel cloudfunctions.serviceAgent no projeto. A criação, a atualização e a exclusão de funções podem não funcionar se você alterar as permissões dessa conta.

O papel cloudfunctions.serviceAgent tem estas permissões:

Permissão Descrição
pubsub.subscriptions.* Gerencie assinaturas no projeto do usuário.
pubsub.topics.create Crie um novo tópico depois que uma função for implantada.
pubsub.topics.attachSubscription Anexe a assinatura a um tópico existente.
pubsub.topics.get Abra o tópico atual em que a função será acionada.
pubsub.subscriptions.get Receba a assinatura que aciona a função.
pubsub.topics.list Obrigatório para verificar a existência de um tópico do Pub/Sub.
iam.serviceAccounts.{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.
resourcemanager.projects.get Receba os detalhes do projeto.
resourcemanager.projects.getIamPolicy Determine a origem da função.
firebasedatabase.instances.{get, update} Crie funções acionadas pelo Firebase Realtime Database.
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.
clientauthconfig.clients.list Listar clientes OAuth do projeto para uma função HTTP protegida pelo IAM.
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.
cloudbuild.customworkers.builder Crie builds em workers personalizados do Cloud Build.
cloudbuild.builds.editor,
serviceusage.services.use
Necessário para usar o Cloud Build a fim de executar criações no projeto do usuário.

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 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 Functions.

    Se você estiver usando o papel Desenvolvedor do Cloud Functions, verifique se você concedeu ao usuário o papel de Usuário da conta de serviço do IAM.

  2. Verifique se a conta do agente de serviço do Cloud 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 do papel fornecidas pelo Google na guia Permissões da página Console do IAM está marcada para ver a conta. Ou você pode 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 do Cloud Functions.