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!
¿Cómo puedo solucionar el error «You must be logged in to the server (Unauthorized)» cuando me conecto al servidor API de Amazon EKS?
Utilizo comandos kubectl para conectarme al servidor de API de Amazon Elastic Kubernetes Service (Amazon EKS). Se ha mostrado el mensaje «error: You must be logged in to the server (Unauthorized)».
Breve descripción
Este error aparece cuando Amazon EKS no autentica la entidad de AWS Identity and Access Management (IAM) configurada en kubectl. Se te autentica y autoriza para acceder a tu clúster de Amazon EKS en función de la entidad de IAM (usuario o rol) que utilices. Este error suele deberse a una de las siguientes configuraciones:
- Has configurado la herramienta kubectl para que utilice tu rol o usuario de IAM.
- Has asignado tu entidad de IAM al ConfigMap de aws-auth.
Para solucionar este problema, sigue los pasos de uno de los siguientes apartados según tu caso:
- Eres el creador del clúster
- No eres el creador del clúster
- Usa entradas de acceso
Solución
Nota: Si se muestran errores al ejecutar comandos de la Interfaz de la línea de comandos de AWS (AWS CLI), consulta Troubleshoot AWS CLI errors. Además, asegúrate de utilizar la versión más reciente de la AWS CLI.
Eres el creador del clúster
Se te considerará el creador del clúster si se ha utilizado tu entidad de IAM para crear el clúster de Amazon EKS. Para solucionar el error como creador del clúster, sigue estos pasos:
-
En Información de registros de Amazon CloudWatch, selecciona el grupo de registros para tu clúster de Amazon EKS. Por ejemplo, /aws/eks/my-cluster/cluster. A continuación, ejecuta la siguiente consulta:
fields @logstream, @timestamp, @message| sort @timestamp desc | filter @logStream like /authenticator/ | filter @message like "username=kubernetes-admin" | limit 50
Nota: Activa los registros del autenticador de Amazon EKS.
Esta consulta devuelve la entidad de IAM que está asignada como creadora del clúster:@messagetime="2022-05-26T18:55:30Z" level=info msg="access granted" arn="arn:aws:iam::123456789000:user/testuser" client="127.0.0.1:57586" groups="[system:masters]" method=POST path=/authenticate uid="aws-iam-authenticator:123456789000:AROAFFXXXXXXXXXX" username=kubernetes-admin
-
Revisa la entidad de IAM creadora del clúster para la AWS CLI. Para comprobar si la entidad de IAM está configurada para la AWS CLI en tu entorno de shell, ejecuta el siguiente comando:
$ aws sts get-caller-identity
También puedes usar un perfil específico para ejecutar este comando:
$ aws sts get-caller-identity --profile MY-PROFILE
El resultado devuelve el nombre de recurso de Amazon (ARN) de la entidad de IAM que está configurada para la AWS CLI.
Ejemplo:{ "UserId": "XXXXXXXXXXXXXXXXXXXXX", "Account": "XXXXXXXXXXXX", "Arn": "arn:aws:iam::XXXXXXXXXXXX:user/testuser" }
Confirma si la entidad de IAM que se devuelve coincide con la entidad de IAM creadora del clúster. Si la entidad de IAM devuelta no es la creadora del clúster, actualiza la configuración de la AWS CLI de modo que se utilice la entidad de IAM creadora del clúster.
-
Para actualizar o generar el archivo kubeconfig, ejecuta el siguiente comando:
$ aws eks update-kubeconfig --name eks-cluster-name --region aws-region
Nota: Sustituye eks-cluster-name por el nombre de tu clúster. Sustituya aws-region por el nombre de su región de AWS.
Para especificar un perfil de AWS CLI para el archivo kubeconfig, ejecuta el siguiente comando:$ aws eks update-kubeconfig --name eks-cluster-name --region aws-region --profile my-profile
Nota: Sustituye eks-cluster-name por el nombre de tu clúster. Sustituye aws-region por el nombre de tu región. Sustituye my-profile por el nombre de tu perfil.
-
Para confirmar que el archivo kubeconfig esté actualizado, ejecuta el siguiente comando:
$ kubectl config view --minify
-
Para confirmar si la entidad de IAM está autenticada y puedes acceder al clúster de EKS, ejecuta el siguiente comando:
$ kubectl get svc
Resultado de ejemplo:
NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE kubernetes ClusterIP 10.100.0.1 <none> 443/TCP 77d
No eres el creador del clúster
No eres el creador del clúster si no se ha utilizado tu entidad de IAM para crear el clúster. En tal caso, sigue estos pasos para asignar tu entidad de IAM al ConfigMap de aws-auth y permitir el acceso al clúster:
-
Revisa la entidad de IAM creadora del clúster para la AWS CLI. Para ver la entidad de IAM configurada para la AWS CLI en tu entorno de shell, ejecuta el siguiente comando:
$ aws sts get-caller-identity
También puedes usar un perfil específico para ejecutar este comando:
$ aws sts get-caller-identity --profile my-profile
El resultado devuelve el ARN de la entidad de IAM configurada para la AWS CLI.
Ejemplo:{ "UserId": "XXXXXXXXXXXXXXXXXXXXX", "Account": "XXXXXXXXXXXX", "Arn": "arn:aws:iam::XXXXXXXXXXXX:user/testuser" }
Confirma si la entidad de IAM que se devuelve coincide con la entidad de IAM creadora del clúster. Si la entidad de IAM devuelta no es la creadora del clúster, actualiza la configuración de la AWS CLI de modo que se utilice la entidad de IAM creadora del clúster. A continuación, usa kubectl para volver a intentar acceder al clúster. Si el problema persiste, continúa con el siguiente paso.
-
Si la entidad de IAM devuelta no es la creadora del clúster, añade tu entidad al ConfigMap de aws-auth para permitir que la entidad acceda al clúster. Como solo el administrador del clúster puede modificar el ConfigMap de aws-auth, completa una de las siguientes tareas:
Para usar la entidad de IAM creadora del clúster para acceder al clúster, sigue los pasos del apartado Es el creador del clúster.
Como alternativa, pide al administrador del clúster que realice esta acción. -
Para comprobar si tu entidad de IAM está en el ConfigMap de aws-auth, ejecuta el siguiente comando:
eksctl get iamidentitymapping --cluster cluster-name
Alternativa:
kubectl describe configmap aws-auth -n kube-system
Si tu entidad de IAM está en el ConfigMap de aws-auth, continúa con el siguiente paso. Si tu entidad de IAM no está en el ConfigMap de aws-auth, ejecuta el siguiente comando para asignar automáticamente tu entidad de IAM:
eksctl create iamidentitymapping \ --cluster $CLUSTER-NAME \ --region $REGION \ --arn arn:aws:iam::XXXXXXXXXXXX:user/testuser \ --group system:masters \ --no-duplicate-arns \ --username admin-user1
Como alternativa, edita el ConfigMap de aws-auth para asignar tu entidad de IAM manualmente:
$ kubectl edit configmap aws-auth -namespace kube-system
Para añadir una entidad de IAM al ConfigMap de aws-auth, añade el ARN del usuario o rol de IAM a mapUsers.
Ejemplo de usuario de IAM:mapUsers: | - userarn: arn:aws:iam::XXXXXXXXXXXX:user/testuser username: testuser groups: - system:masters
Ejemplo de rol de IAM:
mapRoles: | - rolearn: arn:aws:iam::XXXXXXXXXXXX:role/testrole username: testrole groups: - system:masters
Importante:
El rol de IAM debe asignarse sin la ruta. Para obtener más información sobre los requisitos de ruta de rolearn, consulta el apartado El ConfigMap de aws-auth no concede acceso al clúster.
Para especificar rolearn para un rol de IAM de AWS IAM Identity Center, elimina la ruta «/aws-reserved/sso.amazonaws.com/REGION» del ARN del rol. De lo contrario, la entrada del ConfigMap no podrá autorizarte como usuario válido.
El grupo system:masters concede acceso como superusuario para realizar cualquier acción en cualquier recurso. Para obtener más información, consulta Default roles and role bindings en el sitio web de Kubernetes. Para restringir el acceso de este usuario, puedes crear un recurso de enlace de roles y un rol de Amazon EKS. Para obtener más información, consulta Permisos necesarios. -
Ejecuta el siguiente comando para actualizar o generar el archivo kubeconfig. Asegúrate de que la AWS CLI esté configurada con tu entidad de IAM.
$ aws eks update-kubeconfig --name eks-cluster-name --region aws-region
Nota: Sustituye eks-cluster-name por el nombre de tu clúster. Sustituye aws-region por el nombre de tu región.
También puedes usar un perfil específico para ejecutar este comando:$ aws eks update-kubeconfig --name eks-cluster-name --region aws-region --profile my-profile
Nota: Sustituye eks-cluster-name por el nombre de tu clúster. Sustituye aws-region por el nombre de tu región. Sustituye my-profile por el nombre de tu perfil.
-
Para confirmar que el archivo kubeconfig esté actualizado, ejecuta el siguiente comando:
$ kubectl config view --minify
-
Para confirmar que se haya autenticado tu usuario o rol de IAM, vuelve a acceder al clúster. Por ejemplo, puedes ejecutar el siguiente comando para confirmar si se ha solucionado el error:
$ kubectl get svc
Resultado de ejemplo:
NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE kubernetes ClusterIP 10.100.0.1 <none> 443/TCP 77d
Utilización de entradas de acceso para recuperar el acceso al clúster
Utiliza la API CreateAccessEntry para proporcionar acceso a tu clúster de Amazon EKS o restaurarlo. Para obtener más información, consulta How can I use the Amazon EKS access entry API to recover access to an EKS cluster?
Solución de problemas
Cuando ejecutas un comando kubectl, se envía una solicitud al servidor de API de clúster de Amazon EKS. A continuación, el autenticador de Amazon EKS intenta autenticar esta solicitud. Si el autenticador de Amazon EKS no puede autenticar la solicitud, comprueba los registros del autenticador de EKS en CloudWatch. Sigue los siguientes consejos para identificar el problema y solucionarlo.
Accede a tus registros del autenticador de EKS
- Activa el registro para tu clúster de Amazon EKS.
- Abre Información de registros de Amazon CloudWatch.
- Selecciona el grupo de registros para tu clúster. Ejemplo: «/aws/eks/example-cluster/cluster».
- Ejecuta la siguiente consulta:
Para identificar las líneas de registro del mismo intervalo de tiempo en el que se produjo el error, ejecuta comandos kubectl.fields @timestamp, @message| filter @logStream like /authenticator/ | sort @timestamp desc | limit 1000
Revisión de los registros del autenticador de EKS
Según cuál sea la causa del error, completa las siguientes tareas:
-
Si el problema se debe al uso de una entidad de IAM incorrecta para kubectl, revisa la configuración de la AWS CLI y kubectl kubeconfig. Asegúrate de utilizar la entidad de IAM correcta. En el siguiente resultado de ejemplo, no se puede validar la entidad de IAM utilizada por kubectl. Revisa la entidad de IAM utilizada por kubectl y asegúrate de que la entidad exista en IAM y de que el acceso programático de la entidad esté activado.
Resultado de ejemplo:time="2022-12-26T20:46:48Z" level=warning msg="access denied" client="127.0.0.1:43440" error="sts getCallerIdentity failed: error from AWS (expected 200, got 403). Body: {\"Error\":{\"Code\":\"InvalidClientTokenId\",\"Message\":\"The security token included in the request is invalid.\",\"Type\":\"Sender\"},\"RequestId\":\"a9068247-f1ab-47ef-b1b1-cda46a27be0e\"}" method=POST path=/authenticate
-
Si el problema se debe a que tu entidad de IAM no está asignada en el ConfigMap de aws-auth o está asignada incorrectamente, revisa el ConfigMap de aws-auth. Asegúrate de que la entidad de IAM esté asignada correctamente y cumpla los requisitos que se detallan en la sección No eres el creador del clúster. En el caso de entidades de IAM asignadas incorrectamente o no asignadas, los registros del autenticador de EKS tienen un aspecto similar al del siguiente resultado de ejemplo:
time="2022-12-28T15:37:19Z" level=warning msg="access denied" arn="arn:aws:iam::XXXXXXXXXX:role/admin-test-role" client="127.0.0.1:33384" error="ARN is not mapped" method=POST path=/authenticate
-
Si se ha actualizado el ConfigMap de aws-auth y has perdido el acceso al clúster, utiliza la entidad de IAM creadora del clúster para acceder a él. Como no es necesario asignar el creador del clúster en el ConfigMap de aws-auth, utiliza esta entidad de IAM para acceder al clúster.
-
Si se eliminó la entidad de IAM creadora del clúster, vuelve a crear la misma entidad de IAM con la misma convención de nomenclatura. Entonces, esta entidad recreada podrá tener el mismo ARN que la entidad de IAM original. A continuación, sigue los pasos del apartado Eres el creador del clúster para utilizar la entidad de IAM con el fin de acceder al clúster.
-
Si el creador del clúster es un rol de IAM creado para un usuario de SSO que se ha eliminado, no podrás volver a crear este rol de IAM. En tal caso, ponte en contacto con AWS Support para obtener ayuda.
Información relacionada
Using RBAC authorization en el sitio web de Kubernetes
Concesión de acceso a los usuarios de IAM a las entradas de acceso de Kubernetes con EKS
EKS Access Entries en el sitio web de eksctl
Vídeos relacionados


Contenido relevante
- preguntada hace 25 díaslg...
- preguntada hace 14 díaslg...
- preguntada hace 18 díaslg...
- preguntada hace 2 meseslg...
- preguntada hace un meslg...
- OFICIAL DE AWSActualizada hace 2 años