Como solucionar erros de IRSA no Amazon EKS?

6 minuto de leitura
0

Quando uso perfis do AWS Identity and Access Management (IAM) para contas de serviço (IRSA) com o Amazon Elastic Kubernetes Service (Amazon EKS), eu recebo erros.

Resolução

Verifique o formato do ARN do IAM

Se você formatou o ARN do IAM incorretamente na anotação da conta de serviço, você receberá o seguinte erro:

"An error occurred (ValidationError) when calling the AssumeRoleWithWebIdentity
operation: Request ARN is invalid"

Veja a seguir um exemplo de um ARN com um formato incorreto:

eks.amazonaws.com/role-arn: arn:aws:iam::::1234567890:role/example

Como o ARN tem dois pontos extras (:), o formato incorreto do ARN causa a mensagem de erro. Para verificar o formato correto do ARN, consulte ARNs do IAM.

Verifique se você tem um provedor OIDC do IAM para sua conta da AWS

Se você não criou um provedor OpenID Connect (OIDC), você receberá o seguinte erro:

"An error occurred (InvalidIdentityToken) when calling the AssumeRoleWithWebIdentity operation: No OpenIDConnect provider found in your account for https://oidc.eks.region.amazonaws.com/id/xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx"

Para solucionar esse erro, obtenha o URL do provedor OIDC do IAM:

aws eks describe-cluster --name cluster name --query "cluster.identity.oidc.issuer" --output text

Observação: substitua cluster name pelo nome do seu cluster.

A saída é semelhante ao exemplo a seguir:

https://oidc.eks.us-west-2.amazonaws.com/id/EXAMPLED539D4633E53DE1B716D3041E

Para listar os provedores OIDC do IAM, execute o seguinte comando:

aws iam list-open-id-connect-providers | grep EXAMPLED539D4633E53DE1B716D3041E

Observação: substitua EXAMPLED539D4633E53DE1B716D3041E pelo URL do provedor OIDC do IAM.

Se o provedor OIDC não existir, execute o comando eksctl a seguir para criar um:

eksctl utils associate-iam-oidc-provider --cluster cluster name --approve

Observação: substitua cluster name pelo nome do seu cluster.

Você também pode usar o Console de Gerenciamento da AWS para criar um provedor OIDC do IAM para seu cluster.

Verifique o público do provedor OIDC do IAM

Ao criar um provedor OIDC do IAM, você deve usar sts.amazonaws.com como seu público. Se o público estiver incorreto, você receberá o seguinte erro:

"An error occurred (InvalidIdentityToken) when calling the AssumeRoleWithWebIdentity operation: Incorrect token audience"

Para verificar o público do provedor OIDC do IAM, execute o seguinte comando:

aws iam get-open-id-connect-provider --open-id-connect-provider-arn ARN-of-OIDC-provider

Observação: substitua ARN-of-OIDC-provider pelo ARN do seu provedor OIDC.

No parâmetro ClientIDList, a saída deve exibir sts.amazonaws.com. Para usar o console do Amazon EKS para verificar o público, conclua as seguintes etapas:

  1. Abra o console do Amazon EKS.
  2. Selecione o nome do seu cluster e, em seguida, escolha a guia Visão geral.
  3. Na seção Detalhes, anote o valor do URL do provedor OIDC.
  4. Abra o console do IAM.
  5. No painel de navegação, em Gerenciamento de acesso, escolha Provedores de identidade.
  6. Selecione o provedor que corresponde ao URL do seu cluster.

Para alterar o público, conclua as seguintes etapas:

  1. Abra o console do IAM.
  2. No painel de navegação, em Gerenciamento de acesso, escolha Provedores de identidade.
  3. Selecione o provedor que corresponde ao URL do seu cluster.
  4. Escolha Ações e, em seguida, escolha Adicionar público.
  5. Adicione sts.amazonaws.com.

Verifique se você criou o recurso OIDC do IAM com uma impressão digital de certificado raiz

Se você não usou uma impressão digital de certificado raiz para criar o provedor OIDC, você receberá o seguinte erro:

"An error occurred (InvalidIdentityToken) when calling the AssumeRoleWithWebIdentity operation: OpenIDConnect provider's HTTPS certificate doesn't match configured thumbprint"

Observação: as impressões digitais do certificado não raiz são renovadas anualmente. As impressões digitais do certificado raiz são renovadas a cada década. É uma prática recomenda usar uma impressão digital de certificado raiz ao criar um OIDC do IAM.

