Neste guia, descrevemos como usar credenciais emitidas por um provedor de identidade externo para personificar uma conta de serviço e acessar recursos no Google Cloud. Esse processo é chamado de federação de identidades de carga de trabalho
Os casos de uso comuns da federação de identidade da carga de trabalho incluem:
- Permitir um aplicativo em segundo plano ou um pipeline de integração/entrega contínua (CI/CD) executado fora do Google Cloud para acessar recursos e APIs do Google Cloud
- Permitir que usuários de um aplicativo da Web executado fora do Google Cloud acessem dados armazenados em um serviço do Google Cloud, como o Cloud Storage ou o BigQuery
Para usar a federação de identidade da carga de trabalho, configure o Google Cloud para confiar em um provedor de identidade externo, como Amazon Web Services (AWS), Azure Active Directory (AD), um provedor de identidade compatível com OIDC ou um provedor de identidade compatível com SAML 2.0. Os aplicativos podem usar credenciais emitidas pelo provedor de identidade externo para personificar uma conta de serviço seguindo estas etapas:
- Consiga uma credencial do provedor de identidade confiável.
- Troque a credencial por um token do Security Token Service.
- Use o token do Security Token Service para personificar uma conta de serviço e receber um token de acesso de curta duração do Google.
Ao usar a federação de identidade da carga de trabalho, é possível evitar a necessidade de armazenar e gerenciar as chaves da conta de serviço.
Antes de começar
-
Ative as APIs IAM, Resource Manager, Service Account Credentials, and Security Token Service.
Funções exigidas
Para receber as permissões necessárias para configurar a federação de identidade da carga de trabalho, peça ao administrador para conceder a você os seguintes papéis do IAM no projeto:
- Administrador de pool de Identidade da carga de trabalho (
roles/iam.workloadIdentityPoolAdmin
) - Administrador da conta de serviço (
roles/iam.serviceAccountAdmin
)
Para mais informações sobre como conceder papéis, consulte Gerenciar o acesso.
Como alternativa, o papel básico de Proprietário do IAM (roles/owner
) também inclui permissões para configurar a federação de identidade.
Não conceda papéis básicos em um ambiente de produção, recomendamos que você faça isso em um
ambiente de desenvolvimento ou teste.
Como preparar o provedor de identidade externo
Para usar a federação de identidade da carga de trabalho, configure um pool de identidades de carga de trabalho e um provedor de pools de identidades de carga de trabalho no seu projeto.
AWS
Os usuários da AWS e os papéis da AWS podem usar uma credencial de segurança permanente ou temporária da AWS para personificar uma conta de serviço no Google Cloud.
Para permitir o uso de credenciais de segurança da AWS, configure o pool de identidade da carga de trabalho para confiar na sua conta da AWS. Os tokens de credenciais de segurança emitidos para essa conta da AWS são reconhecidos pela federação de identidade da carga de trabalho. É possível usar os tokens para receber credenciais de conta de serviço de curta duração.
Azure
Os usuários e principais de serviços do Azure podem usar tokens de acesso do Azure AD para personificar uma conta de serviço no Google Cloud.
Para permitir o uso de tokens de acesso do Azure AD, configure o pool de identidades da carga de trabalho para confiar em um aplicativo do Azure AD. Os tokens de acesso emitidos para esse aplicativo são reconhecidos pela federação de identidade da carga de trabalho. Use-os para receber credenciais de conta de serviço de curta duração.
Como prática recomendada, crie um novo aplicativo no Azure AD e use-o apenas para receber credenciais do Google Cloud:
Defina o URI do ID do aplicativo.
Ao definir o URI do ID do aplicativo, o padrão será api://<appid>. Observe o URI, porque você precisará dele mais tarde ao criar o provedor do pool de identidades da carga de trabalho e o arquivo de configuração da credencial.
Você precisará do URI do ID do aplicativo mais tarde, quando configurar o provedor de pools de Identidade da carga de trabalho.
Para permitir que um aplicativo consiga tokens de acesso para o aplicativo Azure AD, use as identidades gerenciadas:
Crie uma identidade gerenciada. Anote o ID do objeto da identidade gerenciada. Você precisará dele posteriormente ao configurar a representação.
Atribua a identidade gerenciada a uma máquina virtual ou a outro recurso que execute o aplicativo.
Ações do GitHub
É possível permitir que um fluxo de trabalho de ações do GitHub use um token OIDC do GitHub para personificar uma conta de serviço no Google Cloud.
Para permitir o uso desses tokens, configure o pool de identidades da carga de trabalho para confiar nos tokens OIDC emitidos pelo GitHub. Os tokens de ID emitidos para os fluxos de trabalho são reconhecidos pela federação de identidade da carga de trabalho, e você pode usar os tokens para receber credenciais de conta de serviço de curta duração.
OIDC
É possível permitir que usuários e aplicativos personifiquem uma conta de serviço no Google Cloud usando tokens de ID ou acesso no formato JSON Web Token . token emitido por um provedor de identidade compatível com OIDC.
Para permitir o uso desses tokens, configure o pool de identidades da carga de trabalho para confiar no provedor de identidade externo. Os tokens emitidos pelo provedor de identidade externo são reconhecidos pela federação de identidade da carga de trabalho. É possível usar os tokens para receber credenciais de conta de serviço de curta duração.
Para usar a federação de identidade da carga de trabalho, o URI de metadados OIDC
do provedor de identidade precisa ser acessível publicamente pela Internet e usar o endpoint
ISSUER/.well-known/openid-configuration
,
em queISSUER
é o valor da declaração de emissor (iss
)
no token. O Google consulta o endpoint
de metadados para receber o conjunto de chaves da Web JSON (JWKS) do seu provedor e usa esse conjunto
de chaves para validar os tokens.
Normalmente, é melhor usar tokens de ID ao realizar uma troca de tokens, porque eles refletem a identidade do usuário. Se decidir usar tokens de acesso, configure um aplicativo ou recurso dedicado no seu provedor de identidade com a única finalidade de receber credenciais do Google Cloud.
Por padrão, a federação de identidade da carga de trabalho espera tokens que usam o seguinte
URL como declaração de público-alvo (aud
):
https://iam.googleapis.com/projects/PROJECT_NUMBER/locations/global/workloadIdentityPools/POOL_ID/providers/PROVIDER_ID
Substitua:
PROJECT_NUMBER
: número do projeto do Google Cloud que você usa para criar o pool de identidades da carga de trabalho;POOL_ID
: ID de sua escolha que identifica o pool de identidades da carga de trabalho. É necessário usar o mesmo ID ao criar o pool de identidades da carga de trabalho posteriormente.PROVIDER_ID
: ID de sua escolha que identifica o provedor de pools de identidades de cargas de trabalho. É necessário usar o mesmo ID ao criar o provedor do pool de identidades de carga de trabalho posteriormente.
É possível especificar uma lista personalizada de públicos-alvo permitidos ao criar o pool de identidades e o provedor de carga de trabalho.
OIDC (AD FS)
Os usuários do Active Directory podem usar tokens de acesso do OIDC dos Serviços de federação do Active Directory (AD FS, na sigla em inglês) para personificar uma conta de serviço no Google Cloud.
Para permitir que um aplicativo solicite tokens de acesso do AD FS e use esses tokens para acessar o Google Cloud, você precisa de dois registros de aplicativos no AD FS:
Um registro de aplicativo do tipo aplicativo nativo ou aplicativo de servidor.
Um registro de aplicativo do tipo API da Web que corresponda a um provedor de pool de identidades da carga de trabalho no Google Cloud.
Em seguida, configure um provedor de identidades da carga de trabalho para aceitar tokens de acesso emitidos para a API da Web.
Como usar a Autenticação integrada do Windows
É possível combinar a federação de identidade da carga de trabalho com a Autenticação integrada do Windows (IWA). A IWA permite que os aplicativos do Active Directory façam autenticação no AD FS usando credenciais do Kerberos ou NTLM. Ao combinar a federação de identidade da carga de trabalho e a IWA, você evita armazenar e gerenciar credenciais de clientes e chaves da conta de serviço do AD FS.
Para usar a IWA, verifique se estes requisitos foram atendidos:
- O aplicativo usa uma biblioteca HTTP com suporte para a IWA.
- Você configurou o AD FS para permitir a Autenticação do Windows e usar o nome principal do serviço correto.
- Você configurou a proteção estendida para autenticação para que seja compatível com sua implantação do AD FS.
- Você ativou a IWA para o user agent que o aplicativo usa em solicitações HTTP.
Como registrar o aplicativo cliente
Para registrar um aplicativo no AD FS para o Windows Server 2019, faça o seguinte:
- Abra o snap-in de MMC do AD FS e acesse Grupos de aplicativos.
- Clique em Adicionar grupo de aplicativos.
- Na página de Boas-vindas, insira um nome para o cliente e selecione aplicativo de servidor. Depois, clique em Avançar.
- Na página do aplicativo de servidor, insira um identificador de cliente (ID do cliente) e
um URI de redirecionamento. Se você vai usar apenas o tipo de concessão
client_credentials
, o URI de redirecionamento não será usado, e é possível usar um URI comohttp://localhost/
. Depois, clique em Avançar. - Na página de configuração de credenciais do aplicativo, escolha como o cliente vai ser autenticado. Para usar a IWA, defina a Autenticação integrada do Windows como ativada e selecione o usuário do domínio em que seu aplicativo está configurado para ser executado. Depois, clique em Avançar.
- Na página Resumo, revise as configurações e clique em Avançar.
- Clique em Fechar para dispensar a caixa de diálogo.
Como criar um aplicativo de API da Web para o pool de federação de identidade da carga de trabalho
Crie outro registro de aplicativo do tipo API da Web. Esse aplicativo corresponde a um provedor de pool de identidades da carga de trabalho, que pode ser usado para configurar uma relação de confiança com o Google Cloud.
Para criar o aplicativo no AD FS para o Windows Server 2019, faça o seguinte:
- Abra o snap-in de MMC do AD FS e acesse Grupos de aplicativos.
- Clique em Adicionar grupo de aplicativos.
- Na página de Boas-vindas, insira um nome como
Workload Identity Federation (test environment)
e selecione API da Web. Depois, clique em Avançar. Na página Configurar API da Web, insira um identificador da parte confiável para essa API.
Em vez de personalizar um identificador da parte confiável, use o seguinte URI como identificador da parte confiável:
https://iam.googleapis.com/projects/PROJECT_NUMBER/locations/global/workloadIdentityPools/POOL_ID/providers/PROVIDER_ID
Substitua os seguintes valores:
PROJECT_NUMBER
: número do projeto do Google Cloud que você usa para criar o pool de identidades da carga de trabalho.POOL_ID
: ID de sua escolha que identifica o pool de identidades da carga de trabalho. É necessário usar o mesmo ID ao criar o pool de identidades da carga de trabalho posteriormente.PROVIDER_ID
: ID de sua escolha que identifica o provedor de pools de Identidades de cargas de trabalho; É necessário usar o mesmo ID ao criar o provedor do pool de identidades de carga de trabalho posteriormente.
Esse formato garante que o identificador da parte confiável identifique exclusivamente um provedor de pool de identidades da carga de trabalho.
Você vai precisar do identificador da parte confiável mais adiante ao configurar o provedor de pool de identidades da carga de trabalho.
Clique em Próxima.
Na página Aplicar política de controle de acesso, selecione uma política de acesso apropriada e clique em Avançar.
Na página Configurar permissões do aplicativo, adicione o aplicativo cliente que você criou. Depois clique em Next.
Na página Resumo, revise as configurações e clique em Avançar.
Clique em Fechar para dispensar a caixa de diálogo.
SAML
É possível permitir que usuários e aplicativos personifiquem uma conta de serviço no Google Cloud usando declarações emitidas por um provedor de identidade compatível com SAML 2.0. A federação que usa declarações criptografadas não é compatível.
Configure seu provedor de identidade SAML para emitir declarações com o provedor de pools
de identidades de carga de trabalho como público-alvo no formato
https://iam.googleapis.com/projects/PROJECT_NUMBER/locations/global/workloadIdentityPools/POOL_ID/providers/PROVIDER_ID
.
Para permitir o uso dessas declarações, configure o pool de identidades da carga de trabalho para confiar no seu provedor de identidade externo, fornecendo o documento de metadados do seu provedor de identidade SAML.
A federação de identidade da carga de trabalho reconhece as declarações emitidas pelo provedor de identidade externo e é possível usar os tokens para receber credenciais de conta de serviço de curta duração.
SAML (AD FS)
É possível permitir que aplicativos representem uma conta de serviço no Google Cloud usando uma declaração SAML 2.0 pelo Active Directory Federation Services (AD FS).
Para permitir que os aplicativos solicitem uma declaração SAML do AD FS que possa ser usada para a federação de identidade da carga de trabalho, você precisa criar uma relação de confiança com terceira parte confiável. Para criar uma relação de confiança com terceira parte confiável no AD FS para o Windows Server 2019:
- Abra o snap-in do MMC do AD FS e navegue até Relação de confiança com terceira parte confiável.
- Clique em Adicionar relação de confiança com terceira parte confiável.
- Na página de Boas-vindas do assistente Adicionar relação de confiança com terceira parte confiável, selecione Claimsaware e clique em Iniciar.
- Na página Selecionar a fonte de dados selecioneInserir dados sobre a terceira parte confiável manualmente. Depois, clique em Avançar.
- Na página Especificar nome de exibição, digite um nome para a relação de confiança. Depois clique em Next.
- Na página Configurar certificado, clique em Avançar. Não é necessário um certificado de criptografia porque a federação de identidade da carga de trabalho não suporta declarações SAML criptografadas.
- Na página Configurar URL, mantenha as configurações padrão e clique em Avançar.
Na página Configurar identificadores, insira um identificador de terceira parte confiável.
Em vez de personalizar um identificador da parte confiável, use o seguinte URI como identificador da parte confiável:
https://iam.googleapis.com/projects/PROJECT_NUMBER/locations/global/workloadIdentityPools/POOL_ID/providers/PROVIDER_ID
Substitua:
PROJECT_NUMBER
: número do projeto do Google Cloud que você usa para criar o pool de identidades da carga de trabalho.POOL_ID
: ID de sua escolha que identifica o pool de identidades da carga de trabalho. É necessário usar o mesmo ID ao criar o pool de identidades da carga de trabalho posteriormente.PROVIDER_ID
: ID de sua escolha que identifica o provedor de pools de Identidades de cargas de trabalho; É necessário usar o mesmo ID ao criar o provedor do pool de identidades de carga de trabalho posteriormente.
Esse formato garante que o identificador da parte confiável identifique exclusivamente um provedor de pool de identidades da carga de trabalho.
Você vai precisar do identificador da parte confiável mais adiante ao configurar o provedor de pool de identidades da carga de trabalho.
Clique em Próxima.
Na página Escolher política de controle de acesso, selecione uma política de controle de acesso apropriada e clique em Avançar.
Na página Ready to add trust, revise as configurações e clique em Avançar.
Na página Concluir, clique em Fechar para dispensar a caixa de diálogo.
Para serem compatíveis com a federação de identidade da carga de trabalho, as declarações SAML precisam
conter pelo menos uma reivindicação
que identifique o usuário do Active Directory de maneira exclusiva. Normalmente, usa-se
a reivindicação ID de nome para essa finalidade, que corresponde ao valor do
elemento NameID
na declaração SAML.
Para personalizar o conjunto de declarações da asserção SAML, é necessário editar a política de emissão de reivindicações da relação de confiança com terceira parte confiável. Para editar a política de emissão de reivindicações, faça o seguinte:
- Na lista de relações de confiança com terceira parte confiável, selecione a confiança que você acabou de criar e clique em Editar política de emissão de declarações.
- Clique em Adicionar regra.
- Na página Escolher tipo de regra do assistente Adicionar regra de reivindicação de transformação, selecione Transformar uma reivindicação de entrada. Depois, clique em Avançar.
Na página Configurar regra de declaração, defina as seguintes configurações:
- Nome da regra de reivindicação:
Name Identifier
. - Tipo de reivindicação de entrada: selecione SID principal, UPN ou outra reivindicação para identificar o sujeito de forma exclusiva.
- Tipo de reivindicação de saída: ID de nome.
- Formato de ID de nome de saída: Não especificado.
- Nome da regra de reivindicação:
Selecione Passar por todos os valores de reivindicação e clique em Concluir.
Você também pode configurar regras adicionais para incluir mais atributos nas declarações SAML.
Clique em OK para fechar a caixa de diálogo da política de emissão de reivindicações.
Como configurar a federação
Para fazer a federação com o provedor de identidade externo, faça o seguinte:
- Prepare um projeto do Google Cloud que contenha o pool de identidades e o provedor da carga de trabalho.
- Defina um mapeamento de atributo e uma condição opcional que mapeie as credenciais do provedor de identidade para identidades externas.
- Crie um pool de identidades e um provedor de carga de trabalho
As seções a seguir orientam você nesse processo.
Preparar o projeto
Selecione e prepare o projeto que conterá o pool de identidades e o provedor da carga de trabalho:
Verifique se você tem os papéis Administrador de pool de Identidade da carga de trabalho (
roles/iam.workloadIdentityPoolAdmin
) e Administrador da conta de serviço (roles/iam.serviceAccountAdmin
) no projeto.Como alternativa, o papel básico de Proprietário do IAM (
roles/owner
) também inclui permissões para configurar a federação de identidade. Não conceda papéis básicos em um ambiente de produção. No entanto, é possível concedê-los em um ambiente de desenvolvimento ou teste.Atualize a política da organização para permitir a federação.
Ative as APIs IAM, Resource Manager, Service Account Credentials, and Security Token Service (STS).
Definir um mapeamento e uma condição de atributo
Defina um mapeamento de atributo e uma condição opcional que mapeie as credenciais do provedor de identidade para identidades externas.
As credenciais emitidas pelo provedor de identidade externo contêm um ou mais
atributos, também chamados de declarações. A federação de identidade da carga de trabalho se refere a
esses
atributos como atributos de declaração e utiliza prefixos com assertion.
neles.
Um mapeamento de atributos permite mapear os atributos de declaração para os atributos de destino predefinidos reconhecidos pela federação de identidade da carga de trabalho. Estes atributos predefinidos de destino são:
Atributo | Descrição |
---|---|
google.subject |
Obrigatório. Um identificador exclusivo do usuário. Esse atributo é usado nas vinculações de papéis principal://
do IAM e aparece nos registros do Cloud Logging.
O valor precisa ser exclusivo e não pode exceder 127 caracteres.
|
google.groups |
Opcional. Um conjunto de grupos ao qual a identidade pertence. Esse atributo é usado nas vinculações de papéis principalSet://
do IAM para conceder acesso a todos os membros de um grupo.
|
attribute.NAME |
Opcional. É possível definir até 50 atributos personalizados e usar esses
atributos nas vinculações de papéis principalSet:// do IAM para conceder acesso a
todas as identidades com um determinado atributo.
|
Um mapeamento de atributo tem o formato TARGET_ATTRIBUTE=SOURCE_EXPRESSION
.
Veja os exemplos a seguir:
Esse mapeamento atribui o atributo
sub
da declaração agoogle.subject
:google.subject=assertion.sub
Esse mapeamento usa uma expressão de Common Expression Language (CEL) para concatenar vários atributos de declaração:
google.subject="myprovider::" + assertion.aud + "::" + assertion.sub
Esse mapeamento usa outra expressão CEL para mapear um atributo de declaração com valor de GUID
workload_id
para um nome e atribui o resultado a um atributo personalizado chamadoattribute.my_display_name
:attribute.my_display_name={ "8bb39bdb-1cc5-4447-b7db-a19e920eb111": "Workload1", "55d36609-9bcf-48e0-a366-a3cf19027d2a": "Workload2" }[assertion.workload_id]
Esse mapeamento usa operadores e funções lógicos CEL para definir um atributo personalizado chamado
attribute.environment
comoprod
outest
, dependendo do Nome do Recurso da Amazon da identidade (RAN):attribute.environment=assertion.arn.contains(":instance-profile/Production") ? "prod" : "test"
Esse mapeamento usa a função
extract
para preencher um atributo personalizadoaws_role
com o nome do papel presumido ou, se nenhum papel tiver sido presumido, com o da identidade ARNattribute.aws_role=assertion.arn.contains('assumed-role') ? assertion.arn.extract('{account_arn}assumed-role/') + 'assumed-role/' + assertion.arn.extract('assumed-role/{role_name}/') : assertion.arn
Também é possível definir uma condição de atributo. As condições do atributo
são expressões CEL que podem verificar atributos de declaração e atributos de destino.
Se a condição do atributo for avaliada como true
para uma determinada credencial, a
credencial será aceita. Caso contrário, a credencial será rejeitada.
Para escolher os mapeamentos e condições de atributos certos para seu caso de uso, você precisa decidir se mapear as identidades de serviço ou as identidades de usuários:
- Ao mapear as identidades de serviço, é possível ativar um aplicativo em segundo plano ou um pipeline de CI/CD que seja executado fora do Google Cloud para receber credenciais de curta duração para o Google Cloud. O aplicativo recebe essas credenciais de curta duração em seu próprio nome, sem o envolvimento do usuário.
- Ao mapear as identidades dos usuários, é possível permitir que os usuários de um aplicativo executado fora do Google Cloud recebam credenciais de curta duração para o Google Cloud. O aplicativo recebe essas credenciais de curta duração em nome do usuário.
Como mapear identidades de serviço
AWS
Os mapeamentos de atributos podem usar os
campos de resposta para GetCallerIdentity
como atributos de origem. Esses campos incluem:
account
, que contém o número da conta da AWS.arn
, contendo o ARN da AWS da entidade externa.userid
, contendo o identificador exclusivo da entidade autora de chamadas.
Se o aplicativo for executado em uma instância do Amazon Elastic Compute Cloud (EC2) com um papel anexado, use o seguinte mapeamento de atributo:
google.subject=assertion.arn attribute.aws_role=assertion.arn.contains('assumed-role') ? assertion.arn.extract('{account_arn}assumed-role/') + 'assumed-role/' + assertion.arn.extract('assumed-role/{role_name}/') : assertion.arn
Esse mapeamento permite conceder a capacidade de personificar uma conta de serviço para instâncias específicas do EC2 ou por papel usando os seguintes identificadores:
Conceda acesso a uma instância específica do EC2:
principal://iam.googleapis.com/projects/PROJECT_NUMBER/locations/global/workloadIdentityPools/POOL_ID/subject/arn:aws:sts::ACCOUNT_ID:assumed-role/AWS_ROLE/AWS_ROLE_SESSION_NAME
Conceda acesso por papel:
principalSet://iam.googleapis.com/projects/PROJECT_NUMBER/locations/global/workloadIdentityPools/POOL_ID/attribute.aws_role/arn:aws:sts::ACCOUNT_ID:assumed-role/AWS_ROLE
Sua conta da AWS pode conter um grande número de usuários e papéis, mas apenas um pequeno subconjunto deles pode exigir acesso a recursos do Google Cloud. Para limitar o conjunto de usuários e papéis que podem usar a federação de identidade da carga de trabalho, use uma condição de atributo. Por exemplo, a condição a seguir permite que uma conta específica acesse recursos do Google Cloud:
assertion.arn.startsWith('arn:aws:sts::ACCOUNT-ID:assumed-role/')
Azure
Os mapeamentos de atributos podem usar as declarações incorporadas aos tokens de acesso do Azure, incluindo declarações personalizadas, como atributos de origem.
Para ver uma lista completa das declarações que você pode referenciar, conecte-se a uma VM do Azure que tenha uma identidade gerenciada atribuída e faça o seguinte:
Consiga um token de acesso do Serviço de metadados de instância do Azure (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
Esse comando usa a ferramenta
jq
.jq
está disponível por padrã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 do aplicativo que você configurou para a federação de identidade da carga de trabalho.Em um navegador da Web, acesse
https://jwt.ms/
e cole o token de acesso na caixa de texto.Clique em Reivindicações para ver a lista de reivindicações incorporadas no token de acesso.
Para autenticar com um principal de serviço, use o seguinte mapeamento de atributos:
google.subject=assertion.sub
Para um token de acesso emitido para uma identidade gerenciada, a declaração sub
contém o ID do objeto da identidade gerenciada. Se você usar uma declaração diferente, verifique se ela é exclusiva e não pode ser reatribuída.
Para identidades de serviço, geralmente não é necessário criar um mapeamento
para google.groups
ou qualquer atributo personalizado.
Para controlar quais identidades podem receber credenciais de curta duração para o Google Cloud, não defina condições de atributos. Em vez disso, configure o aplicativo Azure AD para usar atribuições de papel de app.
Ações do GitHub
Os mapeamentos de atributos podem usar as declarações incorporadas no token OIDC como atributos de origem. São elas:
sub
: contém o nome do repositório e a referência do Git, por exemplo,repo:username/reponame:ref:refs/heads/master
.repository
: contém o nome do proprietário e do repositório, por exemplo,username/reponame
.repository_owner
: contém o proprietário, que pode ser um nome de usuário ou o nome de uma organização do GitHub.ref
: contém a referência do Git, por exemplo,refs/heads/main
.
O mapeamento de atributos a seguir define google.subject
na declaração sub
do token OIDC do GitHub Actions. Como a declaração sub
contém
o nome do repositório e a referência do Git, esse mapeamento permite controlar o acesso
por repositório e ramificação:
google.subject=assertion.sub
O controle de acesso por repositório e branch pode ser útil se determinados branches
(por exemplo, main
) precisarem de acesso diferente aos recursos de outros
branches, por exemplo, branches de recursos.
Se você não planeja diferenciar o acesso por branch, use o mapeamento de atributo
a seguir, que define google.subject
como a declaração repository
:
google.subject=assertion.repository
Opcionalmente, é possível usar uma condição de atributo para definir requisitos adicionais
que os tokens de ID precisem atender. Por exemplo, a condição a seguir limita o acesso
a tokens de ID para fluxos de trabalho que usam a ramificação Git main
:
assertion.ref=='refs/heads/main'
OIDC
Os mapeamentos de atributos podem usar as declarações incorporadas no token de ID ou de acesso emitido pelo provedor de identidade externo.
Mapeie uma dessas declarações para google.subject
para identificar exclusivamente o usuário. Para se proteger contra ameaças de spoofing, escolha uma reivindicação com um valor exclusivo que não possa ser alterado.
Muitos provedores de identidade preenchem a declaração sub
com um ID exclusivo e
imutável. Para esses provedores de identidade, considere mapear a declaração sub
para
google.subject
:
google.subject=assertion.sub
Evite usar uma reivindicação como email
para essa finalidade. Geralmente, os endereços de e-mail
podem ser reatribuídos ou alterados para que não identifiquem um usuário de maneira exclusiva
e permanente.
Seu provedor de identidade pode conter um grande número de usuários, mas apenas um pequeno subconjunto deles pode exigir acesso a recursos do Google Cloud. Para limitar o conjunto de usuários e credenciais que podem usar a federação de identidade da carga de trabalho, é possível usar uma condição de atributo.
Por exemplo, a condição a seguir restringe o acesso a tokens que
contêm uma declaração service_account
personalizada com um valor true
:
assertion.service_account==true
OIDC (AD FS)
Os mapeamentos de atributos podem usar as declarações incorporadas aos tokens de acesso do AD FS como atributos de origem.
Para autenticar um aplicativo, use o seguinte mapeamento de atributos:
google.subject=assertion.appid
Esse mapeamento define google.subject
como o valor da declaração appid
, que
contém o ID do cliente do aplicativo do AD FS.
Outra opção é usar uma condição de atributo para definir requisitos adicionais que os tokens de acesso do AD FS precisam atender. Por exemplo, a condição a seguir define que os aplicativos precisam usar IWA para fazer autenticação no AD FS:
assertion.authmethod=='http://schemas.microsoft.com/ws/2008/06/identity/authenticationmethod/windows'
Para controlar a lista de aplicativos que podem conseguir credenciais de curta duração para o Google Cloud, não defina condições de atributos. Em vez disso, use permissões de cliente no AD FS para definir quais aplicativos são permitidos.
SAML
Os mapeamentos de atributos podem usar os elementos <Subject>
e <Attribute>
incorporados à declaração emitida pelo provedor de identidade externo. Os
atributos SAML podem ser referenciados usando as seguintes palavras-chave:
assertion.subject
contém oNameID
do usuário autenticado encontrado no elemento<Subject>
.assertion.attributes['ATTRIBUTE_NAME']
contém uma lista de valores com o nome<Attribute>
.
Mapeie uma dessas declarações para google.subject
para identificar
exclusivamente o usuário. Para se proteger contra ameaças de spoofing, escolha uma reivindicação com
um valor exclusivo que não possa ser alterado.
Muitos provedores de identidade preenchem a NameId
com um ID exclusivo
e imutável. Para esses provedores de identidade, considere mapear o
atributo NameId
para google.subject
:
google.subject=assertion.subject
Evite usar um atributo como
http://schemas.xmlsoap.org/ws/2005/05/identity/claims/emailaddress
para essa finalidade. Geralmente, os endereços de e-mail podem ser reatribuídos ou alterados para que
não identifiquem um usuário de maneira exclusiva
e permanente.
Seu provedor de identidade pode conter um grande número de usuários, mas apenas um pequeno subconjunto deles pode exigir acesso a recursos do Google Cloud. Para limitar o conjunto de usuários e credenciais que podem usar a federação de identidade da carga de trabalho, é possível usar uma condição de atributo.
Por exemplo, a condição a seguir restringe o acesso a declarações que
contenham um atributo https://example.com/SAML/Attributes/AllowGcpFederation
personalizado com um valor true
:
assertion.attributes['https://idp.com/SAML/Attributes/AllowGcpFederation'][0]=='true'
SAML (AD FS)
Os mapeamentos de atributos podem usar as reivindicações incorporadas na declaração emitida pelo AD FS, conforme descrito anteriormente neste guia.
Use o seguinte mapeamento para permitir que a federação de identidade da carga de trabalho use a reivindicação ID de nome pela declaração SAML para identificar o usuário de forma exclusiva:
google.subject=assertion.subject
Se você configurou a política de emissão de reivindicação para incluir declarações adicionais em declarações SAML, será possível adicionar outros mapeamentos. Exemplo:
google.groups=assertion.attributes['http://schemas.microsoft.com/ws/2008/06/identity/claims/groupsid'] attribute.userip=['http://schemas.microsoft.com/2014/09/requestcontext/claims/userip'][0]
Também é possível usar uma condição de atributo a que todas as declarações SAML precisam atender. Por exemplo, a condição a seguir permite apenas declarações SAML que incluam uma determinada reivindicação de associação a grupo:
"S-1-5-6" in google.groups
Crie um pool de identidades e um provedor de carga de trabalho
Coletamos todas as informações necessárias para criar um pool de identidades e um provedor de carga de trabalho:
Console
No Console do Google Cloud, acesse a página Novo provedor de carga de trabalho e pool.
Em Criar um pool de identidades, digite o seguinte:
- Nome: o nome do pool. O nome também é usado como o ID do pool. Não será possível alterar o ID do pool posteriormente.
- Descrição: texto que descreve a finalidade do pool.
Clique em Continuar.
Na lista suspensa Selecionar um provedor, escolha seu provedor:
- AWS se você estiver federando com o AWS.
- OpenID Connect (OIDC) se estiver federando com o Azure, o GitHub Actions ou outro provedor compatível com OIDC.
- Não é possível configurar a federação de identidade da carga de trabalho em um provedor de identidade SAML 2.0 usando o Console do Google Cloud. Use a CLI gcloud para configurar a federação de identidade da carga de trabalho de um provedor de identidade SAML 2.0.
Em Detalhes do provedor, insira os detalhes do seu provedor de identidade:
AWS
- Nome do provedor: nome do provedor. O nome também é usado como o ID do provedor. Não será possível alterar o ID depois.
Azure
- Nome do provedor: nome do provedor. O nome também é usado como o ID do provedor. Não será possível alterar o ID depois.
- URL do emissor:
https://sts.windows.net/TENANT_ID
, em queTENANT_ID
é o ID do locatário (GUID, na sigla em inglês) do locatário do Azure AD. - Públicos-alvo permitidos: o URI do ID do aplicativo que você usou quando registrou o aplicativo no Azure AD.
Ações do GitHub
- Nome do provedor: nome do provedor. O nome também é usado como o ID do provedor. Não será possível alterar o ID depois.
- URL do emissor:
https://token.actions.githubusercontent.com/
OIDC
- Nome do provedor: nome do provedor. O nome também é usado como o ID do provedor. Não será possível alterar o ID depois.
- URL do emissor: URL do emissor do provedor de identidade.
- Públicos-alvo permitidos: público-alvo esperado dos tokens de ID.
OIDC (AD FS)
- Nome do provedor: nome do provedor. O nome também é usado como o ID do provedor. Não será possível alterar o ID depois.
- URL do emissor:
https://ADFS_DOMAIN/adfs
, em queADFS_DOMAIN
é o nome do domínio público do servidor ou farm do AD FS.
Clique em Continuar.
Em Configurar atributos do provedor, adicione os mapeamentos de atributos identificados anteriormente.
Em Condições de atributo, digite a condição do atributo que você identificou anteriormente. Deixe o campo em branco se não houver uma condição de atributo.
Clique em Salvar para criar o pool de identidades e o provedor da carga de trabalho.
gcloud
Crie um novo pool de identidades de carga de trabalho:
gcloud iam workload-identity-pools create POOL_ID \ --location="global" \ --description="DESCRIPTION" \ --display-name="DISPLAY_NAME"
Substitua os seguintes valores:
POOL_ID
: o ID exclusivo do pool.DISPLAY_NAME
: nome do pool.DESCRIPTION
: descrição do pool; Essa descrição aparece ao conceder acesso às identidades do pool.
Adicione um provedor de pool de identidades de carga de trabalho:
AWS
gcloud iam workload-identity-pools providers create-aws PROVIDER_ID \ --location="global" \ --workload-identity-pool="POOL_ID" \ --account-id="AWS_ACCOUNT_ID" \ --attribute-mapping="MAPPINGS" \ --attribute-condition="CONDITIONS"
Substitua os seguintes valores:
PROVIDER_ID
: o ID exclusivo do provedor.POOL_ID
: ID do pool.AWS_ACCOUNT_ID
: número de 12 dígitos que identifica sua conta da AWS.MAPPINGS
: lista separada por vírgulas de mapeamentos de atributos identificados anteriormente.CONDITIONS
: condição de atributo que você identificou anteriormente. Remova o parâmetro se você 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"
Azure
gcloud iam workload-identity-pools providers create-oidc PROVIDER_ID \ --location="global" \ --workload-identity-pool="POOL_ID" \ --issuer-uri="
https://sts.windows.net/TENANT_ID
" \ --allowed-audiences="APPLICATION_ID_URI" \ --attribute-mapping="MAPPINGS" \ --attribute-condition="CONDITIONS"Substitua os seguintes valores:
PROVIDER_ID
: o ID exclusivo do provedor.POOL_ID
: ID do pool.TENANT_ID
: ID do locatário (GUID) do locatário do Azure AD.APPLICATION_ID_URI
: URI do ID do aplicativo que você usou quando registrou o aplicativo no Azure AD.MAPPINGS
: lista separada por vírgulas de mapeamentos de atributos identificados anteriormente.CONDITIONS
: condição de atributo que você identificou anteriormente. Remova o parâmetro se você não tiver uma condição de atributo.
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"
Ações do GitHub
gcloud iam workload-identity-pools providers create-oidc PROVIDER_ID \ --location="global" \ --workload-identity-pool="POOL_ID" \ --issuer-uri="https://token.actions.githubusercontent.com/" \ --attribute-mapping="MAPPINGS" \ --attribute-condition="CONDITIONS"
Substitua os seguintes valores:
PROVIDER_ID
: o ID exclusivo do provedor.POOL_ID
: ID do pool.OWNER
: nome do usuário ou da organização que é o proprietário do repositório.REPOSITORY
: nome do repositório.MAPPINGS
: lista separada por vírgulas de mapeamentos de atributos identificados anteriormente.CONDITIONS
: condição de atributo que você identificou anteriormente. Remova o parâmetro se você não tiver uma condição de atributo.
OIDC
gcloud iam workload-identity-pools providers create-oidc PROVIDER_ID \ --location="global" \ --workload-identity-pool="POOL_ID" \ --issuer-uri="ISSUER" \ --allowed-audiences="AUDIENCE" \ --attribute-mapping="MAPPINGS" \ --attribute-condition="CONDITIONS"
Substitua os seguintes valores:
PROVIDER_ID
: o ID exclusivo do provedor.POOL_ID
: ID do pool.ISSUER
: URI do emissor conforme definido nos metadados OIDC.AUDIENCE
: público-alvo esperado de tokens de ID, para muitos provedores que correspondem ao ID do cliente.MAPPINGS
: lista separada por vírgulas de mapeamentos de atributos identificados anteriormente.CONDITIONS
: condição de atributo que você identificou anteriormente. Remova o parâmetro se você não tiver uma condição de atributo.
OIDC (AD FS)
gcloud iam workload-identity-pools providers create-oidc PROVIDER_ID \ --location="global" \ --workload-identity-pool="POOL_ID" \ --issuer-uri="
https://ADFS_DOMAIN/adfs
" \ --allowed-audiences="RELYING_PARTY_ID" \ --attribute-mapping="MAPPINGS" \ --attribute-condition="CONDITIONS"Substitua os seguintes valores:
POOL_ID
: ID do pool.ADFS_DOMAIN
: nome do domínio público do servidor ou farm do AD FS.RELYING_PARTY_ID
: identificador da parte confiável do aplicativo da API da Web para o pool de federação de identidade da carga de trabalho no AD FS. Você só vai precisar desse parâmetro se usar um identificador da parte confiável personalizado.MAPPINGS
: lista separada por vírgulas de mapeamentos de atributos identificados anteriormente.CONDITIONS
: condição de atributo que você identificou anteriormente. Remova o parâmetro se você não tiver uma condição de atributo.
SAML
gcloud iam workload-identity-pools providers create-saml PROVIDER_ID \ --location="global" \ --workload-identity-pool="POOL_ID" \ --idp-metadata-path="IDP_METADATA_PATH" \ --attribute-mapping="MAPPINGS" \ --attribute-condition="CONDITIONS"
Substitua os seguintes valores:
POOL_ID
: ID do pool.IDP_METADATA_PATH
: caminho do arquivo local para receber o documento de metadados do IdP do provedor de identidade de SAML.MAPPINGS
: lista separada por vírgulas de mapeamentos de atributos identificados anteriormente.CONDITIONS
: condição de atributo que você identificou anteriormente. Remova o parâmetro se você não tiver uma condição de atributo.
Exemplo:
gcloud iam workload-identity-pools providers create-saml example-provider \ --location="global" \ --workload-identity-pool="pool-1" \ --idp-metadata-path="/path/to/idp_metadata.xml" \ --attribute-mapping="google.subject=assertion.subject,google.groups=assertion.attributes.groups"
SAML (AD FS)
curl -O https://DOMAIN/federationmetadata/2007-06/federationmetadata.xml gcloud iam workload-identity-pools providers create-saml PROVIDER_ID \ --location="global" \ --workload-identity-pool="POOL_ID" \ --idp-metadata-path="federationmetadata.xml" \ --attribute-mapping="MAPPINGS" \ --attribute-condition="CONDITIONS"
Substitua:
DOMAIN
: nome do domínio do servidor do AD FS ou do farm de servidores.POOL_ID
: ID do pool.MAPPINGS
: lista separada por vírgulas de mapeamentos de atributos identificados anteriormente.CONDITIONS
: condição de atributo que você identificou anteriormente. Remova o parâmetro se você não tiver uma condição de atributo.
Exemplo:
gcloud iam workload-identity-pools providers create-saml example-provider \ --location="global" \ --workload-identity-pool="pool-1" \ --idp-metadata-path="federationmetadata.xml" \ --attribute-mapping=google.subject=assertion.subject"
A seguir
- Saiba como receber credenciais de curta duração usando a federação de identidade.
- Leia mais sobre a federação de identidades de carga de trabalho.
- Veja como gerenciar pools e provedores de identidade de carga de trabalho.