Como soluciono o erro “InvalidIdentityToken” quando uso o perfil do IAM do Amazon EKS para acessar a conta de serviço?
A impressão digital do meu cluster Amazon Elastic Kubernetes Service (Amazon EKS) mudou e fez com que o controlador do Application Load Balancer falhasse nas atualizações. Ou meus pods do Amazon EKS estão em estado de falha com o erro “InvalidIdentityToken”.
Solução
As contas de serviço do Amazon EKS usam o OpenID Connect (OIDC) para se autenticar. Quando você cria um provedor de identidade OIDC (IdP) do AWS Identity and Access Management (IAM) para seu cluster Amazon EKS, a impressão digital gerada usa o certificado raiz. A Autoridade de Certificação (CA) raiz da Amazon tem um período de validação de aproximadamente 25 anos.
Você recebe a mensagem “WebIdentityErr: failed to retrieve credentials\r\ncaused by: Token de identidade inválido: OpenIDConnect provider's HTTPS certificate doesn't match configured thumbprint\r\n" error in the following scenarios:
- A impressão digital usada no provedor OIDC expirou.
- A impressão digital não corresponde à CA.
Para solucionar esse problema e obter uma impressão digital, instale e configure a ferramenta de linha de comando OpenSSL.
Encontre a URL para o OIDC IdP
Para encontrar a URL do OIDC IdP, conclua as seguintes etapas:
-
Abra o console do Amazon EKS.
-
No painel de navegação, escolha Clusters.
-
Selecione o cluster que você deseja verificar.
-
Escolha a guia Configuração.
-
Na seção Detalhes, observe o URL do IdP do OICD.
Exemplo: https://oidc.eks.us-east-1.amazonaws.com/id/1111222233334444555566667777888F/Inclua ** /.well-known/openid-configuration** no final da URL do IdP do OICD para formar a URL do documento de configuração do IdP.
Exemplo: ** https://oidc.eks.us-east-1.amazonaws.com/id/1111222233334444555566667777888F/.well-known/openid-configuration. Acesse esse URL em um navegador da Web e anote o valor ** jwks\ _uri da saída. A saída do navegador é semelhante ao seguinte:
{"issuer":"https://oidc.eks.us-east-1.amazonaws.com/id/1111222233334444555566667777888F","jwks_uri":"https://oidc.eks.us-east-1.amazonaws.com/id/1111222233334444555566667777888F/keys","authorization_endpoint":"urn:kubernetes:programmatic_authorization","response_types_supported":["id_token"],"subject_types_supported":["public"],"claims_supported":["sub","iss"],"id_token_signing_alg_values_supported":["RS256"]}
Exibir certificados
Use a ferramenta de linha de comando OpenSSL para executar o seguinte comando para exibir todos os certificados usados:
**Observação:**Substitua oidc. eks.us-east-2.amazonaws.com pelo seu nome de domínio.
openssl s_client -connect oidc.eks.us-east-2.amazonaws.com:443 -showcerts
A saída é semelhante ao seguinte:
[root@ip-172-31-1-202 ~]# openssl s_client -connect oidc.eks.us-east-2.amazonaws.com:443 -showcertsCONNECTED(00000003) depth=4 C = US, O = "Starfield Technologies, Inc.", OU = Starfield Class 2 Certification Authority verify return:1 depth=3 C = US, ST = Arizona, L = Scottsdale, O = "Starfield Technologies, Inc.", CN = Starfield Services Root Certificate Authority - G2 verify return:1 depth=2 C = US, O = Amazon, CN = Amazon Root CA 1 verify return:1 depth=1 C = US, O = Amazon, OU = Server CA 1B, CN = Amazon verify return:1 depth=0 CN = *.execute-api.us-east-2.amazonaws.com verify return:1 --- Certificate chain 0 s:/CN=*.execute-api.us-east-2.amazonaws.com i:/C=US/O=Amazon/OU=Server CA 1B/CN=Amazon -----BEGIN CERTIFICATE----- CERTIFICATE Redacted -----END CERTIFICATE----- 1 s:/C=US/O=Amazon/OU=Server CA 1B/CN=Amazon i:/C=US/O=Amazon/CN=Amazon Root CA 1 -----BEGIN CERTIFICATE----- CERTIFICATE Redacted -----END CERTIFICATE----- 2 s:/C=US/O=Amazon/CN=Amazon Root CA 1 i:/C=US/ST=Arizona/L=Scottsdale/O=Starfield Technologies, Inc./CN=Starfield Services Root Certificate Authority - G2 -----BEGIN CERTIFICATE----- CERTIFICATE Redacted -----END CERTIFICATE----- 3 s:/C=US/ST=Arizona/L=Scottsdale/O=Starfield Technologies, Inc./CN=Starfield Services Root Certificate Authority - G2 i:/C=US/O=Starfield Technologies, Inc./OU=Starfield Class 2 Certification Authority -----BEGIN CERTIFICATE----- MIIEdTCCA12gAwIBAgIJAKcOSkw0grd/MA0GCSqGSIb3DQEBCwUAMGgxCzAJBgNV BAYTAlVTMSUwIwYDVQQKExxTdGFyZmllbGQgVGVjaG5vbG9naWVzLCBJbmMuMTIw MAYDVQQLEylTdGFyZmllbGQgQ2xhc3MgMiBDZXJ0aWZpY2F0aW9uIEF1dGhvcml0 eTAeFw0wOTA5MDIwMDAwMDBaFw0zNDA2MjgxNzM5MTZaMIGYMQswCQYDVQQGEwJV UzEQMA4GA1UECBMHQXJpem9uYTETMBEGA1UEBxMKU2NvdHRzZGFsZTElMCMGA1UE ChMcU3RhcmZpZWxkIFRlY2hub2xvZ2llcywgSW5jLjE7MDkGA1UEAxMyU3RhcmZp ZWxkIFNlcnZpY2VzIFJvb3QgQ2VydGlmaWNhdGUgQXV0aG9yaXR5IC0gRzIwggEi MA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQDVDDrEKvlO4vW+GZdfjohTsR8/ y8+fIBNtKTrID30892t2OGPZNmCom15cAICyL1l/9of5JUOG52kbUpqQ4XHj2C0N Tm/2yEnZtvMaVq4rtnQU68/7JuMauh2WLmo7WJSJR1b/JaCTcFOD2oR0FMNnngRo Ot+OQFodSk7PQ5E751bWAHDLUu57fa4657wx+UX2wmDPE1kCK4DMNEffud6QZW0C zyyRpqbn3oUYSXxmTqM6bam17jQuug0DuDPfR+uxa40l2ZvOgdFFRjKWcIfeAg5J Q4W2bHO7ZOphQazJ1FTfhy/HIrImzJ9ZVGif/L4qL8RVHHVAYBeFAlU5i38FAgMB AAGjgfAwge0wDwYDVR0TAQH/BAUwAwEB/zAOBgNVHQ8BAf8EBAMCAYYwHQYDVR0O BBYEFJxfAN+qAdcwKziIorhtSpzyEZGDMB8GA1UdIwQYMBaAFL9ft9HO3R+G9FtV rNzXEMIOqYjnME8GCCsGAQUFBwEBBEMwQTAcBggrBgEFBQcwAYYQaHR0cDovL28u c3MyLnVzLzAhBggrBgEFBQcwAoYVaHR0cDovL3guc3MyLnVzL3guY2VyMCYGA1Ud HwQfMB0wG6AZoBeGFWh0dHA6Ly9zLnNzMi51cy9yLmNybDARBgNVHSAECjAIMAYG BFUdIAAwDQYJKoZIhvcNAQELBQADggEBACMd44pXyn3pF3lM8R5V/cxTbj5HD9/G VfKyBDbtgB9TxF00KGu+x1X8Z+rLP3+QsjPNG1gQggL4+C/1E2DUBc7xgQjB3ad1 l08YuW3e95ORCLp+QCztweq7dp4zBncdDQh/U90bZKuCJ/Fp1U1ervShw3WnWEQt 8jxwmKy6abaVd38PMV4s/KCHOkdp8Hlf9BRUpJVeEXgSYCfOn8J3/yNTd126/+pZ 59vPr5KW7ySaNRB6nJHGDn2Z9j8Z3/VyVOEVqQdZe4O/Ui5GjLIAZHYcSNPYeehu VsyuLAOQ1xk4meTKCRlb/weWsKh/NEnfVqn3sF/tM+2MR7cEXAMPLE= -----END CERTIFICATE----- --- Server certificate subject=/CN=*.execute-api.us-east-2.amazonaws.com issuer=/C=US/O=Amazon/OU=Server CA 1B/CN=Amazon
Se você ver mais de um certificado na saída, procure o último certificado no final da saída. O último certificado é a CA raiz na cadeia de autoridades de certificação.
Crie um arquivo de certificado
Crie um arquivo de certificado (exemplo: certificate.crt) e copie o conteúdo do último certificado para o arquivo.
Em seguida, execute o seguinte comando:
openssl x509 -in certificate.crt -text
A saída é semelhante ao seguinte:
[root@ip-172-31-1-202 ~]# openssl x509 -in certificate.crt -textCertificate: Data: Version: 3 (0x2) Serial Number: a7:0e:4a:4c:34:82:b7:7f Signature Algorithm: sha256WithRSAEncryption Issuer: C=US, O=Starfield Technologies, Inc., OU=Starfield Class 2 Certification Authority Validity Not Before: Sep 2 00:00:00 2009 GMT Not After : Jun 28 17:39:16 2034 GMT
Verifique a validade do certificado a partir dos valores nos campos Não antes e Não depois. Na produção anterior, a validade da CA é de aproximadamente 25 anos.
Substituir um certificado expirado
Se a saída mostrar que o certificado expirou, você deverá renovar o certificado com seu IdP do OIDC.
Depois de renovar o certificado, execute o seguinte comando com a ferramenta de linha de comando OpenSSL para obter a impressão digital mais recente:
openssl x509 -in certificate.crt -fingerprint -noout
A saída é semelhante ao seguinte:
SHA1 Fingerprint=9E:99:A4:8A:99:60:B1:49:26:BB:7F:3B:02:E2:2D:A2:B0:AB:72:80
Exclua os dois pontos (:) dessa string para obter a impressão digital final:
9E99A48A9960B14926BB7F3B02E22DA2B0AB7280
Execute o comando a seguir para obter a impressão digital mais recente:
$ openssl x509 -in certificate.crt -fingerprint -noout | sed s/://g
Atualize para a impressão digital mais recente
Se a impressão digital atual expirar, use o console do IAM ou a AWS Command Line Interface (AWS CLI) para substituí-la pela impressão digital mais recente.
Console do IAM
Para usar o console do IAM, conclua as seguintes etapas:
- Abra o console do IAM.
- No painel de navegação, escolha Provedores de identidade.
- Escolha o IdP que você deseja atualizar.
- Na seção Impressões digitais, escolha Gerenciar.
- Escolha Adicionar impressão digital e insira o novo valor.
- Escolha Salvar alterações.
AWS CLI
Observação: se você receber erros ao executar comandos da AWS Command Line Interface (AWS CLI), consulte Solucionar erros da AWS CLI. Além disso, verifique se você está usando a versão mais recente da AWS CLI.
Execute o comando update-open-id-connect-provider-thumbprint da AWS CLI:
aws iam update-open-id-connect-provider-thumbprint --open-id-connect-provider-arn arn:aws:iam::111122223333:oidc-provider/oidc.eks.us-east-1.amazonaws.com/id/5ECB2797CB1324A37FC79E3C46851CED --thumbprint-list 9E99A48A9960B14926BB7F3B02E22DA2B0AB7280
Informações relacionadas
Conteúdo relevante
- AWS OFICIALAtualizada há 9 meses
- AWS OFICIALAtualizada há 9 meses
- AWS OFICIALAtualizada há 9 meses