Função Identidade
Para fins de segurança, a maioria das interações entre entidades no Google Cloud exige que cada entidade tenha uma identidade verificável, protegida por algum tipo de secret, como uma senha ou chave. Assim como outras entidades precisam de uma identidade para acessar o Cloud Run functions, as próprias funções geralmente precisam de acesso a outros recursos no Google Cloud para realizar o trabalho. Cada função é associada a uma conta de serviço que serve como identidade quando a função acessa outros recursos. A conta de serviço usada por uma função como identidade também é conhecida como conta de serviço do ambiente de execução.
Para uso em produção, o Google recomenda que você atribua a cada função uma identidade dedicada, atribuindo a ela uma conta de serviço gerenciada pelo usuário. As contas de serviço gerenciadas pelo usuário permitem que você controle o acesso concedendo um conjunto mínimo de permissões usando o Identity and Access Management.
Conta de serviço do ambiente de execução
A menos que você especifique uma conta de serviço de ambiente de execução diferente ao implantar uma função, o Cloud Run functions usará uma conta de serviço padrão como identidade para a execução da função:
Funções do Cloud Run usam a conta de serviço de computação padrão,
PROJECT_NUMBER-compute@developer.gserviceaccount.com
.O número do projeto é diferente do ID e do nome do projeto. Encontre o número do projeto na página do Painel do console do Google Cloud.
Dependendo da configuração da política da organização, a conta de serviço padrão pode
receber automaticamente o papel de Editor no
projeto. É altamente recomendável desativar a concessão automática de papéis
aplicando a restrição
da política da organização iam.automaticIamGrantsForDefaultServiceAccounts
. Se você criou a organização após 3 de maio de 2024, essa
restrição será aplicada por padrão.
Se você desativar a concessão automática de papéis, precisará decidir quais papéis conceder às contas de serviço padrão e, em seguida, conceder esses papéis por conta própria.
Se a conta de serviço padrão já tiver o papel de Editor, recomendamos que você o substitua por papéis menos permissivos. Para modificar com segurança os papéis da conta de serviço, use o Simulador de política para ver o impacto da alteração e, em seguida, conceda e revogue os papéis apropriados.
Para proteger as funções na produção:
- alterar permissões na conta de serviço padrão do ambiente de execução; ou
- Criar contas de serviço individuais para suas funções
Como alterar permissões na conta de serviço padrão do ambiente de execução
Console
Acesse a página "IAM" no Console do Google Cloud.
Selecione a Conta de serviço padrão do App Engine ou a Conta de serviço de computação padrão na tabela.
Clique no lápis ao lado direito da linha para mostrar a guia Editar permissões.
Adicione ou remova papéis na lista suspensa de papéis para fornecer acesso com menos privilégios.
Clique em Salvar.
gcloud
Remova o papel Editor e use o comando gcloud projects add-iam-policy-binding
para adicionar uma nova função:
# Remove the Editor role gcloud projects remove-iam-policy-binding PROJECT_ID \ --member="SERVICE_ACCOUNT_EMAIL" \ --role="roles/editor" # Add the desired role gcloud projects add-iam-policy-binding PROJECT_ID \ --member="SERVICE_ACCOUNT_EMAIL" \ --role="ROLE"
Em que PROJECT_ID
é o ID do projeto que você está usando, SERVICE_ACCOUNT_EMAIL
é o endereço de e-mail da conta de serviço do ambiente de execução padrão, conforme mostrado anteriormente em Conta de serviço do ambiente de execução, e
ROLE
é o novo papel para atribuir à conta de serviço de ambiente de execução
padrão.
Como usar contas de serviço individuais para suas funções
Para oferecer maior flexibilidade no controle de acesso para suas funções, é possível fornecer a cada uma delas a própria conta de serviço gerenciada pelo usuário.
- Crie sua conta de serviço. Anote o nome dela.
- Conceder os papéis apropriados com base nos recursos que a função precisa acessar para realizar o trabalho.
Se a conta de serviço e a função estiverem em projetos diferentes, a partir do projeto em que a conta de serviço está localizada:
- Configure a conta de serviço para trabalhar em vários projetos.
Conceda o papel de Criador de token da conta de serviço (
roles/iam.serviceAccountTokenCreator
) ao agente de serviço de funções do Cloud Run (service-PROJECT_NUMBER@serverless-robot-prod.iam.gserviceaccount.com
), em quePROJECT
se refere ao projeto em que a função reside. O agente de serviço de funções do Cloud Run gerencia o acesso entre projetos para sua conta de serviço.Conceda a permissão
iam.serviceaccounts.actAs
ao agente de serviço de funções do Cloud Run na conta de serviço (service-PROJECT_NUMBER@gcf-admin-robot.iam.gserviceaccount.com
) do projeto diferente.
Conceda à conta de serviço acesso ao recurso. O método para fazer isso depende do tipo de recurso.
Conecte a conta de serviço à sua função. Faça isso no momento da implantação ou atualizando uma função implantada anteriormente.
Como adicionar uma conta de serviço gerenciada pelo usuário na implantação
Console
Acesse o Console do Google Cloud:
Especifique e configure a função como quiser.
Clique em Ambiente de execução, build... para mostrar outras configurações.
Selecione a guia Ambiente de execução.
Clique no menu suspenso Conta de serviço e selecione a conta de serviço desejada.
Clique em Próximo e em Implantar.
gcloud
Ao implantar uma função usando gcloud functions deploy
, adicione a sinalização --service-account
. Exemplo:
gcloud functions deploy FUNCTION_NAME --service-account SERVICE_ACCOUNT_EMAIL
em que FUNCTION_NAME
é o nome da função e SERVICE_ACCOUNT_EMAIL
é o e-mail da conta de serviço.
Como atualizar a conta de serviço de uma função existente
É possível atualizar a conta de serviço do ambiente de execução de uma função existente.
Console
Acesse o Console do Google Cloud:
Clique no nome da função desejada para acessar a página de detalhes.
Clique no lápis Editar na parte superior da página de detalhes para editar a função.
Clique em Ambiente de execução, build... para mostrar outras configurações.
Selecione a guia Ambiente de execução.
Clique no menu suspenso Conta de serviço e selecione a conta de serviço desejada.
Clique em Próximo e em Implantar.
gcloud
Ao implantar uma função usando gcloud functions deploy
, adicione a sinalização --service-account
:
gcloud functions deploy FUNCTION_NAME --service-account SERVICE_ACCOUNT_EMAIL
em que FUNCTION_NAME
é o nome da função e SERVICE_ACCOUNT_EMAIL
é a conta de serviço.
A função reimplantada agora usa a nova conta de serviço do ambiente de execução.
Como usar o servidor de metadados para adquirir tokens
Ainda que as contas de serviço definidas pelo IAM sejam o método preferido para gerenciamento de acesso no Google Cloud, alguns serviços podem exigir outros modos, como uma chave de API, o cliente OAuth 2.0 ou a chave da conta de serviço. O acesso a um recurso externo também pode exigir métodos alternativos.
Se o serviço de destino exigir que você apresente um token de identidade do OpenID Connect ou um token de ID do Oauth 2.0, talvez seja possível usar o Compute Metadata Server para buscar esses tokens em vez de configurar um cliente OAuth completo.
Tokens de identidade
Use o Compute Metadata Server para buscar tokens de ID com um público-alvo específico da maneira a seguir:
curl "http://metadata.google.internal/computeMetadata/v1/instance/service-accounts/default/identity?audience=AUDIENCE" \ -H "Metadata-Flavor: Google"
Onde AUDIENCE
é o público-alvo JWT solicitado, por
exemplo: o URL de um serviço que você está chamando, como
https://service.domain.com
, ou o ID do cliente OAuth de um recurso
protegido por IAP, como 1234567890.apps.googleusercontent.com
.
Tokens de acesso
Os tokens de acesso do OAuth 2.0 usam escopos para definir as permissões de acesso. Por padrão,
dentro dos tokens de acesso do Google Cloud está o escopo cloud-platform
. Para
acessar outras APIs do Google ou do Google Cloud, será preciso buscar um token de acesso
com o escopo apropriado.
Use o Compute Metadata Server para buscar tokens de acesso.
Se você precisa de um token de acesso com um escopo específico, é possível gerar um como este:
curl "http://metadata.google.internal/computeMetadata/v1/instance/service-accounts/default/token?scopes=SCOPES" \ -H "Metadata-Flavor: Google"
Onde SCOPES
é uma lista separada por vírgulas de escopos OAuth
solicitados, por exemplo: https://www.googleapis.com/auth/drive,https://www.googleapis.com/auth/spreadsheets
.
Consulte a lista completa de escopos do Google OAuth para descobrir quais escopos você precisa.
Próximas etapas
Saiba como autorizar o acesso às funções ou autenticar desenvolvedores e outras funções para que eles possam invocar suas funções.