Workload Identity Federation

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 Google
  • SOURCE_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 a google.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 denominado attribute.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 como prod ou test, 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 personalizado aws_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 atributo username 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 personalizado department 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/workloadIdentityPools/POOL_ID/subject/SUBJECT_ATTRIBUTE_VALUE
Todas as identidades num grupo principalSet://iam.googleapis.com/projects/PROJECT_NUMBER/locations/global/workloadIdentityPools/POOL_ID/group/GROUP_ID
Todas as identidades com um valor de atributo específico principalSet://iam.googleapis.com/projects/PROJECT_NUMBER/locations/global/workloadIdentityPools/POOL_ID/attribute.ATTRIBUTE_NAME/ATTRIBUTE_VALUE

O que se segue?