Como soluciono problemas de erros de IRSA no Amazon EKS?

Data da última atualização: 10/12/2021

Muitas vezes recebo erros quando uso funções do IAM para contas de serviço (IRSA) com meu Amazon Elastic Kubernetes Service (Amazon EKS).

Breve descrição

Para solucionar problemas com o IRSA no Amazon EKS, conclua as etapas em uma das seguintes seções:

  • Verifique a formatação do IAM ARN
  • Verifique se você tem um provedor do IAM OIDC para sua conta da AWS
  • Verifique o público do provedor do OIDC
  • Verifique se você criou o recurso OIDC com uma impressão digital do certificado raiz
  • Verifique a configuração da política de confiança da sua função do IAM
  • Verifique se a configuração do webhook da identidade do pod existe e é válida
  • Verifique se você está usando SDKs da AWS compatíveis

Resolução

Verifique a formatação do IAM ARN

Se o nome do recurso da Amazon (ARN) do IAM estiver definido na anotação da conta de serviço relativa e não estiver formatado corretamente, você receberá o seguinte erro:

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

Exemplo de um formato de ARN incorreto:

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

O formato de ARN anterior está incorreto porque tem dois-pontos extra (:). Para garantir que você use o formato de ARN correto, consulte ARNs do IAM.

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

Se você não criou um provedor OpenID Connect (OIDC), 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

Obtenha o URL do provedor do IAM OIDC:

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

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

Exemplo de saída:

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

Liste os provedores do OIDC do IAM:

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

Observação: substitua EXAMPLED539D4633E53DE1B716D3041E pelo valor retornado do comando anterior.

Se o provedor OIDC não existir, use o seguinte comando eksctl para criar um:

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

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

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

Verificar o público do provedor OIDC do IAM

Ao criar um provedor de 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

Verifique o público do provedor OIDC do IAM:

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

Observação: substituaARN do provedor do OIDC pelo ARN de seu provedor do OIDC.

-ou-

Conclua as seguintes etapas:

1.    Abra o console do Amazon EKS.

2.    Selecione o nome do seu cluster e escolha a guia Configuration (Configuração).

3.    Na seção Details(Detalhes), observe o valor do URL do provedor do OpenID Connect.

4.    Abra o console do IAM.

5.    No painel de navegação, em Access Management (Gerenciamento de acesso), escolha Identity Providers (Provedores de identidade).

6.    Selecione o provedor que corresponde ao URL do seu cluster.

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

1.    Abra o console do IAM.

2.    No painel de navegação, em Access Management (Gerenciamento de acesso), escolha Identity Providers (Provedores de identidade).

3.    Selecione o provedor que corresponde ao URL do seu cluster.

4.    Escolha Actions (Ações) e, em seguida, escolha Add audience (Adicionar público).

5.    Adicione sts.amazonaws.com.

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

Se você não usou uma impressão digital do certificado raiz para criar o provedor OIDC, 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 de certificados não raiz são renovadas anualmente e as impressões digitais de certificados raiz são renovadas a cada década. Portanto, é uma prática recomendada usar uma impressão digital de certificado raiz ao criar um OIDC do IAM.

Se você usou a AWS Command Line Interface (AWS CLI), o AWS Tools for PowerShell ou a API do IAM para criar o OIDC do IAM, será necessário obter manualmente a impressão digital. Se você criou seu OIDC do IAM no console do IAM, ainda é uma prática recomendada obter manualmente a impressão digital para verificar se o console buscou a que é correta.

Obtenha a impressão digital do certificado raiz e sua data de validade:

echo | openssl s_client -servername oidc.eks.your-region-code.amazonaws.com -showcerts -connect oidc.eks.your-region-code.amazonaws.com:443 2>&- | tail -r | sed -n '/-----END CERTIFICATE-----/,/-----BEGIN CERTIFICATE-----/p; /-----BEGIN CERTIFICATE-----/q' | tail -r | openssl x509 -fingerprint -noout -dates | sed 's/://g' | awk -F= '{print tolower($2)}'

Observação: substitua o código da sua região pela região da AWS em que o cluster está localizado.

Exemplo de saída:

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

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

Verifique a configuração da política de confiança da sua função do IAM

Se a política de confiança da função do IAM estiver configurada incorretamente, 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, use o guia de configuração da função do IAM para verificar se as condições da política de confiança estão configuradas corretamente.

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

Se você acidentalmente excluiu ou alterou sua configuração de webhook, o IRSA para de funcionar.

Execute o seguinte comando para verificar se a configuração do webhook existe e é válida:

kubectl get mutatingwebhookconfiguration pod-identity-webhook  -o yaml

Verifique se você está usando SDKs da AWS compatíveis

Verifique se você está usando uma versão do AWS SDK compatível com a pressuposição de uma função do IAM por meio do arquivo de token de identidade da Web do OIDC.


Este artigo ajudou?


Precisa de ajuda com faturamento ou suporte técnico?