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

7 minutos de lectura
0

Se producen errores cuando utilizo roles de AWS Identity and Access Management (IAM) para cuentas de servicio (IRSA) con Amazon Elastic Kubernetes Service (Amazon EKS).

Solución

Comprobación del formato del ARN de IAM

Si el ARN de IAM en la anotación de la cuenta de servicio tiene un formato incorrecto, se producirá el siguiente error:

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

El siguiente es un ejemplo de un ARN con un formato incorrecto:

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

Como el ARN tiene dos puntos adicionales (:), el formato incorrecto del ARN provoca el mensaje de error. Para comprobar cuál es el formato correcto de ARN, consulte ARN de IAM.

Comprobación del proveedor de OIDC de IAM para su cuenta de AWS

Si no ha creado ningún proveedor de OpenID Connect (OIDC), se producirá 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»

Para solucionar este error, obtenga la URL del proveedor de OIDC de IAM:

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

Nota: Sustituya cluster name por el nombre de su clúster.

El resultado es similar al siguiente ejemplo:

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

Para obtener un listado de los proveedores de OIDC de IAM, ejecute el siguiente comando:

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

Nota: Sustituya EXAMPLED539D4633E53DE1B716D3041E por la URL del proveedor de OIDC de IAM.

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

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

Nota: Sustituya cluster name por el nombre de su clúster.

También puede usar la Consola de administración de AWS para crear un proveedor de OIDC de IAM para el clúster.

Comprobación del público del proveedor de OIDC de IAM

Al crear un proveedor de OIDC de IAM, debe utilizar sts.amazonaws.com como público. Si el público es incorrecto, se producirá el siguiente error:

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

Para comprobar el público del proveedor de OIDC de IAM, ejecute el siguiente comando:

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

Nota: Sustituya ARN-of-OIDC-provider por el ARN de su proveedor de OIDC.

En el parámetro ClientIDList, la salida debe mostrar sts.amazonaws.com. Para utilizar la consola de Amazon EKS para comprobar el público, siga estos pasos:

  1. Abra la consola de Amazon EKS.
  2. Seleccione el nombre del clúster y, a continuación, elija la pestaña Información general.
  3. En la sección Detalles, anote el valor de la URL del proveedor de OIDC.
  4. Abra la consola de IAM.
  5. En el panel de navegación, acceda a Administración del acceso y, a continuación, seleccione Proveedor de identidad.
  6. Seleccione el proveedor que corresponda a la URL del clúster.

Para cambiar el público, siga estos pasos:

  1. Abra la consola de IAM.
  2. En el panel de navegación, acceda a Administración del acceso y, a continuación, seleccione Proveedor de identidad.
  3. Seleccione el proveedor que corresponda a la URL del clúster.
  4. Elija Acciones y, a continuación, seleccione Agregar público.
  5. Añada sts.amazonaws.com.

Comprobación de si ha creado el recurso de OIDC de IAM con la huella digital de un certificado raíz

Si no ha utilizado la huella digital de un certificado raíz para crear el proveedor de OIDC, se producirá 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 los certificados no raíz se renuevan anualmente. Las huellas digitales de los certificados raíz se renuevan cada década. Se recomienda utilizar la huella digital de un certificado raíz al crear un OIDC de IAM.

Por ejemplo, si ha utilizado uno de los siguientes servicios para crear su OIDC de IAM:

  • Interfaz de la línea de comandos de AWS (AWS CLI)
  • AWS Tools para PowerShell
  • API de IAM

En este caso, debe obtener la huella digital manualmente. Si ha creado el OIDC de IAM en la consola de IAM, le recomendamos que obtenga la huella digital manualmente. Utilice esta huella digital para comprobar si la consola obtuvo el OIDC de IAM correcto.

Para buscar la huella digital y la fecha de caducidad del certificado raíz, ejecute el siguiente 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)}'

Nota: Sustituya your-region-code por la región de AWS en la que se encuentre el clúster.

Resultado del ejemplo:

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

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

Comprobación de 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, se producirá el siguiente error:

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

Para solucionar este problema, asegúrese de estar utilizando el proveedor de OIDC de IAM correcto. Si el proveedor de OIDC de IAM es correcto, revise el rol de IAM para comprobar si las condiciones de la política de confianza están configuradas correctamente.

Comprobación de si la configuración del webhook de Pod Identity existe y es válida

El webhook de Pod Identity inyecta las variables de entorno y el volumen proyectado necesarios. Si elimina o modifica la configuración del webhook accidentalmente, IRSA dejará de funcionar.

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

kubectl get mutatingwebhookconfiguration pod-identity-webhook  -o yaml

Si la configuración pod-identity-webhook no existe, ejecute el siguiente comando para crearla:

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

Nota: Sustituya CLUSTER_NAME por el nombre de su clúster y REGION_CODE por la región del clúster.

Comprobación de si el webhook de Pod Identity está inyectando variables de entorno en los pods que utilizan IRSA

Para comprobar que el webhook de Pod Identity inyecta variables de entorno en los pods que utilizan IRSA, ejecute uno de los siguientes comandos:

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

Alternativa:

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

Comprobación de que utiliza los SDK de AWS compatibles

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

Información relacionada

¿Por qué no puedo usar un rol de IAM para la cuenta de servicio en mi pod de Amazon EKS?

¿Cómo soluciono los problemas de un proveedor de OIDC e IRSA en Amazon EKS?

OFICIAL DE AWS
OFICIAL DE AWSActualizada hace 2 meses