Por exemplo, você usou um dos seguintes serviços para criar um OIDC do IAM:

  • AWS Command Line Interface (AWS CLI)
  • Ferramentas da AWS para PowerShell
  • API do IAM

Neste exemplo, você deve obter a impressão digital manualmente. Se você criou um OIDC do IAM no console do IAM, é uma prática recomendada obter a impressão digital manualmente. Use essa impressão digital para verificar se o console obteve o OIDC do IAM correto.

Para encontrar a impressão digital e a data de validade do certificado raiz, execute o seguinte comando:

echo | openssl s_client -servername oidc.eks.your-region-code.amazonaws.com -showcerts -connect oidc.eks.your-region-code.amazonaws.com:443 2>/dev/null | awk '/-----BEGIN CERTIFICATE-----/{cert=""} {cert=cert $0 "\n"} /-----END CERTIFICATE-----/{last_cert=cert} END{printf "%s", last_cert}' | openssl x509 -fingerprint -noout -dates | sed 's/://g' | awk -F= '{print tolower($2)}'

Observação: substitua your-region-code pela região da AWS em que seu cluster está localizado.

Exemplo de saída:

9e99a48a9960b14926bb7f3b02e22da2b0ab7280 sep 2 000000 2009 gmt jun 28 173916 2034 gmt

Na saída anterior, 9e99a48a9960b14926bb7f3b02e22da2b0ab7280 é a impressão digital, sep 2 000000 2009 gmt é a data de início do certificado e jun 28 173916 2034 é a data de validade do certificado.

Verifique a configuração da política de confiança do seu perfil do IAM

Se você configurou a política de confiança do perfil do IAM de maneira incorreta, você receberá o seguinte erro:

"An error occurred (AccessDenied) when calling the AssumeRoleWithWebIdentity operation: Not authorized to perform sts:AssumeRoleWithWebIdentity"

Para resolver esse problema, verifique se você está usando o provedor OIDC do IAM correto. Se o provedor OIDC do IAM estiver correto, analise o perfil do IAM para ver se as condições da política de confiança estão configuradas corretamente.

Verifique se a configuração do webhook de identidade do pod existe e é válida

O webhook de identidade do pod injeta as variáveis de ambiente necessárias e o volume projetado. Se você excluiu ou alterou acidentalmente a configuração do webhook, o IRSA deixará de funcionar.

Para verificar se a configuração do webhook existe e é válida, execute o comando a seguir:

kubectl get mutatingwebhookconfiguration pod-identity-webhook  -o yaml

Se a configuração pod-identity-webhook não existir, execute o comando a seguir para criá-la:

CLUSTER_CA=$(aws eks describe-cluster --name CLUSTER_NAME --region REGION_CODE --query 'cluster.certificateAuthority.data' --output text);
cat << EOF | kubectl apply -f -
apiVersion: admissionregistration.k8s.io/v1
kind: MutatingWebhookConfiguration
metadata:
  name: pod-identity-webhook
webhooks:
- name: iam-for-pods.amazonaws.com
  clientConfig:
    url: "https://127.0.0.1:23443/mutate"
    caBundle: $CLUSTER_CA
  failurePolicy: Ignore
  rules:
  - operations: [ "CREATE" ]
    apiGroups: [""]
    apiVersions: ["v1"]
    resources: ["pods"]
    scope: "*"
  reinvocationPolicy: IfNeeded
  sideEffects: None
  admissionReviewVersions: ["v1beta1"]
EOF

Observação: substitua CLUSTER_NAME pelo nome do cluster e REGION_CODE pela região do cluster.

Verifique se o webhook de identidade do pod está injetando variáveis de ambiente nos pods que usam o IRSA

Para verificar se seu webhook de identidade do pod injeta variáveis de ambiente em seus pods que usam IRSA, execute um dos seguintes comandos:

kubectl get pod <pod-name> -n <ns> -o yaml | grep aws-iam-token

-ou-

kubectl get pod <pod-name> -n <ns> -o yaml | grep AWS_WEB_IDENTITY_TOKEN_FILE

Verifique se você usa AWS SDKs compatíveis

Analise seus AWS SDKs. Certifique-se de usar uma versão do AWS SDK que permita que você assuma um perfil do IAM por meio do arquivo de token de identidade da Web do OIDC.

Informações relacionadas

Por que não consigo usar um perfil do IAM para a conta de serviço no meu pod do Amazon EKS?

Como solucionar problemas de um provedor de OIDC e IRSA no Amazon EKS?

AWS OFICIAL
AWS OFICIALAtualizada há 9 meses