Complete a 3 Question Survey and Earn a re:Post Badge
Help improve AWS Support Official channel in re:Post and share your experience - complete a quick three-question survey to earn a re:Post badge!
¿Por qué no puedo usar un rol de IAM para la cuenta de servicio en mi pod de Amazon EKS?
Intento usar un rol de AWS Identity and Access Management (IAM) para una cuenta de servicio. Mi pod de Amazon Elastic Kubernetes Service (Amazon EKS) no asume el rol de IAM asignado debido a un error de autorización. O bien, mi pod intenta usar el rol de IAM predeterminado asignado al nodo de Amazon EKS en lugar del rol de IAM asignado a mi pod.
Resolución
Nota: Si se muestran errores al ejecutar comandos de la Interfaz de la línea de comandos de AWS (AWS CLI), consulte Troubleshoot AWS CLI errors. Además, asegúrese de utilizar la versión más reciente de la AWS CLI.
Comprobación de que tiene un proveedor de identidad de OIDC de IAM para su clúster de Amazon EKS
Cree un proveedor de OpenID Connect (OIDC) de IAM para su clúster, si aún no lo tiene. Debe tener un proveedor de identidad de OIDC para que su clúster pueda usar un rol de IAM en su cuenta de servicio.
A continuación, compruebe que el proveedor de identidad de OIDC esté configurado correctamente:
- Abra la consola de IAM. En el panel de navegación, elija Proveedores de identidad.
- En la columna Proveedor, identifique y anote la URL del proveedor de OIDC.
- En otra pestaña o ventana, abra la consola de Amazon EKS. A continuación, elija Clústeres en el panel de navegación.
- Elija su clúster y, a continuación, elija la pestaña Configuración.
- En la sección Detalles, anote el valor de la propiedad de la URL del proveedor de OpenID Connect.
- Compruebe que la URL del proveedor de OIDC de la consola de Amazon EKS (paso 5) coincida con la URL del proveedor de OIDC de la consola de IAM (paso 2).
Si la URL del proveedor de OIDC de su clúster de Amazon EKS no coincide con ninguna de las URL del proveedor de OIDC de la consola de IAM, debe crear un nuevo proveedor de OIDC de IAM.
Validación de las políticas de rol de IAM y la configuración de la política de confianza
Es posible que su rol de IAM no tenga todos los permisos necesarios. La política de relaciones de confianza de su rol de IAM también podría tener errores de sintaxis si creó su rol de IAM mediante la consola de administración de AWS o la AWS CLI.
Para validar sus políticas de rol de IAM y comprobar si hay errores de sintaxis en la política de confianza, haga lo siguiente:
- Abra la consola de IAM.
- En el panel de navegación, elija Roles y, a continuación, elija su rol.
- Seleccione la pestaña Permisos en la página del rol y, a continuación, compruebe que todos los permisos necesarios estén asignados al rol.
- Seleccione la pestaña Relaciones de confianza y, a continuación, elija Editar la relación de confianza.
- En el documento de política de la relación de confianza, compruebe que el formato de la política coincide con el formato de la siguiente política JSON:
En la política JSON, revise el formato de la línea de propiedad Federated y de la línea de propiedad StringEquals. En la línea Federated, confirme que el código de región de AWS (your-region-code), el ID de cuenta (your-account-id) y el identificador único de OIDC (EXAMPLE_OIDC_IDENTIFIER) tienen el formato correcto. En la línea StringEquals, confirme que el código de región (your-region-code), el identificador único de OIDC (EXAMPLE_OIDC_IDENTIFIER), el espacio de nombres de Kubernetes (your-namespace) y el nombre de la cuenta de servicio de Kubernetes (your-namespace) tienen el formato correcto.{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Principal": { "Federated": "arn:aws:iam::your-account-id:oidc-provider/oidc.eks.your-region-code.amazonaws.com/id/EXAMPLE_OIDC_IDENTIFIER" }, "Action": "sts:AssumeRoleWithWebIdentity", "Condition": { "StringEquals": { "oidc.eks.your-region-code.amazonaws.com/id/EXAMPLE_OIDC_IDENTIFIER:sub": "system:serviceaccount:your-namespace:your-service-account", "oidc.eks.your-region-code.amazonaws.com/id/EXAMPLE_OIDC_IDENTIFIER:aud": "sts.amazonaws.com" } } } ] }
- Si edita el documento de política para corregir errores de formato, elija Actualizar la política de confianza.
Confirmación de que su cuenta de servicio existe y que tiene una anotación con el formato correcto para el ARN del rol de IAM
-
Confirme que su cuenta de servicio de Kubernetes existe:
$ kubectl get serviceaccount YOUR_ACCOUNT_NAME -n YOUR_NAMESPACE -o yaml
Nota: Sustituya YOUR_ACCOUNT_NAME por el nombre de su cuenta. Sustituya YOUR_NAMESPACE por su espacio de nombres.
Si el comando anterior no devuelve un nombre de cuenta de servicio, cree una cuenta de servicio. Para obtener más información, consulte Use more than one ServiceAccount en el sitio web de Kubernetes. -
Confirme que su cuenta de servicio tiene el nombre que espera. Además, confirme que su anotación role-arn tenga el formato correcto. Por ejemplo:
apiVersion: v1 kind: ServiceAccount metadata: annotations: eks.amazonaws.com/role-arn: arn:aws:iam::012345678912:role/my-example-iam-role name: my-example-serviceaccount namespace: my-test-namespace
Utilización de un pod de prueba para comprobar que la cuenta de servicio funciona
Ejecute un pod de prueba para comprobar que la cuenta de servicio funciona correctamente. A continuación, compruebe si el pod puede montar las variables de entorno correctamente y asumir el rol de IAM especificado.
-
Cree un archivo YAML local denominado awscli-pod.yaml. Por ejemplo:
apiVersion: v1 kind: Pod metadata: name: awscli labels: app: awscli spec: serviceAccountName: YOUR_SERVICE_ACCOUNT containers: - image: amazon/aws-cli command: - "sleep" - "604800" imagePullPolicy: IfNotPresent name: awscli restartPolicy: Always
Nota: Sustituya YOUR_SERVICE_ACCOUNT por el nombre de su cuenta de servicio de Kubernetes.
-
Cree el pod de prueba (desde el archivo YAML) en su espacio de nombres:
$ kubectl apply -f ./awscli-pod.yaml -n YOUR_NAMESPACE
Nota: Sustituya YOUR_NAMESPACE por su espacio de nombres.
-
Confirme que el pod awscli tenga las variables de entorno correctas:
$ kubectl exec -n YOUR_NAMESPACE awscli -- env | grep AWS
El resultado es similar al siguiente:
AWS_ROLE_ARN=arn:aws:iam::ACCOUNT_ID:role/IAM_ROLE_NAME AWS_WEB_IDENTITY_TOKEN_FILE=/var/run/secrets/eks.amazonaws.com/serviceaccount/token
-
Confirme que el pod de prueba utiliza el rol de IAM correcto:
$ kubectl exec -it awscli -n YOUR_NAMESPACE -- aws sts get-caller-identity
El resultado es similar al siguiente:
{ "UserId": "REDACTEDY471234567890:botocore-session-1632772568", "Account": "012345678912", "Arn": "arn:aws:sts::012345678912:assumed-role/your-iam-role/botocore-session-1632772568" }
Anote el valor Arn, incluido el nombre del rol de IAM que recibe en este resultado.
-
Después de comprobar el rol de IAM, elimine el pod awscli:
$ kubectl delete -f ./awscli-pod.yaml -n YOUR_NAMESPACE
Si el pod awscli muestra el rol de IAM correcto, la característica de roles de IAM para cuentas de servicio funciona correctamente.
Los pasos anteriores confirman que el token de IAM está montado correctamente en el pod. Si su aplicación sigue sin poder usar el archivo de token correctamente, es probable que haya un problema a nivel de aplicación o SDK. Es probable que este problema esté relacionado con la forma en que la aplicación captura las credenciales de AWS o porque la versión del SDK no es compatible. Para obtener más información, consulte Uso de la cadena predeterminada de proveedores de credenciales, Credentials en el sitio web de Boto3 y Uso de IRSA con el SDK de AWS.

Contenido relevante
- preguntada hace 3 meseslg...
- Respuesta aceptadapreguntada hace 3 meseslg...
- preguntada hace 4 meseslg...
- Respuesta aceptadapreguntada hace 3 meseslg...
- preguntada hace 3 meseslg...
- OFICIAL DE AWSActualizada hace un año
- OFICIAL DE AWSActualizada hace 2 meses