Esta página descreve algumas formas de adquirir um token de ID do OpenID Connect (OIDC) assinado pela Google.
Precisa de um token de ID assinado pela Google para os seguintes exemplos de utilização de autenticação:
- Aceder a um serviço do Cloud Run
- Invocar uma função do Cloud Run
- Autenticar um utilizador numa aplicação protegida pelo Identity-Aware Proxy (IAP)
- Fazer um pedido a uma API implementada com o API Gateway ou o Cloud Endpoints
Para obter informações sobre os conteúdos e os prazos de validade dos tokens de ID, consulte o artigo Tokens de ID.
Os tokens de ID têm um serviço ou uma aplicação específicos para os quais podem ser usados,
especificados pelo valor da respetiva reivindicação aud
. Este documento usa o termo serviço de destino para se referir ao serviço ou à aplicação para a qual o token de ID pode ser usado para autenticação.
Quando recebe o token de ID, pode incluí-lo num cabeçalho Authorization
no pedido ao serviço de destino.
Métodos para obter um token de ID
Existem várias formas de obter um token de ID. Esta página descreve os seguintes métodos:
- Obtenha um token de ID do servidor de metadados
- Use um serviço de ligação para gerar um token de ID
- Gere um token de ID usando a identidade de uma conta de serviço
- Gere um token de ID genérico para desenvolvimento com o Cloud Run e as funções do Cloud Run
Se precisar que um token de ID seja aceite por uma aplicação não alojada em Google Cloud, é provável que possa usar estes métodos. No entanto, deve determinar que reivindicações do token de ID a aplicação requer.
Obtenha um token de ID do servidor de metadados
Quando o seu código é executado num recurso que pode ter uma conta de serviço associada, o servidor de metadados do serviço associado pode normalmente fornecer um token de ID. O servidor de metadados gera tokens de ID para a conta de serviço anexada. Não pode obter um token de ID com base nas credenciais do utilizador a partir do servidor de metadados.
Pode obter um token de ID do servidor de metadados quando o seu código estiver em execução nos seguintes Google Cloud serviços:
- Compute Engine
- Ambiente padrão do App Engine
- Ambiente flexível do App Engine
- Funções do Cloud Run
- Cloud Run
- Google Kubernetes Engine
- Cloud Build
Para obter um token de ID do servidor de metadados, consulte o ponto final de identidade da conta de serviço, conforme mostrado neste exemplo.
curl
Substitua AUDIENCE
pelo URI do serviço de destino, por exemplo, http://www.example.com
.
curl -H "Metadata-Flavor: Google" \ 'http://metadata/computeMetadata/v1/instance/service-accounts/default/identity?audience=AUDIENCE'
PowerShell
Substitua AUDIENCE
pelo URI do serviço de destino, por exemplo, http://www.example.com
.
$value = (Invoke-RestMethod ` -Headers @{'Metadata-Flavor' = 'Google'} ` -Uri "http://metadata/computeMetadata/v1/instance/service-accounts/default/identity?audience=AUDIENCE") $value
Java
Para executar este exemplo de código, tem de instalar a biblioteca cliente de autorização para Java.
Ir
Node.js
Para executar este exemplo de código, tem de instalar a biblioteca Google Auth para Node.js
Python
Para executar este exemplo de código, tem de instalar a biblioteca Python Google Auth.
Ruby
Para executar este exemplo de código, tem de instalar a Google Auth Library for Ruby.
Use um serviço de ligação para gerar um token de ID
Alguns Google Cloud serviços ajudam a ligar para outros serviços. Estes serviços de ligação podem ajudar a determinar quando a chamada é feita ou gerir um fluxo de trabalho que inclui chamar o serviço. Os seguintes serviços podem incluir automaticamente um token de ID, com o valor adequado para a reivindicação aud
, quando iniciam uma chamada para um serviço que requer um token de ID:
- Cloud Scheduler
- O Cloud Scheduler é um programador de tarefas cron de nível empresarial totalmente gerido. Pode configurar o Cloud Scheduler para incluir um token de ID ou um token de acesso quando invoca outro serviço. Para mais informações, consulte o artigo Usar a autenticação com destinos HTTP.
- Cloud Tasks
- O Cloud Tasks permite-lhe gerir a execução de tarefas distribuídas. Pode configurar uma tarefa para incluir um token de ID ou um token de acesso quando chama um serviço. Para mais informações, consulte o artigo Usar tarefas de destino HTTP com tokens de autenticação.
- Pub/Sub
- O Pub/Sub permite a comunicação assíncrona entre serviços. Pode configurar o Pub/Sub para incluir um token de ID com uma mensagem. Para mais informações, consulte o artigo Autenticação para subscrição push.
- Workflows
- O Workflows é uma plataforma de orquestração totalmente gerida que executa serviços numa ordem que define: um fluxo de trabalho. Pode definir um fluxo de trabalho para incluir um token de ID ou um token de acesso quando invoca outro serviço. Para mais informações, consulte o artigo Faça pedidos autenticados a partir de um fluxo de trabalho.
Gere um token de ID usando a identidade de uma conta de serviço
A utilização da identidade de uma conta de serviço permite que um principal gere credenciais de curta duração para uma conta de serviço fidedigna. Em seguida, o principal pode usar estas credenciais para se autenticar como a conta de serviço.
Antes de um principal poder usar a identidade de uma conta de serviço, tem de ter uma função do IAM nessa conta de serviço que permita a utilização da identidade. Se a conta principal for outra conta de serviço, pode parecer mais fácil fornecer simplesmente as autorizações necessárias diretamente a essa conta de serviço e permitir que se faça passar por si própria. Esta configuração, conhecida como representação automática, cria uma vulnerabilidade de segurança, porque permite que a conta de serviço crie um token de acesso que pode ser atualizado indefinidamente.
A representação da identidade de uma conta de serviço deve envolver sempre dois principais: um principal que representa o autor da chamada e a conta de serviço cuja identidade está a ser representada, denominada conta de serviço com privilégios.
Para gerar um token de ID usando a identidade de uma conta de serviço, use o seguinte processo geral.
Para instruções passo a passo, consulte o artigo Crie um token de ID.
Identifique ou crie uma conta de serviço para ser a conta de serviço com privilégios.
-
Identifique as funções necessárias para invocar o serviço de destino. Conceda estas funções à conta de serviço no serviço de destino:
-
Para
serviços do Cloud Run,
conceda a função Cloud Run Invoker (
roles/run.invoker
). -
Para
funções do Cloud Run,
conceda a função de invocador do Cloud Functions
(
roles/cloudfunctions.invoker
). - Para outros serviços de destino, consulte a documentação do produto para o serviço.
-
Para
serviços do Cloud Run,
conceda a função Cloud Run Invoker (
Identifique o principal que vai realizar a representação e configure as Credenciais padrão da aplicação (ADC) para usar as credenciais deste principal.
Para ambientes de desenvolvimento, o principal é normalmente a conta de utilizador que forneceu ao ADC através da CLI gcloud. No entanto, se estiver a usar um recurso com uma conta de serviço anexada, a conta de serviço anexada é a principal.
Conceda ao principal a função de criador de tokens de identidade do OpenID Connect da conta de serviço (
roles/iam.serviceAccountOpenIdTokenCreator
).Use a API IAM Credentials para gerar o token de ID para a conta de serviço autorizada.
Substitua o seguinte:
- AUDIENCE: o URI do serviço de destino, por exemplo,
http://www.example.com
. - SERVICE_ACCOUNT_EMAIL: o endereço de email da conta de serviço com privilégios.
curl -X POST \ -H "Authorization: Bearer $(gcloud auth print-access-token)" \ -H "Content-Type: application/json" \ -d '{"audience": "AUDIENCE", "includeEmail": "true"}' \ https://iamcredentials.googleapis.com/v1/projects/-/serviceAccounts/SERVICE_ACCOUNT_EMAIL:generateIdToken
- AUDIENCE: o URI do serviço de destino, por exemplo,
Gere um token de ID genérico para desenvolvimento com o Cloud Run e as funções do Cloud Run
Pode usar a CLI gcloud para obter um token de ID para as suas credenciais de utilizador que pode usar com qualquer serviço do Cloud Run ou função do Cloud Run que o autor da chamada tenha as autorizações do IAM necessárias para invocar. Este token não funciona para nenhuma outra aplicação.
Para gerar um token de ID genérico, use o comando
gcloud auth print-identity-token
:gcloud auth print-identity-token
O que se segue?
- Compreenda os tokens de ID.
- Use comandos da shell para consultar o servidor de metadados do Compute Engine.
- Saiba mais acerca dos métodos de autenticação.