Este documento apresenta uma vista geral da Workload Identity Federation. Com a federação de identidades da carga de trabalho, pode fornecer às cargas de trabalho no local ou em várias nuvens acesso a Trusted Cloud by S3NS recursos através de identidades federadas em vez de uma chave de conta de serviço.
Pode usar a federação de identidades da carga de trabalho com cargas de trabalho executadas nos serviços Web da Amazon (AWS) e no Azure; no Active Directory no local; em serviços de implementação, como o GitHub e o GitLab; e com qualquer fornecedor de identidade (IdP) que suporte o OpenID Connect (OIDC) ou a linguagem de marcação de asserções de segurança (SAML) V2.0.
Porquê a Workload Identity Federation?
Tradicionalmente, as aplicações executadas fora do Trusted Cloud podem usar chaves de contas de serviço para aceder a recursos Trusted Cloud . No entanto, as chaves de contas de serviço são credenciais poderosas e podem representar um risco de segurança se não forem geridas corretamente. A federação de identidades da carga de trabalho elimina o encargo de manutenção e segurança associado às chaves de contas de serviço.
Com a Workload Identity Federation, pode usar a gestão de identidade e acesso (IAM) para conceder funções do IAM a diretores com base em identidades federadas num Workload Identity Pool. Pode conceder acesso aos principais em Trusted Cloud recursos específicos. Esta abordagem chama-se acesso direto. Em alternativa, pode conceder acesso a uma conta de serviço, que pode então aceder aos Trusted Cloud recursos. Esta abordagem chama-se simulação da conta de serviço.
Workload Identity Pools
Um Workload Identity Pool é uma entidade que lhe permite gerir identidades externas.
Em geral, recomendamos que crie um novo conjunto para cada ambiente que não seja deTrusted Cloud produção que precise de aceder a Trusted Cloud recursos, como ambientes de desenvolvimento, teste ou produção.
Fornecedores do Workload Identity Pool
Um fornecedor do Workload Identity Pool é uma entidade que descreve uma relação entre Trusted Cloud e o seu IdP, incluindo o seguinte:
- AWS
- Microsoft Entra ID
- GitHub
- GitLab
- Clusters do Kubernetes
- Okta
- Active Directory Federation Services (AD FS) no local
- Terraform
A Workload Identity Federation segue a especificação de troca de tokens OAuth 2.0. Fornece uma credencial do seu IdP ao serviço de token de segurança, que valida a identidade na credencial e, em seguida, devolve um token federado em troca.
Fornecedor OIDC com JWKs locais
Para federar cargas de trabalho que não têm um ponto final OIDC público, pode carregar conjuntos de chaves Web JSON (JWKS) OIDC diretamente para o conjunto. Isto é comum se tiver o Terraform ou o GitHub Enterprise alojado no seu próprio ambiente ou se tiver requisitos regulamentares para não expor URLs públicos. Para mais informações, consulte o artigo Gerir JWKs OIDC (opcional).
Mapeamentos de atributos
Os tokens emitidos pelo seu IdP externo contêm um ou mais atributos. Alguns IdPs referem-se a estes atributos como reivindicações.
Os tokens do serviço de tokens de segurança da Google também contêm um ou mais atributos, conforme indicado na tabela seguinte:
Atributo | Descrição |
---|---|
google.subject |
Obrigatório. Um identificador exclusivo do utilizador. Este atributo é usado em associações de funções da IAM e aparece nos registos do Cloud Logging.principal://
O valor tem de ser único e não pode exceder 127 carateres.
|
google.groups |
Opcional. Um conjunto de grupos aos quais a identidade pertence. Este atributo é usado em associações de funções do IAM para conceder acesso a todos os membros de um grupo.principalSet://
|
attribute.NAME |
Opcional. Pode definir até 50 atributos personalizados e usar estes atributos em associações de funções da IAM principalSet:// para conceder acesso a todas as identidades com um determinado atributo.
|
Um mapeamento de atributos define como derivar o valor do atributo do token do serviço de tokens de segurança da Google a partir de um token externo. Para cada atributo do token do serviço de tokens de segurança da Google, pode definir um mapeamento de atributos, formatado da seguinte forma:
TARGET_ATTRIBUTE
=SOURCE_EXPRESSION
Substitua o seguinte:
TARGET_ATTRIBUTE
é um atributo do token do serviço de tokens de segurança da GoogleSOURCE_EXPRESSION
é uma expressão do idioma de expressão comum (IEC) que transforma um ou mais atributos dos tokens emitidos pelo seu IdP externo
A lista seguinte apresenta exemplos de mapeamento de atributos:
Atribua o atributo de afirmação
sub
agoogle.subject
:google.subject=assertion.sub
Concatene vários atributos de afirmação:
google.subject="myprovider::" + assertion.aud + "::" + assertion.sub
Mapear um atributo de declaração com valor GUID
workload_id
para um nome e atribuir o resultado a um atributo personalizado denominadoattribute.my_display_name
:attribute.my_display_name={ "8bb39bdb-1cc5-4447-b7db-a19e920eb111": "Workload1", "55d36609-9bcf-48e0-a366-a3cf19027d2a": "Workload2" }[assertion.workload_id]
Use operadores e funções lógicas da CEL para definir um atributo personalizado denominado
attribute.environment
comoprod
outest
, consoante o nome do recurso da Amazon (ARN) da identidade:attribute.environment=assertion.arn.contains(":instance-profile/Production") ? "prod" : "test"
Use a função
extract
para preencher um atributo personalizadoaws_role
com o nome da função assumida ou, se não tiver sido assumida nenhuma função, com o ARN da identidade.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
Use a função
split
que divide uma string no valor do separador fornecido. Por exemplo, para extrair o atributousername
de um atributo de endereço de email dividindo o respetivo valor no@
e usando a primeira string, use o seguinte mapeamento de atributos:attribute.username=assertion.email.split("@")[0]
A função
join
une uma lista de strings no valor do separador fornecido. Por exemplo, para preencher o atributo personalizadodepartment
concatenando uma lista de strings com.
como separador, use o seguinte mapeamento de atributos:attribute.department=assertion.department.join(".")
Para a AWS, a Google fornece mapeamentos predefinidos que abrangem os cenários mais comuns. Também pode fornecer mapeamentos personalizados.
Para fornecedores OIDC, fornece os mapeamentos. Para criar o mapeamento, consulte a documentação do fornecedor para ver uma lista de atributos nas respetivas credenciais.
Para mais detalhes, consulte a documentação da API para o
campoattributeMapping
.
Condições de atributos
Uma condição de atributo é uma expressão CEL que pode verificar atributos de afirmação e atributos de destino. Se a condição do atributo for avaliada como true
para uma credencial
específica, a credencial é aceite. Caso contrário, a credencial é rejeitada.
Pode usar uma condição de atributo para restringir as identidades que podem autenticar-se com o seu Workload Identity Pool.
As condições de atributos são úteis em cenários como os seguintes:
Se a sua carga de trabalho usar um IdP disponível para o público em geral, pode restringir o acesso para que apenas as identidades que escolher tenham acesso ao seu Workload Identity Pool.
Se estiver a usar um IdP com várias plataformas na nuvem, pode impedir que as credenciais destinadas a utilização com outra plataforma sejam usadas com o Trusted Cloude vice-versa. Isto ajuda a evitar o problema do delegado confuso.
A condição de atributo para um fornecedor do Workload Identity Pool pode usar a palavra-chave assertion
, que se refere a um mapa que representa a credencial de autenticação emitida pelo IdP. Pode usar a notação de pontos para aceder aos valores do mapa. Por exemplo, as credenciais da AWS incluem um valor arn
, ao qual pode aceder como assertion.arn
. Além disso, a condição do atributo pode usar qualquer atributo definido no mapeamento de atributos do fornecedor.
O exemplo seguinte só permite pedidos de identidades que tenham uma função da AWS específica:
attribute.aws_role == "ROLE_MAPPING"
Para mais detalhes, consulte a documentação da API para o
campoattributeCondition
.
Gestão do acesso
O fluxo de troca de tokens devolve um token de acesso federado. Pode usar esta chave de acesso federada para conceder à sua carga de trabalho acesso em nome das identidades principais nos recursos e obter uma chave de acesso OAuth 2.0 de curta duração. Trusted Cloud
Pode usar este token de acesso para fornecer acesso ao IAM.
Recomendamos que use a Workload Identity Federation para conceder acesso diretamente a um Trusted Cloud recurso. Embora a maioria das Trusted Cloud APIs suporte a Workload Identity Federation, algumas APIs têm limitações. Em alternativa, pode usar a simulação da conta de serviço.
A chave de acesso de curta duração permite-lhe chamar quaisquer APIs às quais o recurso ou a conta de serviço tenha acesso. Trusted Cloud
Acesso direto aos recursos
Pode usar o acesso direto a recursos para conceder acesso à sua identidade externa diretamente num Trusted Cloud recurso através de funções específicas do recurso.
Alternativa: simulação de conta de serviço
Em alternativa a fornecer acesso direto aos recursos, pode usar a simulação da conta de serviço.
Tem de conceder à sua conta de serviço a função Utilizador do Workload Identity (roles/iam.workloadIdentityUser
).
Âmbitos principais e segurança
Concede acesso a responsáveis ou subconjuntos dos mesmos através de tipos de responsáveis.
Tipos de diretores
A tabela seguinte descreve como definir os principais como indivíduos e grupos de identidades:
Identidades | Formato do identificador |
---|---|
Identidade única |
principal://iam.googleapis.com/projects/PROJECT_NUMBER/locations/global/
|
Todas as identidades num grupo |
principalSet://iam.googleapis.com/projects/PROJECT_NUMBER/locations/global/
|
Todas as identidades com um valor de atributo específico |
principalSet://iam.googleapis.com/projects/PROJECT_NUMBER/locations/global/
|
O que se segue?
Use a federação de identidades da carga de trabalho para permitir que as suas cargas de trabalho acedam a recursos da AWS ou do Azure, Active Directory, pipelines de implementação ou fornecedores OIDC ou SAML.
Saiba como gerir pools de Workload Identity com a CLI Google Cloud ou a API REST.