Como ativar a federação de identidade da carga de trabalho no AKS e no EKS

Neste tópico, explicamos como ativar a Identidade da carga de trabalho para instalações da Apigee híbrida nas plataformas AKS e AKS.

Visão geral

A federação de identidade da carga de trabalho permite que aplicativos em execução fora do Google Cloud representem uma conta de serviço do Google Cloud Platform usando credenciais de um provedor de identidade externo.

O uso da federação de identidade da carga de trabalho pode ajudar a melhorar a segurança, permitindo que os aplicativos usem os mecanismos de autenticação fornecidos pelo ambiente externo e possam substituir as chaves da conta de serviço.

Para ter uma visão geral, consulte Práticas recomendadas para usar a federação de identidade da carga de trabalho.

Configurar a federação de identidade da carga de trabalho

Para usar a federação de identidade da carga de trabalho com a Apigee híbrida, primeiro configure o cluster e, em seguida, aplique o recurso à instalação da Apigee híbrida.

Configure seu cluster para usar a federação de identidade da carga de trabalho.

Siga as instruções do Google Cloud para Configurar a federação de identidade da carga de trabalho para o Kubernetes com as seguintes modificações:

  • Liste suas contas de serviço do IAM e do Kubernetes com os seguintes comandos:
    • Contas de serviço do IAM:você provavelmente já criou as contas de serviço do IAM (também chamadas de "contas de serviço do Google") durante a instalação inicial da Apigee híbrida com a ferramenta create-service-account. Consulte Sobre contas de serviço para conferir uma lista das contas de serviço do IAM necessárias para a Apigee híbrida.

      Para ver uma lista de contas de serviço do IAM no projeto, execute o seguinte comando:

      gcloud iam service-accounts list --project PROJECT_ID
    • Contas de serviço do Kubernetes: os gráficos da Apigee híbrida criam as contas de serviço do Kubernetes necessárias para cada componente ao executar o comando helm install ou helm update.

      Veja as contas de serviço do Kubernetes no cluster com os comandos kubectl get sa:

      kubectl get sa -n APIGEE_NAMESPACE
      kubectl get sa -n apigee-system
  • Na etapa Configurar a federação da Identidade da carga de trabalho, o público-alvo padrão dos pools e provedores de Identidade da carga de trabalho criados é este: Use esse padrão ou defina um público-alvo personalizado esperado e salve esse valor para uso posterior.
    https://iam.googleapis.com/projects/PROJECT_NUM/locations/global/workloadIdentityPools/POOL_ID/providers/PROVIDER_ID
  • Pare após a etapa 1 em Implantar uma carga de trabalho do Kubernetes. Há um arquivo de configuração de credencial para cada conta de serviço do Google. Salve cada arquivo de configuração de credenciais e o caminho inserido para o parâmetro --credential-source-file, por exemplo: /var/run/service-account/token.

Configurar a Apigee híbrida para usar a federação de identidade da carga de trabalho

  1. Copie os arquivos de origem e de saída da credencial (credential-configuration.json) para os diretórios de gráficos a seguir. Estes foram os valores fornecidos na etapa 1 em Implantar uma carga de trabalho do Kubernetes.
    • apigee-datastore/
    • apigee-env
    • apigee-org/
    • apigee-telemetry/
  2. Faça as seguintes alterações globais no arquivo de substituições do cluster:
    gcp:
      workloadIdentity:
        enabled: false # must be set to false to use Workload Identity Federation
      federatedWorkloadIdentity:
        enabled: true
        audience: "AUDIENCE"
        credentialSourceFile: "CREDENTIAL_SOURCE_FILE"
    

    Em que:

    • AUDIENCE é o público permitido do provedor de identidade da carga de trabalho. O valor em .audience no arquivo JSON de configuração de credenciais que você configurou na etapa 1 em Implantar uma carga de trabalho do Kubernetes.
    • CREDENTIAL_SOURCE_FILE é o nome e o caminho do arquivo de origem da credencial usado pela federação de identidade da carga de trabalho para receber as credenciais das contas de serviço. Esse é o valor fornecido para credential-source-file ao configurar a federação de identidade da carga de trabalho com o comando create-cred-config na etapa 1 em Implantar uma carga de trabalho do Kubernetes. Exemplo:
    • Exemplo:

      gcp:
        workloadIdentity:
          enabled: false
        federatedWorkloadIdentity:
          enabled: true
          audience: "//iam.googleapis.com/projects/123456789012/locations/global/workloadIdentityPools/aws-pool/providers/aws-provider"
          credentialSourceFile: "/var/run/service-account/token"
      
  3. Configure as substituições para cada componente usando a federação de identidade da carga de trabalho. Selecione as instruções para arquivos de certificado, secrets do Kubernetes ou Vault, conforme apropriado para sua instalação.

    Arquivo de certificação

    Substitua o valor de serviceAccountPath pelo arquivo de origem da credencial. Precisa ser o caminho relativo para o diretório do gráfico. Exemplo:

    udca:
      serviceAccountPath: fwi/credential-configuration.json
    

    Secret do K8s

    1. Crie um novo secret do Kubernetes usando o arquivo de origem da credencial.
      kubectl create secret -n apigee generic SECRET_NAME --from-file="client_secret.json=CREDENTIAL_CONFIGURATION_FILE"

      Exemplo:

      kubectl create secret -n apigee generic udca-fwi-secret --from-file="client_secret.json=./fwi/credential-configuration.json"
    2. Substitua o valor de serviceAccountRef pelo novo secret. Exemplo:
      udca:
        serviceAccountRef: udca-fwi-secret
      

    Vault

    Atualize a chave da conta de serviço, SAKEY no Vault, com o arquivo de origem de credenciais. Por exemplo, para UDCA (o procedimento é semelhante em todos os componentes):

    SAKEY=$(cat ./fwi/credential-configuration.json); kubectl -n apigee exec vault-0 -- vault kv patch secret/apigee/orgsakeys udca="$SAKEY"
  4. Aplique as mudanças a cada componente afetado com o comando helm update:

    Se você estiver usando o Vault pela primeira vez com esse cluster, atualize o gráfico apigee-operator:

    helm upgrade operator apigee-operator/ \
      --namespace apigee-system \
      --atomic \
      -f overrides.yaml
    

    Atualize o restante dos gráficos afetados na seguinte ordem:

    helm upgrade datastore apigee-datastore/ \
      --namespace apigee \
      --atomic \
      -f overrides.yaml
    
    helm upgrade telemetry apigee-telemetry/ \
      --namespace apigee \
      --atomic \
      -f overrides.yaml
    
    helm upgrade $ORG_NAME apigee-org/ \
      --namespace apigee \
      --atomic \
      -f overrides.yaml
    

    Atualize o gráfico apigee-env para cada ambiente, substituindo ENV_NAME todas as vezes:

    helm upgrade $ENV_NAME apigee-env/ \
      --namespace apigee \
      --atomic \
      --set env=$ENV_NAME \
      -f overrides.yaml
    

    Consulte a referência da Apigee híbrida Helm para ver uma lista de componentes e os gráficos correspondentes.

Saiba mais sobre a federação de identidade da carga de trabalho e as práticas recomendadas em Práticas recomendadas para usar a federação de identidade da carga de trabalho.