Este guia descreve como usar a federação de identidades da carga de trabalho para permitir que as cargas de trabalho de VMs do AWS e do Azure se autentiquem no Trusted Cloud by S3NS sem uma chave de conta de serviço.
Se usar o Amazon Elastic Kubernetes Service (Amazon EKS) ou o Azure Kubernetes Service (AKS), consulte o artigo Configure a federação de identidades da carga de trabalho com o Kubernetes para saber como configurar a federação de identidades da carga de trabalho para os seus clusters. Esta página aborda apenas a configuração da federação de identidade da carga de trabalho para VMs do AWS e Azure.
Ao usar a Workload Identity Federation, as cargas de trabalho executadas no AWS EC2 e nas VMs do Azure podem trocar as respetivas credenciais específicas do ambiente por tokens doTrusted Cloud Security Token Service de curta duração.
As credenciais específicas do ambiente incluem o seguinte:
- As instâncias do AWS EC2 podem usar perfis de instâncias para pedir credenciais temporárias.
- As VMs do Azure podem usar identidades geridas para obter tokens de acesso do Azure.
Ao configurar a Workload Identity Federation, pode permitir que estas cargas de trabalho troquem estas credenciais específicas do ambiente por credenciaisTrusted Cloud de curta duração. As cargas de trabalho podem usar estas credenciais de curta duração para aceder às APIs Trusted Cloud .
Antes de começar
Configurar autenticação.
Select the tab for how you plan to use the samples on this page:
Console
When you use the Trusted Cloud console to access Trusted Cloud by S3NS services and APIs, you don't need to set up authentication.
gcloud
Instale a CLI Google Cloud e, em seguida, inicie sessão na CLI gcloud com a sua identidade federada. Depois de iniciar sessão, inicialize a CLI gcloud executando o seguinte comando:
gcloud init
Python
Para usar os Python exemplos nesta página num ambiente de desenvolvimento local, instale e inicialize a CLI gcloud e, em seguida, configure as Credenciais predefinidas da aplicação com as suas credenciais de utilizador.
Instale a CLI Google Cloud e, em seguida, inicie sessão na CLI gcloud com a sua identidade federada.
Create local authentication credentials for your user account:
gcloud auth application-default login
If an authentication error is returned, and you are using an external identity provider (IdP), confirm that you have signed in to the gcloud CLI with your federated identity.
Para mais informações, consulte Configurar o ADC para um ambiente de desenvolvimento local na Trusted Cloud documentação de autenticação.
Prepare o seu Fornecedor de identidade externo
Só tem de realizar estes passos uma vez para cada inquilino do Microsoft Entra ID ou conta da AWS.
AWS
Não tem de fazer alterações de configuração na sua conta da AWS.
Depois de configurar um conjunto do Workload Identity para confiar na sua conta da AWS, pode permitir que os utilizadores da AWS e as funções da AWS usem credenciais de segurança da AWS permanentes ou temporárias para obter credenciais Trusted Cloud de curta duração.
Azul-celeste
Tem de criar uma nova aplicação do Microsoft Entra ID no seu inquilino do Microsoft Entra ID e configurá-la para que possa ser usada para a federação de identidades de cargas de trabalho.
Depois de configurar um conjunto de identidades da carga de trabalho para confiar na aplicação, os utilizadores e os principais de serviço do Azure podem pedir tokens de acesso para esta aplicação e trocar estes tokens de acesso por credenciais Trusted Cloud de curta duração.
Para criar a aplicação, faça o seguinte:
Crie uma aplicação e um principal de serviço do Microsoft Entra ID.
Defina um URI do ID da aplicação para a aplicação. Pode usar o URI do ID da aplicação predefinido (
APPID
) ou especificar um URI personalizado.Precisa do URI do ID da aplicação mais tarde quando configurar o fornecedor do conjunto do Workload Identity.
Para permitir que uma aplicação obtenha tokens de acesso para a aplicação Microsoft Entra ID, pode usar identidades geridas:
Crie uma identidade gerida. Anote o ID do objeto da identidade gerida. Precisa dele mais tarde quando configurar a representação.
Atribua a identidade gerida a uma máquina virtual ou a outro recurso que execute a sua aplicação.
Configure a Workload Identity Federation
Só tem de realizar estes passos uma vez por conta da AWS ou inquilino do Microsoft Entra ID. Em seguida, pode usar o mesmo Workload Identity Pool e fornecedor para várias cargas de trabalho e em vários Trusted Cloud projetos.
Para começar a configurar a Workload Identity Federation, faça o seguinte:
-
In the Trusted Cloud console, go to the project selector page.
-
Select or create a Trusted Cloud project.
É recomendável
usar um projeto dedicado para gerir os fornecedores e os conjuntos de identidades de carga de trabalho.
Verify that billing is enabled for your Trusted Cloud project.
Enable the IAM, Resource Manager, Service Account Credentials, and Security Token Service APIs.
Defina um mapeamento de atributos e uma condição
As credenciais específicas do ambiente da sua carga de trabalho da AWS ou do Azure contêm vários atributos e tem de decidir que atributo quer usar como identificador do assunto (
google.subject
) em Trusted Cloud.Trusted Cloud usa o identificador do assunto nos registos de auditoria do Cloud e nos identificadores principais para identificar de forma exclusiva um utilizador ou uma função do AWS ou Azure.
Opcionalmente, pode mapear atributos adicionais. Em seguida, pode consultar estes atributos adicionais quando conceder acesso a recursos.
AWS
O mapeamento de atributos pode usar os campos de resposta para
GetCallerIdentity
como atributos de origem. Estes campos incluem o seguinte:account
: o número da conta da AWS.arn
: o ARN da AWS da entidade externa.userid
: o identificador exclusivo da entidade de chamada.
Se a sua aplicação for executada numa instância do Amazon Elastic Compute Cloud (EC2) com uma função anexada, pode usar o seguinte mapeamento de atributos:
google.subject=assertion.arn attribute.account=assertion.account attribute.aws_role=assertion.arn.extract('assumed-role/{role}/') attribute.aws_ec2_instance=assertion.arn.extract('assumed-role/{role_and_session}').extract('/{session}')
O mapeamento faz o seguinte:
- Usa o ARN como identificador do assunto, por exemplo:
"arn:aws:sts::000000000000:assumed-role/ec2-my-role/i-00000000000000000
- Introduz um atributo personalizado
account
e atribui-lhe o ID da conta da AWS - Introduz um atributo personalizado
aws_role
e atribui-lhe o nome da função da AWS, por exemplo:ec2-my-role
- Introduz um atributo personalizado
aws_ec2_instance
e atribui-lhe o ID da instância do EC2. Por exemplo:i-00000000000000000
Com este mapeamento, pode conceder acesso a:
Uma instância EC2 específica:
principalSet://iam.googleapis.com/projects/PROJECT_NUMBER/locations/global/workloadIdentityPools/POOL_ID/attribute.aws_ec2_instance/EC2_INSTANCE_ID
Todos os utilizadores e instâncias numa função:
principalSet://iam.googleapis.com/projects/PROJECT_NUMBER/locations/global/workloadIdentityPools/POOL_ID/attribute.aws_role/ROLE_NAME
Azul-celeste
Os mapeamentos de atributos podem usar as reivindicações incorporadas em tokens de acesso do Azure, incluindo reivindicações personalizadas, como atributos de origem. Na maioria dos casos, é preferível usar a reivindicação
sub
como identificador do assunto: Quando a reivindicação `sub` excede o limite de 127 carateres para google.subject, recomenda-se a utilização de uma [função `extract`](/iam/docs/conditions-attribute-reference#extract) para derivar reivindicações significativas para utilização como identificador do assunto:google.subject=assertion.sub
google.subject=assertion.sub.extract('/eid1/c/pub/t/{sub_claim}')
Para uma chave de acesso emitida para uma identidade gerida, a reivindicação
sub
contém o ID do objeto da identidade gerida. Se usar uma reivindicação diferente, certifique-se de que a reivindicação é única e não pode ser reatribuída.Se não tiver a certeza da lista de reivindicações que pode referenciar, faça o seguinte:
Estabeleça ligação a uma VM do Azure que tenha uma identidade gerida atribuída.
Obtenha um token de acesso do Azure Instance Metadata Service (IMDS):
Bash
curl \ "http://169.254.169.254/metadata/identity/oauth2/token?resource=APP_ID_URI&api-version=2018-02-01" \ -H "Metadata: true" | jq -r .access_token
Este comando usa a ferramenta
jq
.jq
está disponível por predefinição no Cloud Shell.PowerShell
$SubjectTokenType = "urn:ietf:params:oauth:token-type:jwt" $SubjectToken = (Invoke-RestMethod ` -Uri "http://169.254.169.254/metadata/identity/oauth2/token?resource=APP_ID_URI&api-version=2018-02-01" ` -Headers @{Metadata="true"}).access_token Write-Host $SubjectToken
Substitua
APP_ID_URI
pelo URI do ID da aplicação da aplicação que configurou para a Workload Identity Federation.Num navegador de Internet, aceda a
https://jwt.ms/
e cole o token de acesso no campo.Clique em Reivindicações para ver a lista de reivindicações incorporadas no token de acesso.
Para identidades de serviço, normalmente, não é necessário criar um mapeamento para
google.groups
nem para quaisquer atributos personalizados.Opcionalmente, defina uma condição de atributo. As condições de atributos são expressões de IEC que podem verificar atributos de afirmação e atributos de destino. Se a condição do atributo for avaliada como
true
para uma determinada credencial, a credencial é aceite. Caso contrário, a credencial é rejeitada.AWS
Pode usar uma condição de atributo para restringir os utilizadores e as funções da IAM que podem usar a Federação de identidades de carga de trabalho para obter tokens Trusted Cloud de curta duração.
Por exemplo, a seguinte condição restringe o acesso a funções da AWS e não permite outros identificadores de IAM:
assertion.arn.startsWith('arn:aws:sts::AWS_ACCOUNT_ID:assumed-role/')
Azul-celeste
Pode usar uma condição de atributo para restringir os utilizadores e os responsáveis de serviços que podem usar a Workload Identity Federation para obter tokens Trusted Cloud de curta duração. Em alternativa, pode configurar a sua aplicação do Microsoft Entra ID para usar atribuições de funções da app.
Crie o Workload Identity Pool e o fornecedor
Funções necessárias
Para obter as autorizações de que precisa para configurar a Workload Identity Federation, peça ao seu administrador para lhe conceder as seguintes funções de IAM no projeto:
-
Administrador do Workload Identity Pool (
roles/iam.workloadIdentityPoolAdmin
) -
Administrador da conta de serviço (
roles/iam.serviceAccountAdmin
)
Para mais informações sobre a atribuição de funções, consulte o artigo Faça a gestão do acesso a projetos, pastas e organizações.
Também pode conseguir as autorizações necessárias através de funções personalizadas ou outras funções predefinidas.
Em alternativa, a função básica de proprietário da IAM (roles/owner
) também inclui autorizações para configurar a federação de identidades. Não deve conceder funções básicas num ambiente de produção, mas pode concedê-las num ambiente de desenvolvimento ou teste.Agora, recolheu todas as informações necessárias para criar um Workload Identity Pool e um fornecedor:
Consola
Na Trusted Cloud consola, aceda à página Novo fornecedor e conjunto de cargas de trabalho.
Na secção Crie um Identity Pool, introduza o seguinte:
- Nome: nome do conjunto. O nome também é usado como ID do conjunto. Não pode alterar o ID do conjunto mais tarde.
- Descrição: texto que descreve a finalidade do grupo.
Clique em Continuar.
Configure as definições do fornecedor:
AWS
Configure as seguintes definições do fornecedor:
- Selecione um fornecedor: AWS.
- Nome do fornecedor: o nome do fornecedor. O nome também é usado como o ID do fornecedor. Não pode alterar o ID do fornecedor mais tarde.
Azul-celeste
Configure as seguintes definições do fornecedor:
- Selecione um fornecedor: OpenID Connect (OIDC).
- Nome do fornecedor: nome do fornecedor. O nome também é usado como o ID do fornecedor. Não pode alterar o ID do fornecedor mais tarde.
- URL do emissor:
https://sts.windows.net/TENANT_ID
. SubstituaTENANT_ID
pelo ID do inquilino (GUID) do seu inquilino do Microsoft Entra ID. - Públicos-alvo permitidos: URI do ID da aplicação que usou quando registou a aplicação no Microsoft Entra ID.
Clique em Continuar.
Na secção Configurar atributos do fornecedor, adicione os mapeamentos de atributos que identificou anteriormente.
Na secção Condições de atributos, introduza a condição de atributo que identificou anteriormente. Deixe o campo em branco se não tiver uma condição de atributo.
Clique em Guardar para criar o Workload Identity Pool e o fornecedor.
gcloud
Crie um novo Workload Identity Pool:
gcloud iam workload-identity-pools create POOL_ID \ --location="global" \ --description="DESCRIPTION" \ --display-name="DISPLAY_NAME"
Substitua o seguinte:
POOL_ID
: o ID exclusivo do conjunto.DISPLAY_NAME
: o nome do conjunto.DESCRIPTION
: a descrição da piscina. Esta descrição é apresentada quando concede acesso a identidades de conjunto.
Adicione um fornecedor do Workload Identity Pool:
AWS
Para criar o fornecedor do Workload Identity Pool para a AWS, execute o seguinte comando:
gcloud iam workload-identity-pools providers create-aws PROVIDER_ID \ --location="global" \ --workload-identity-pool="POOL_ID" \ --account-id="ACCOUNT_ID" \ --attribute-mapping="MAPPINGS" \ --attribute-condition="CONDITIONS"
Substitua o seguinte:
PROVIDER_ID
: o ID exclusivo do fornecedor.POOL_ID
: o ID do conjunto.ACCOUNT_ID
: o número de 12 dígitos que identifica a sua conta da AWS.MAPPINGS
: lista separada por vírgulas de mapeamentos de atributos que identificou anteriormente.CONDITIONS
: condição do atributo que identificou anteriormente. Remova o parâmetro se não tiver uma condição de atributo.
Exemplo:
gcloud iam workload-identity-pools providers create-aws example-provider \ --location="global" \ --workload-identity-pool="pool-1" \ --account-id="123456789000" \ --attribute-mapping="google.subject=assertion.arn"
Azul-celeste
Para criar o fornecedor do Workload Identity Pool para o Azure, execute o seguinte comando:
gcloud iam workload-identity-pools providers create-oidc PROVIDER_ID \ --location="global" \ --workload-identity-pool="POOL_ID" \ --issuer-uri="ISSUER_URI" \ --allowed-audiences="APPLICATION_ID_URI" \ --attribute-mapping="MAPPINGS" \ --attribute-condition="CONDITIONS"
Substitua o seguinte:
PROVIDER_ID
: o ID exclusivo do fornecedor.POOL_ID
: o ID do conjunto.ISSUER_URI
: o ID do inquilino (GUID) do seu inquilino do Microsoft Entra ID, por vezes formatado comohttps://sts.windows.net/TENANT_ID
. O URI do emissor pode variar e, para encontrar o seu URI do emissor, pode depurar o seu JWT através de JWT.io.APPLICATION_ID_URI
: URI do ID da aplicação que usou quando registou a aplicação no Microsoft Entra ID.MAPPINGS
: a lista separada por vírgulas de mapeamentos de atributos que identificou anteriormente.CONDITIONS
: (Opcional) A condição do atributo que identificou anteriormente.
Exemplo:
gcloud iam workload-identity-pools providers create-oidc example-provider \ --location="global" \ --workload-identity-pool="pool-1" \ --issuer-uri="https://sts.windows.net/00000000-1111-2222-3333-444444444444" \ --allowed-audiences="api://my-app" \ --attribute-mapping="google.subject=assertion.sub,google.groups=assertion.groups"
Autentique uma carga de trabalho
Tem de realizar estes passos uma vez por carga de trabalho.
Permita que a sua carga de trabalho externa aceda aos recursos do Trusted Cloud
Para dar acesso aos recursos à sua carga de trabalho, recomendamos que conceda acesso direto aos recursos ao principal. Trusted Cloud Neste caso, o principal é o utilizador federado. Alguns Trusted Cloud produtos têm limitações da API Google Cloud. Se a sua carga de trabalho chamar um ponto final da API que tenha uma limitação, pode, em alternativa, usar a representação de contas de serviço. Neste caso, o principal é a Trusted Cloud conta de serviço, que funciona como a identidade. Concede acesso à conta de serviço no recurso.
Acesso direto aos recursos
Pode conceder acesso a uma identidade federada diretamente nos recursos através da Trusted Cloud consola ou da CLI gcloud.
Consola
Para usar a Trusted Cloud consola para conceder funções de IAM diretamente num recurso, tem de aceder à página do recurso e, em seguida, conceder a função. O exemplo seguinte mostra como aceder à página do Cloud Storage e conceder a função Storage Object Viewer (
roles/storage.objectViewer
) a uma identidade federada diretamente num contentor do Cloud Storage.- Na Trusted Cloud consola, aceda à página Recipientes do Cloud Storage.
Na lista de contentores, clique no nome do contentor para o qual quer conceder a função.
Selecione o separador Autorizações junto à parte superior da página.
Clique no botão add_box Conceder acesso.
É apresentada a caixa de diálogo Adicionar responsáveis.
No campo Novos responsáveis, introduza uma ou mais identidades que precisam de acesso ao seu contentor.
Por assunto
principal://iam.googleapis.com/projects/PROJECT_NUMBER/locations/global/workloadIdentityPools/POOL_ID/subject/SUBJECT
Substitua o seguinte:
PROJECT_NUMBER
: o número do projetoPOOL_ID
: o ID do conjunto de trabalhosSUBJECT
: o indivíduo assunto mapeado a partir do seu IdP, por exemplo,administrator@example.com
Por grupo
principalSet://iam.googleapis.com/projects/PROJECT_NUMBER/locations/global/workloadIdentityPools/POOL_ID/group/GROUP
Substitua o seguinte:
PROJECT_NUMBER
: o número do projetoWORKLOAD_POOL_ID
: o ID do conjunto de trabalhosGROUP
: o grupo mapeado a partir do seu IdP, por exemplo:administrator-group@example.com
Por atributo
principalSet://iam.googleapis.com/projects/PROJECT_NUMBER/locations/global/workloadIdentityPools/POOL_ID/attribute.ATTRIBUTE_NAME/ATTRIBUTE_VALUE
Substitua o seguinte:
PROJECT_NUMBER
: o número do projetoWORKLOAD_POOL_ID
: o ID do conjunto de trabalhosATTRIBUTE_NAME
: um dos atributos mapeados a partir do seu IdPATTRIBUTE_VALUE
: o valor do atributo
Selecione uma ou mais funções no menu pendente Selecionar uma função. As funções que selecionar aparecem no painel com uma breve descrição das autorizações que concedem.
Clique em Guardar.
gcloud
Para usar a CLI gcloud para conceder funções de IAM num recurso num projeto, faça o seguinte:
Obtenha o número do projeto no qual o recurso está definido.
gcloud projects describe $(gcloud config get-value core/project) --format=value\(projectNumber\)
Conceder acesso ao recurso.
Para usar a CLI gcloud para conceder a função Storage Object Viewer (
roles/storage.objectViewer
) a identidades externas que cumprem determinados critérios, execute o seguinte comando.Por assunto
gcloud storage buckets add-iam-policy-binding BUCKET_ID \ --role=roles/storage.objectViewer \ --member="principal://iam.googleapis.com/projects/PROJECT_NUMBER/locations/global/workloadIdentityPools/POOL_ID/subject/SUBJECT"
Por grupo
gcloud storage buckets add-iam-policy-binding BUCKET_ID \ --role=roles/storage.objectViewer \ --member="principalSet://iam.googleapis.com/projects/PROJECT_NUMBER/locations/global/workloadIdentityPools/POOL_ID/group/GROUP"
Por atributo
gcloud storage buckets add-iam-policy-binding BUCKET_ID \ --role=roles/storage.objectViewer \ --member="principalSet://iam.googleapis.com/projects/PROJECT_NUMBER/locations/global/workloadIdentityPools/POOL_ID/attribute.ATTRIBUTE_NAME/ATTRIBUTE_VALUE"
Substitua o seguinte:
BUCKET_ID
: o contentor no qual conceder acessoPROJECT_NUMBER
: o número do projeto. do projeto que contém o Workload Identity PoolPOOL_ID
: o ID do Workload Identity PoolSUBJECT
: o valor esperado para o atributo que mapeou paragoogle.subject
GROUP
: o valor esperado para o atributo que mapeou paragoogle.groups
ATTRIBUTE_NAME
: o nome de um atributo personalizado no mapeamento de atributosATTRIBUTE_VALUE
: o valor do atributo personalizado no mapeamento de atributos
Pode conceder funções em qualquer Trusted Cloud recurso que suporte políticas de autorização do IAM.
Simulação de identidade de conta de serviço
Para criar uma conta de serviço para a carga de trabalho externa, faça o seguinte:
Enable the IAM, Security Token Service, and Service Account Credentials APIs.
Crie uma conta de serviço que represente a carga de trabalho. Recomendamos que use uma conta de serviço dedicada para cada carga de trabalho. A conta de serviço não tem de estar no mesmo projeto que o conjunto de identidades de carga de trabalho, mas tem de fazer referência ao projeto que contém a conta de serviço.
Conceda acesso à conta de serviço aos recursos aos quais quer que as identidades externas acedam.
Para permitir que a identidade federada use a identidade da conta de serviço, faça o seguinte:
Consola
Para usar a Trusted Cloud consola para conceder funções do IAM a uma identidade federada com uma conta de serviço, faça o seguinte:
Conta de serviço no mesmo projeto
Para conceder acesso através da representação da conta de serviço para uma conta de serviço no mesmo projeto, faça o seguinte:
Aceda à página Workload Identity Pools.
Selecione Conceder acesso.
Na caixa de diálogo Conceder acesso à conta de serviço, selecione Conceder acesso através da simulação da conta de serviço.
Na lista Contas de serviço, selecione a conta de serviço para as identidades externas se fazerem passar por ela e faça o seguinte:
Para escolher que identidades no conjunto podem roubar a identidade da conta de serviço, execute uma das seguintes ações:
Para permitir que apenas identidades específicas do conjunto de identidades da carga de trabalho se façam passar pela conta de serviço, selecione Apenas identidades que correspondam ao filtro.
Na lista Nome do atributo, selecione o atributo pelo qual quer filtrar.
No campo Valor do atributo, introduza o valor esperado do atributo; por exemplo, se usar um mapeamento de atributos
google.subject=assertion.sub
, defina o nome do atributo comosubject
e o valor do atributo como o valor da reivindicaçãosub
em tokens emitidos pelo seu fornecedor de identidade externo.
Para guardar a configuração, clique em Guardar e, de seguida, em Ignorar.
Conta de serviço num projeto diferente
Para conceder acesso através da representação de conta de serviço a uma conta de serviço num projeto diferente, faça o seguinte:
Aceda à página Contas de serviço.
Selecione a conta de serviço que quer roubar.
Clique em Gerir acesso.
Clique em Adicionar principal.
No campo Novo principal, introduza um dos seguintes identificadores principais para as identidades no seu conjunto que vão roubar a identidade da conta de serviço.
Por assunto
principal://iam.googleapis.com/projects/PROJECT_NUMBER/locations/global/workloadIdentityPools/POOL_ID/subject/SUBJECT
Substitua o seguinte:
PROJECT_NUMBER
: o número do projetoPOOL_ID
: o ID do conjunto de trabalhosSUBJECT
: o indivíduo assunto mapeado a partir do seu IdP, por exemplo,administrator@example.com
Por grupo
principalSet://iam.googleapis.com/projects/PROJECT_NUMBER/locations/global/workloadIdentityPools/POOL_ID/group/GROUP
Substitua o seguinte:
PROJECT_NUMBER
: o número do projetoWORKLOAD_POOL_ID
: o ID do conjunto de trabalhosGROUP
: o grupo mapeado a partir do seu IdP, por exemplo:administrator-group@example.com
Por atributo
principalSet://iam.googleapis.com/projects/PROJECT_NUMBER/locations/global/workloadIdentityPools/POOL_ID/attribute.ATTRIBUTE_NAME/ATTRIBUTE_VALUE
Substitua o seguinte:
PROJECT_NUMBER
: o número do projetoWORKLOAD_POOL_ID
: o ID do conjunto de trabalhosATTRIBUTE_NAME
: um dos atributos mapeados a partir do seu IdPATTRIBUTE_VALUE
: o valor do atributo
Por piscina
principalSet://iam.googleapis.com/projects/PROJECT_NUMBER/locations/global/workloadIdentityPools/POOL_ID/*
Substitua o seguinte:
PROJECT_NUMBER
: o número do projetoWORKLOAD_POOL_ID
: o ID do conjunto de trabalhos
Em Selecionar uma função, selecione a função de utilizador da identidade de carga de trabalho (
roles/iam.workloadIdentityUser
).Para guardar a configuração, clique em Guardar.
gcloud
Para conceder a função Workload Identity User (
roles/iam.workloadIdentityUser
) a um conjunto de principais ou um principal federado, execute o seguinte comando. Para saber mais sobre os identificadores de principais da federação de identidades da carga de trabalho, consulte o artigo Tipos de principais.Por assunto
gcloud iam service-accounts add-iam-policy-binding SERVICE_ACCOUNT_EMAIL \ --role=roles/iam.workloadIdentityUser \ --member="principal://iam.googleapis.com/projects/PROJECT_NUMBER/locations/global/workloadIdentityPools/POOL_ID/subject/SUBJECT"
Por grupo
gcloud iam service-accounts add-iam-policy-binding SERVICE_ACCOUNT_EMAIL \ --role=roles/iam.workloadIdentityUser \ --member="principalSet://iam.googleapis.com/projects/PROJECT_NUMBER/locations/global/workloadIdentityPools/POOL_ID/group/GROUP"
Por atributo
gcloud iam service-accounts add-iam-policy-binding SERVICE_ACCOUNT_EMAIL \ --role=roles/iam.workloadIdentityUser \ --member="principalSet://iam.googleapis.com/projects/PROJECT_NUMBER/locations/global/workloadIdentityPools/POOL_ID/attribute.ATTRIBUTE_NAME/ATTRIBUTE_VALUE"
Substitua o seguinte:
SERVICE_ACCOUNT_EMAIL
: o endereço de email da conta de serviçoPROJECT_NUMBER
: o número do projeto. do projeto que contém o Workload Identity PoolPOOL_ID
: o ID do Workload Identity PoolSUBJECT
: o valor esperado para o atributo que mapeou paragoogle.subject
GROUP
: o valor esperado para o atributo que mapeou paragoogle.groups
ATTRIBUTE_NAME
: o nome de um atributo personalizado no mapeamento de atributosATTRIBUTE_VALUE
: o valor do atributo personalizado no mapeamento de atributos
Transfira ou crie uma configuração de credenciais
As bibliotecas cliente do Google Cloud, a CLI gcloud e o Terraform podem obter automaticamente credenciais externas e usar estas credenciais para se fazerem passar por uma conta de serviço. Para permitir que as bibliotecas e as ferramentas concluam este processo, tem de fornecer um ficheiro de configuração de credenciais. Este ficheiro define o seguinte:
- Onde obter credenciais externas
- Que Workload Identity Pool e fornecedor usar
- Que conta de serviço usar como identidade
Para criar um ficheiro de configuração de credenciais, faça o seguinte:
Consola
Para transferir um ficheiro de configuração de credenciais na Trusted Cloud consola, faça o seguinte:
Na Trusted Cloud consola, aceda à página Workload Identity Pools.
Localize o Workload Identity Pool para o IdP que quer usar e clique nele.
Se optou por usar o acesso direto aos recursos, faça o seguinte:
Clique em Conceder acesso.
Selecione Conceder acesso através de identidades federadas (recomendado).
Clique em Transferir.
Continue com as instruções para configurar a caixa de diálogo da aplicação, mais adiante neste procedimento.
Se optou por usar a simulação da conta de serviço, faça o seguinte:
Selecione Contas de serviço associadas.
Encontre a conta de serviço que quer usar e clique em
Transferir.Continue com as instruções para configurar a caixa de diálogo da aplicação, mais adiante neste procedimento.
Na caixa de diálogo Configure a sua aplicação, selecione o fornecedor que contém as identidades externas.
Indique as seguintes definições adicionais:
AWS
Não são necessárias definições adicionais.
Azul-celeste
URL do ID da aplicação: URI do ID da aplicação da aplicação Azure
Selecione
Transferir config para transferir o ficheiro de configuração de credenciais e, de seguida, clique em Ignorar.
gcloud
Para criar um ficheiro de configuração de credenciais através de
gcloud iam workload-identity-pools create-cred-config
, faça o seguinte:AWS
Para criar um ficheiro de configuração de credenciais que permita à biblioteca obter um token de acesso a partir dos metadados da instância do EC2, faça o seguinte:
gcloud iam workload-identity-pools create-cred-config \ projects/PROJECT_NUMBER/locations/global/workloadIdentityPools/POOL_ID/providers/PROVIDER_ID \ --service-account=SERVICE_ACCOUNT_EMAIL \ --service-account-token-lifetime-seconds=SERVICE_ACCOUNT_TOKEN_LIFETIME \ --aws \ --output-file=FILEPATH.json
Substitua o seguinte:
PROJECT_NUMBER
: o número do projeto do projeto que contém o Workload Identity PoolPOOL_ID
: o ID do Workload Identity Pool.PROVIDER_ID
: o ID do fornecedor do Workload Identity Pool.SERVICE_ACCOUNT_EMAIL
: se usar a simulação de conta de serviço, substitua-o pelo endereço de email da conta de serviço. Omita este sinalizador se não usar a simulação da conta de serviço.SERVICE_ACCOUNT_TOKEN_LIFETIME
: se usar a representação da conta de serviço, substitua-o pela duração total da chave de acesso da conta de serviço, em segundos. Por predefinição, é de uma hora quando não é fornecido. Omita este sinalizador se não usar a simulação da conta de serviço. Para especificar uma duração total superior a uma hora, tem de configurar a restrição da política organizacionalconstraints/iam.allowServiceAccountCredentialLifetimeExtension
.FILEPATH
: O ficheiro para guardar a configuração.
Se usar o AWS IMDSv2, tem de adicionar uma flag adicional
--enable-imdsv2
ao comandogcloud iam workload-identity-pools create-cred-config
:gcloud iam workload-identity-pools create-cred-config \ projects/PROJECT_NUMBER/locations/global/workloadIdentityPools/POOL_ID/providers/PROVIDER_ID \ --service-account=SERVICE_ACCOUNT_EMAIL \ --aws \ --enable-imdsv2 \ --output-file=FILEPATH.json
Se a utilização do servidor de metadados da AWS não for uma opção, pode fornecer credenciais de segurança da AWS através das seguintes variáveis de ambiente da AWS:
AWS_ACCESS_KEY_ID
AWS_SECRET_ACCESS_KEY
- Uma das seguintes opções:
AWS_REGION
ouAWS_DEFAULT_REGION
- Opcional:
AWS_SESSION_TOKEN
A CLI gcloud e as bibliotecas usam estas variáveis de ambiente da AWS quando o servidor de metadados da AWS não está disponível.
Azul-celeste
Crie um ficheiro de configuração de credenciais que permita à biblioteca obter um token de acesso do Azure Instance Metadata Service (IMDS):
gcloud iam workload-identity-pools create-cred-config \ projects/PROJECT_NUMBER/locations/global/workloadIdentityPools/POOL_ID/providers/PROVIDER_ID \ --service-account=SERVICE_ACCOUNT_EMAIL \ --service-account-token-lifetime-seconds=SERVICE_ACCOUNT_TOKEN_LIFETIME \ --azure \ --app-id-uri APPLICATION_ID_URI \ --output-file=FILEPATH.json
Substitua o seguinte:
PROJECT_NUMBER
: o número do projeto do projeto que contém o Workload Identity Pool.POOL_ID
: o ID do Workload Identity Pool.PROVIDER_ID
: o ID do fornecedor do Workload Identity Pool.SERVICE_ACCOUNT_EMAIL
: se usar a simulação de conta de serviço, substitua-o pelo endereço de email da conta de serviço. Omita este sinalizador se não usar a simulação da conta de serviço.APPLICATION_ID_URI
: o URI do ID da aplicação da aplicação Azure.SERVICE_ACCOUNT_TOKEN_LIFETIME
: se usar a representação da conta de serviço,a duração total da chave de acesso da conta de serviço, em segundos. O valor predefinido é uma hora quando não é fornecido. Omita este sinalizador se não usar a simulação da conta de serviço. Para especificar uma duração total superior a uma hora, tem de configurar aconstraints/iam.allowServiceAccountCredentialLifetimeExtension
restrição da política organizacional.FILEPATH
: O ficheiro para guardar a configuração.
Use a configuração de credenciais para aceder a Trusted Cloud
Para permitir que as ferramentas e as bibliotecas de cliente usem a sua configuração de credenciais, faça o seguinte no seu ambiente AWS ou Azure:
Inicialize uma variável de ambiente
GOOGLE_APPLICATION_CREDENTIALS
e direcione-a para o ficheiro de configuração das credenciais:Bash
ondeexport GOOGLE_APPLICATION_CREDENTIALS=`pwd`/FILEPATH.json
FILEPATH
é o caminho relativo para o ficheiro de configuração das credenciais.PowerShell
onde$env:GOOGLE_APPLICATION_CREDENTIALS = Resolve-Path 'FILEPATH.json'
FILEPATH
é o caminho relativo para o ficheiro de configuração das credenciais.Use uma biblioteca ou uma ferramenta de cliente que suporte a federação de identidades da carga de trabalho e que possa encontrar credenciais automaticamente:
C++
As Trusted Cloud bibliotecas cliente para C++ suportam a federação de identidades da carga de trabalho desde a versão v2.6.0. Para usar a Workload Identity Federation, tem de criar as bibliotecas de cliente com a versão 1.36.0 ou posterior do gRPC.
Ir
As bibliotecas cliente para Go suportam a federação de identidades da carga de trabalho se usarem a versão v0.0.0-20210218202405-ba52d332ba99 ou posterior do módulo
golang.org/x/oauth2
.Para verificar que versão deste módulo a sua biblioteca de cliente usa, execute os seguintes comandos:
cd $GOPATH/src/cloud.google.com/go go list -m golang.org/x/oauth2
Java
As bibliotecas cliente para Java suportam a Workload Identity Federation se usarem a versão 0.24.0 ou posterior do artefacto
com.google.auth:google-auth-library-oauth2-http
.Para verificar que versão deste artefacto a sua biblioteca de cliente usa, execute o seguinte comando Maven no diretório da aplicação:
mvn dependency:list -DincludeArtifactIds=google-auth-library-oauth2-http
Node.js
As bibliotecas de cliente para Node.js suportam a Federação de identidades da carga de trabalho se usarem a versão 7.0.2 ou posterior do pacote
google-auth-library
.Para verificar que versão deste pacote a sua biblioteca de cliente usa, execute o seguinte comando no diretório da aplicação:
npm list google-auth-library
Quando cria um objeto
GoogleAuth
, pode especificar um ID do projeto ou permitir que aGoogleAuth
encontre o ID do projeto automaticamente. Para encontrar o ID do projeto automaticamente, a conta de serviço no ficheiro de configuração tem de ter a função Navegador (roles/browser
) ou uma função com autorizações equivalentes no seu projeto. Para obter detalhes, consulte oREADME
para o pacotegoogle-auth-library
.Python
As bibliotecas cliente para Python suportam a Federação de identidades de carga de trabalho se usarem a versão 1.27.0 ou posterior do pacote
google-auth
.Para verificar que versão deste pacote a sua biblioteca de cliente usa, execute o seguinte comando no ambiente onde o pacote está instalado:
pip show google-auth
Para especificar um ID do projeto para o cliente de autenticação, pode definir a variável de ambiente
GOOGLE_CLOUD_PROJECT
ou permitir que o cliente encontre o ID do projeto automaticamente. Para encontrar o ID do projeto automaticamente, a conta de serviço no ficheiro de configuração tem de ter a função de navegador (roles/browser
) ou uma função com autorizações equivalentes no seu projeto. Para obter detalhes, consulte o manual do utilizador do pacotegoogle-auth
.gcloud
Para autenticar com a Workload Identity Federation, use o comando
gcloud auth login
:gcloud auth login --cred-file=FILEPATH.json
Substitua
FILEPATH
pelo caminho para o ficheiro de configuração das credenciais.O suporte para a Workload Identity Federation na CLI gcloud está disponível na versão 363.0.0 e versões posteriores da CLI gcloud.
Terraform
O Trusted Cloud fornecedor suporta a Workload Identity Federation se usar a versão 3.61.0 ou posterior:
terraform { required_providers { google = { source = "hashicorp/google" version = "~> 3.61.0" } } }
bq
Para autenticar através da Workload Identity Federation, use o comando
gcloud auth login
, da seguinte forma:gcloud auth login --cred-file=FILEPATH.json
Substitua
FILEPATH
pelo caminho para o ficheiro de configuração das credenciais.O suporte para a Workload Identity Federation no bq está disponível na versão 390.0.0 e versões posteriores da CLI gcloud.
Se não conseguir usar uma biblioteca cliente que suporte a Workload Identity Federation, pode autenticar programaticamente através da API REST.
Cenários avançados
Autentique uma carga de trabalho através da API REST
Se não conseguir usar as bibliotecas cliente, pode seguir estes passos para permitir que uma carga de trabalho externa obtenha um token de acesso de curta duração através da API REST:
Obtenha credenciais do seu IdP externo:
AWS
Crie um documento JSON que contenha as informações que normalmente incluiria num pedido ao ponto final da AWS
GetCallerIdentity()
, incluindo uma assinatura de pedido válida.A federação de identidades da carga de trabalho refere-se a este documento JSON como um token.
GetCallerIdentity
O token permite que a Workload Identity Federation valide a identidade sem revelar a chave de acesso secreta da AWS.Um token
GetCallerIdentity
tem um aspeto semelhante ao seguinte:{ "url": "https://sts.amazonaws.com?Action=GetCallerIdentity&Version=2011-06-15", "method": "POST", "headers": [ { "key": "Authorization", "value" : "AWS4-HMAC-SHA256 Credential=AKIASOZTBDV4D7ABCDEDF/20200228/us-east-1/sts/aws4_request, SignedHeaders=host;x-amz-date,Signature=abcedefdfedfd" }, { "key": "host", "value": "sts.amazonaws.com" }, { "key": "x-amz-date", "value": "20200228T225005Z" }, { "key": "x-goog-cloud-target-resource", "value": "//iam.googleapis.com/projects/12345678/locations/global/workloadIdentityPools/my-pool/providers/my-aws-provider" }, { "key": "x-amz-security-token", "value": "GizFWJTqYX...xJ55YoJ8E9HNU=" } ] }
O token contém os seguintes campos:
url
: o URL do ponto final do AWS STS paraGetCallerIdentity()
, com o corpo de um pedidoGetCallerIdentity()
padrão anexado como parâmetros de consulta. Por exemplo,https://sts.amazonaws.com?Action=GetCallerIdentity&Version=2011-06-15
. Recomendamos que use pontos finais do STS regionais e conceba uma infraestrutura fiável para as suas cargas de trabalho. Para mais informações, consulte o artigo Pontos finais regionais do AWS STS.method
: O método de pedido HTTP:POST
.headers
: Os cabeçalhos do pedido HTTP, que têm de incluir:Authorization
: a assinatura solicitada.host
: o nome de anfitrião do campourl
; por exemplo,sts.amazonaws.com
.x-amz-date
: a hora em que envia o pedido, formatada como uma string ISO 8601 Basic. Normalmente, este valor é definido como a hora atual e é usado para ajudar a evitar ataques de repetição.x-goog-cloud-target-resource
: o nome completo do recurso do fornecedor de identidade sem um prefixohttps:
. Por exemplo://iam.googleapis.com/projects/PROJECT_NUMBER/locations/global/workloadIdentityPools/POOL_ID/providers/PROVIDER_ID
x-amz-security-token
: token da sessão. Só é necessário se estiver a usar credenciais de segurança temporárias.
O exemplo seguinte cria um símbolo
GetCallerIdentity
codificado em URL. Extraia o token codificado por URL para utilização posterior. Também cria um token legível por humanos apenas para sua referência:Inicialize as seguintes variáveis:
Bash
SUBJECT_TOKEN_TYPE="urn:ietf:params:aws:token-type:aws4_request" SUBJECT_TOKEN=TOKEN
PowerShell
$SubjectTokenType = "urn:ietf:params:aws:token-type:aws4_request" $SubjectToken = "TOKEN"
Onde
TOKEN
é o token codificado por URLGetCallerIdentity
que foi gerado pelo script.Azul-celeste
Ligue-se a uma VM do Azure que tenha uma identidade gerida atribuída e obtenha um token de acesso do serviço de metadados de instâncias (IMDS) do Azure:
Bash
SUBJECT_TOKEN_TYPE="urn:ietf:params:oauth:token-type:jwt" SUBJECT_TOKEN=$(curl \ "http://169.254.169.254/metadata/identity/oauth2/token?resource=APP_ID_URI&api-version=2018-02-01" \ -H "Metadata: true" | jq -r .access_token) echo $SUBJECT_TOKEN
Este comando usa a ferramenta
jq
.jq
está disponível por predefinição no Cloud Shell.PowerShell
$SubjectTokenType = "urn:ietf:params:oauth:token-type:jwt" $SubjectToken = (Invoke-RestMethod ` -Uri "http://169.254.169.254/metadata/identity/oauth2/token?resource=APP_ID_URI&api-version=2018-02-01" ` -Headers @{Metadata="true"}).access_token Write-Host $SubjectToken
Em que
APP_ID_URI
é o URI do ID da aplicação da aplicação que configurou para a federação de identidade da força de trabalho.Use a API Security Token Service para trocar a credencial por um token de acesso de curta duração:
Bash
STS_TOKEN=$(curl https://sts.googleapis.com/v1/token \ --data-urlencode "audience=//iam.googleapis.com/projects/PROJECT_NUMBER/locations/global/workloadIdentityPools/POOL_ID/providers/PROVIDER_ID" \ --data-urlencode "grant_type=urn:ietf:params:oauth:grant-type:token-exchange" \ --data-urlencode "requested_token_type=urn:ietf:params:oauth:token-type:access_token" \ --data-urlencode "scope=https://www.googleapis.com/auth/cloud-platform" \ --data-urlencode "subject_token_type=$SUBJECT_TOKEN_TYPE" \ --data-urlencode "subject_token=$SUBJECT_TOKEN" | jq -r .access_token) echo $STS_TOKEN
PowerShell
[System.Net.ServicePointManager]::SecurityProtocol = [System.Net.SecurityProtocolType]::Tls12 $StsToken = (Invoke-RestMethod ` -Method POST ` -Uri "https://sts.googleapis.com/v1/token" ` -ContentType "application/json" ` -Body (@{ "audience" = "//iam.googleapis.com/projects/PROJECT_NUMBER/locations/global/workloadIdentityPools/POOL_ID/providers/PROVIDER_ID" "grantType" = "urn:ietf:params:oauth:grant-type:token-exchange" "requestedTokenType" = "urn:ietf:params:oauth:token-type:access_token" "scope" = "https://www.googleapis.com/auth/cloud-platform" "subjectTokenType" = $SubjectTokenType "subjectToken" = $SubjectToken } | ConvertTo-Json)).access_token Write-Host $StsToken
Substitua os seguintes valores:
PROJECT_NUMBER
: número do projeto que contém o Workload Identity PoolPOOL_ID
: ID do Workload Identity PoolPROVIDER_ID
: ID do fornecedor do Workload Identity Pool
Se usar a representação da conta de serviço, use o token do Security Token Service para invocar o método
generateAccessToken
da API IAM Service Account Credentials para obter uma chave de acesso.
Tokens para serviços do Cloud Run
Quando acede a um serviço do Cloud Run, tem de usar um token de ID.
Bash
TOKEN=$(curl -0 -X POST https://iamcredentials.googleapis.com/v1/projects/-/serviceAccounts/SERVICE_ACCOUNT_EMAIL:generateIdToken \ -H "Content-Type: text/json; charset=utf-8" \ -H "Authorization: Bearer $STS_TOKEN" \ -d @- <<EOF | jq -r .token { "audience": "SERVICE_URL" } EOF ) echo $TOKEN
PowerShell
$Token = (Invoke-RestMethod ` -Method POST ` -Uri "https://iamcredentials.googleapis.com/v1/projects/-/serviceAccounts/SERVICE_ACCOUNT_EMAIL:generateIdToken" ` -Headers @{ "Authorization" = "Bearer $StsToken" } ` -ContentType "application/json" ` -Body (@{ "audience" = "SERVICE_URL" } | ConvertTo-Json)).token Write-Host $Token
Substitua o seguinte:
-
SERVICE_ACCOUNT_EMAIL
: o endereço de email da conta de serviço. -
SERVICE_URL
: o URL do serviço, por exemplo,https://my-service-12345-us-central1.run.app
. Também pode defini-lo para o seu ponto final de serviço personalizado. Para mais informações, consulte o artigo Compreender os públicos-alvo personalizados.
Tokens para outras plataformas
Quando acede a outro serviço, tem de usar uma chave de acesso.
Bash
TOKEN=$(curl -0 -X POST https://iamcredentials.googleapis.com/v1/projects/-/serviceAccounts/SERVICE_ACCOUNT_EMAIL:generateAccessToken \ -H "Content-Type: text/json; charset=utf-8" \ -H "Authorization: Bearer $STS_TOKEN" \ -d @- <<EOF | jq -r .accessToken { "scope": [ "https://www.googleapis.com/auth/cloud-platform" ] } EOF ) echo $TOKEN
PowerShell
$Token = (Invoke-RestMethod ` -Method POST ` -Uri "https://iamcredentials.googleapis.com/v1/projects/-/serviceAccounts/SERVICE_ACCOUNT_EMAIL:generateAccessToken" ` -Headers @{ "Authorization" = "Bearer $StsToken" } ` -ContentType "application/json" ` -Body (@{ "scope" = , "https://www.googleapis.com/auth/cloud-platform" } | ConvertTo-Json)).accessToken Write-Host $Token
Substitua o seguinte:
-
SERVICE_ACCOUNT_EMAIL
: o endereço de email da conta de serviço.
O que se segue?
- Leia mais sobre a federação de identidades da carga de trabalho.
- Saiba mais acerca das práticas recomendadas para usar a Workload Identity Federation.
- Veja como pode gerir Workload Identity Pools e fornecedores.
Exceto em caso de indicação contrária, o conteúdo desta página é licenciado de acordo com a Licença de atribuição 4.0 do Creative Commons, e as amostras de código são licenciadas de acordo com a Licença Apache 2.0. Para mais detalhes, consulte as políticas do site do Google Developers. Java é uma marca registrada da Oracle e/ou afiliadas.
Última atualização 2025-08-20 UTC.
[[["Fácil de entender","easyToUnderstand","thumb-up"],["Meu problema foi resolvido","solvedMyProblem","thumb-up"],["Outro","otherUp","thumb-up"]],[["Não contém as informações de que eu preciso","missingTheInformationINeed","thumb-down"],["Muito complicado / etapas demais","tooComplicatedTooManySteps","thumb-down"],["Desatualizado","outOfDate","thumb-down"],["Problema na tradução","translationIssue","thumb-down"],["Problema com as amostras / o código","samplesCodeIssue","thumb-down"],["Outro","otherDown","thumb-down"]],["Última atualização 2025-08-20 UTC."],[[["\u003cp\u003eWorkload Identity Federation allows AWS and Azure workloads to authenticate to Google Cloud without using a service account key.\u003c/p\u003e\n"],["\u003cp\u003eAWS EC2 instances and Azure VMs can use their respective environment-specific credentials, such as instance profiles and managed identities, to obtain short-lived Google Cloud Security Token Service tokens.\u003c/p\u003e\n"],["\u003cp\u003eBy configuring Workload Identity Federation, you can enable workloads to exchange these environment-specific credentials for short-lived Google Cloud credentials, granting them access to Google Cloud APIs.\u003c/p\u003e\n"],["\u003cp\u003eSetting up Workload Identity Federation involves creating a workload identity pool and provider, mapping attributes from external credentials, and defining conditions to control access.\u003c/p\u003e\n"],["\u003cp\u003eYou can grant federated identities direct resource access on Google Cloud or use service account impersonation, with proper roles and permissions, depending on the needs of the application.\u003c/p\u003e\n"]]],[],null,[]]