Controle de acesso com o IAM (2a 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 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
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 Functions:
Nome | ID do membro | Papel |
---|---|---|
Conta de serviço padrão do Compute Engine | PROJECT_NUMBER-compute@developer.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 |
— | 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 Functions usa a conta de serviço padrão
do Compute Engine (PROJECT_NUMBER-compute@developer.gserviceaccount.com
), que tem o
papel Editor no projeto. É possível alterar os papéis dessas contas de serviço para limitar ou estender 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 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 criam e armazenam imagens de contêiner no projeto. Para isso, também é preciso provisionar o seguinte:
- a conta de serviço básica do Cloud Build (
PROJECT_NUMBER@cloudbuild.gserviceaccount.com
); - a conta de serviço do agente de serviço do Cloud Build (
service-PROJECT_NUMBER@gcp-sa-cloudbuild.iam.gserviceaccount.com
); - a conta de serviço do agente de serviço do Google Container Registry (
service-PROJECT_NUMBER@containerregistry.iam.gserviceaccount.com
).
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.
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. |
compute.globalOperations.get ,compute.networks.access ,vpcaccess.connectors.{get, use} |
Provisione funções com acesso à VPC de projetos do consumidor. |
roles/eventarc.developer |
Gerenciar gatilhos do Eventarc para funções. |
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. |
roles/run.developer |
Gerenciar o serviço do Cloud Run para funções. |
storage.buckets.create ,storage.objects.{delete, get, create, list} |
Necessário para armazenar o código-fonte no projeto do usuário. |
Confira 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 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:
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 para envolvidos no projeto, verifique também se você concedeu ao usuário o papel Usuário da conta de serviço do IAM.
Atualmente, apenas permissões de execução são permitidas no nível por função.
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 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
.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.