Controle de acesso

Defina o controle de acesso usando papéis no nível do projeto. Atribua um papel a um integrante do projeto ou a uma conta de serviço para determinar o nível de acesso ao projeto do Google Cloud Platform e os recursos dele. Por padrão, todos os projetos do Google Cloud Platform têm 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 como integrantes da equipe ao projeto e atribua papéis a eles usando o Gerenciamento de identidade e acesso (IAM, na sigla em inglês).

O Cloud Functions conta com os papéis primários de Editor, Proprietário e Leitor, que dão as seguintes permissões:

  • Editor e Proprietário: acesso de leitura e gravação para todos os recursos relacionados a funções. Permite que 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, menos que vejam o código-fonte. Acesso extra a outros recursos no projeto.

O Cloud Functions também conta com os aos papéis selecionados de Desenvolvedor e Leitor, que dão as seguintes permissões:

  • Desenvolvedor: acesso de leitura e gravação a todos os recursos relacionados a funções. Permite que 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, menos que vejam o código-fonte. Não há acesso a outros recursos no projeto.

Conta 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 a fim de limitar ou ampliar as permissões para as funções em execução. Além disso, também é possível alterar a conta de serviço usada ao adicionar, para cada função, uma conta de serviço que não seja padrão.

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

Conta de serviço do Cloud Functions

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

Por padrão, essa conta de serviço 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 Adicione a assinatura a um tópico atual.
pubsub.topics.get Abra o tópico atual em que a função será acionada.
iam.serviceAccounts.actAs Execute a função como a conta de serviço do ambiente de execução.
iam.serviceAccounts.{getAccessToken, signBlob} Capacidade de usar as credenciais da conta de serviço no ambiente de execução.
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},
resourcemanager.projects.get
Crie funções acionadas por um intervalo do Cloud Storage.

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

Se aparecerem erros de permissão ao implantar, atualizar, excluir ou executar funções no projeto, veja se:

  • você tem o papel Editor ou Proprietário no projeto ou está usando o papel Desenvolvedor do Cloud Functions; Se estiver usando o papel Desenvolvedor do Cloud Functions, veja se atribuiu o papel Usuário da conta de serviço de IAM ao usuário;
  • a conta de serviço do Cloud Functions (service-PROJECT_NUMBER@gcf-admin-robot.iam.gserviceaccount.com) tem o papel cloudfunctions.serviceAgent no projeto;
  • você tem permissões para origens do gatilho, como o intervalo do Pub/Sub ou do Cloud Storage que aciona a função.

Se você receber um erro “permissões insuficientes” ou tiver outros problemas de autenticação ao executar as funções, veja se a conta de serviço do ambiente de execução tem as permissões corretas para acessar os recursos necessários para as funções e siga os passos 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. Esta conversa no Stack Overflow trata da recriação da conta de serviço caso tenha sido excluída.