Como solucionar erros de IRSA no Amazon EKS?
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:
- Abra o console do Amazon EKS.
- Selecione o nome do seu cluster e, em seguida, escolha a guia Visão geral.
- Na seção Detalhes, anote o valor do URL do provedor OIDC.
- Abra o console do IAM.
- No painel de navegação, em Gerenciamento de acesso, escolha Provedores de identidade.
- Selecione o provedor que corresponde ao URL do seu cluster.
Para alterar o público, conclua as seguintes etapas:
- Abra o console do IAM.
- No painel de navegação, em Gerenciamento de acesso, escolha Provedores de identidade.
- Selecione o provedor que corresponde ao URL do seu cluster.
- Escolha Ações e, em seguida, escolha Adicionar público.
- 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?
Conteúdo relevante
- AWS OFICIALAtualizada há 3 anos
- AWS OFICIALAtualizada há 8 meses
- AWS OFICIALAtualizada há 10 meses