¿Cómo soluciono los errores de IRSA en Amazon EKS?

Última actualización: 10/12/2021

A menudo recibo errores cuando utilizo roles de IAM para cuentas de servicio (IRSA) con mi Amazon Elastic Kubernetes Service (Amazon EKS).

Descripción corta

Para solucionar problemas con IRSA en Amazon EKS, complete los pasos de una de las siguientes secciones:

  • Verificar el formato del ARN de IAM
  • Verificar si tiene un proveedor de IAM OIDC para la cuenta de AWS
  • Verificar la audiencia del proveedor de OIDC
  • Verificar que creó el recurso OIDC con una huella digital de certificado raíz
  • Verificar la configuración de la política de confianza del rol de IAM
  • Verificar que la configuración de webhook de identidad de su pod existe y es válida
  • Verificar que utiliza los SDK de AWS compatibles

Resolución

Verificar el formato del ARN de IAM

Si el nombre de recurso de Amazon (ARN) de IAM se establece en la anotación de la cuenta de servicio relativa y no tiene el formato correcto, recibirá el siguiente error:

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

Ejemplo de un formato de ARN incorrecto:

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

El formato de ARN anterior es incorrecto porque tiene dos puntos adicionales( : ). Para asegurarse de que utiliza el formato de ARN correcto, consulte el ARN de IAM.

Verificar si tiene un proveedor de IAM OIDC para la cuenta de AWS

Si no ha creado un proveedor de OpenID Connect (OIDC), recibirá el siguiente error:

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

Obtenga la URL del proveedor de OIDC de IAM:

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

Nota: Reemplace el nombre del clúster por el nombre de su clúster.

Salida de ejemplo:

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

Enumere los proveedores de OIDC de IAM:

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

Nota: Reemplace EXAMPLED539D4633E53DE1B716D3041E por el valor que devolvió el comando anterior.

Si el proveedor OIDC no existe, utilice el siguiente comando eksctl para crear uno:

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

Nota: Reemplace el nombre del clúster por el nombre de su clúster.

También puede utilizar la consola de administración de AWS para crear un proveedor de OIDC de IAM para su clúster.

Verificar la audiencia del proveedor de OIDC de IAM

Cuando crea un proveedor de OIDC de IAM, debe utilizar sts.amazonaws.com como su audiencia. Si la audiencia es incorrecta, recibirá el siguiente error:

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

Verifique la audiencia del proveedor de OIDC de IAM:

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

Nota: Reemplace el ARN del proveedor de OIDC por el ARN de su proveedor de OIDC.

-o bien-

Complete los siguientes pasos:

1.    Abra la consola de Amazon EKS.

2.    Seleccione el nombre del clúster y, a continuación, elija la pestaña Configuration (Configuración).

3.    En la sección Details (Detalles), anote el valor de la URL del proveedor de OpenID Connect.

4.    Abra la consola de IAM.

5.    En el panel de navegación, en Access Management (Administración de acceso), elija Identity Providers (Proveedores de identidad).

6.    Seleccione el proveedor que coincida con la URL de su clúster.

Para cambiar la audiencia, siga los siguientes pasos:

1.    Abra la consola de IAM.

2.    En el panel de navegación, en Access Management (Administración de acceso), elija Identity Providers (Proveedores de identidad).

3.    Seleccione el proveedor que coincida con la URL de su clúster.

4.    Elija Actions (Acciones) y, a continuación, elijaAdd audience (Agregar audiencia).

5.    Agregue sts.amazonaws.com.

Verificar que creó el recurso OIDC de IAM con una huella digital de certificado raíz

Si no utilizó una huella digital de certificado raíz para crear el proveedor OIDC, entonces recibirá el siguiente error:

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

Nota: Las huellas digitales de certificados no raíz se renuevan cada año, y las huellas digitales de certificados raíz se renuevan cada década. Por lo tanto, la práctica recomendada es utilizar una huella digital de certificado raíz al crear un OIDC de IAM.

Si utilizó AWS Command Line Interface (AWS CLI), las herramientas de AWS para PowerShell o la API de IAM para crear su OIDC de IAM, debe obtener la huella digital de forma manual. Si creó su OIDC de IAM en la consola de IAM, la práctica recomendada es obtener la huella digital de forma manual para comprobar que la consola ha obtenido la correcta.

Obtenga la huella digital del certificado raíz y su fecha de vencimiento:

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)}'

Nota:Reemplace su código de región por la región de AWS en la que se encuentra el clúster.

Salida de ejemplo:

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

En la salida de ejemplo anterior, 9e99a48a9960b14926bb7f3b02e22da2b0ab7280 es la huella digital,sep 2 000000 2009 gmt es la fecha de inicio del certificado y 28 jun 173916 2034 es la fecha de vencimiento del certificado.

Verificar la configuración de la política de confianza del rol de IAM

Si la política de confianza del rol de IAM está mal configurada, recibirá el siguiente error:

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

Para resolver este problema, asegúrese de que utiliza el proveedor OIDC de IAM correcto. Si el proveedor OIDC de IAM es correcto, utilice la guía de configuración de roles de IAM para comprobar si las condiciones de la política de confianza están configuradas correctamente.

Verificar que la configuración de webhook de identidad de su pod existe y es válida

Si eliminó o cambió accidentalmente la configuración de webhook, IRSA deja de funcionar.

Ejecute el siguiente comando para comprobar que la configuración de webhook existe y es válida:

kubectl get mutatingwebhookconfiguration pod-identity-webhook  -o yaml

Verificar que utiliza los SDK de AWS compatibles

Asegúrese de que utiliza una versión del SDK de AWS que admita asumir un rol de IAM a través del archivo de token de identidad web OIDC.


¿Le resultó útil este artículo?


¿Necesita asistencia técnica o con la facturación?