¿Cómo resuelvo el error “You must be logged in to the server (Unauthorized)” (Debe registrarse en el servidor (no autorizado)) cuando me conecto al servidor de la API de Amazon EKS?

10 minutos de lectura
0

Estoy usando los comandos de kubectl para conectarme al servidor interfaz de programación de aplicaciones (API) de Amazon Elastic Kubernetes Service (Amazon EKS). Recibí el mensaje “error: You must be logged in to the server (Unauthorized)” (error: Debe registrarse en el servidor [no autorizado]).

Descripción breve

Recibe este error cuando la entidad de AWS Identity and Access Management (IAM) que está configurada en kubectl no está autenticada por Amazon EKS.

Está autenticado y autorizado para acceder a su clúster de Amazon EKS en función de la entidad de IAM (usuario o rol) que utiliza. Por lo tanto, asegúrese de lo siguiente:

  • Configuró la herramienta kubectl para usar su usuario o rol de IAM.
  • Su entidad de IAM está asignada al aws-auth ConfigMap.

Para resolver este problema, debe completar los pasos de una de las siguientes secciones según su caso de uso:

  • Ha creado el clúster
  • El clúster lo ha creado otra persona

Resolución

Si recibe errores al ejecutar los comandos de la Interfaz de la línea de comandos de AWS (AWS CLI), confirme que está ejecutando una versión reciente de la AWS CLI.

Ha creado el clúster

Usted es el creador del clúster si su entidad de IAM se utilizó para crear el clúster de Amazon EKS.

1.    Ejecute la siguiente consulta en Amazon CloudWatch Log Insights para identificar el ARN del creador del clúster:

Primero, seleccione el grupo de registros para su clúster de Amazon EKS (por ejemplo: /aws/eks/my-cluster/cluster). A continuación, ejecute la siguiente consulta:

fields @logstream, @timestamp, @message
| sort @timestamp desc
| filter @logStream like /authenticator/
| filter @message like "username=kubernetes-admin"
| limit 50

Nota: Asegúrese de haber activado los registros de autenticación de Amazon EKS.

Esta consulta devuelve la entidad de IAM que está asignada como creadora del clúster:

@message
time="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

2.    Asegúrese de configurar la CLI de AWS con la entidad IAM creadora del clúster. Para comprobar si la entidad de IAM está configurada para la CLI de AWS en su entorno de shell, ejecute el siguiente comando:

$ aws sts get-caller-identity

También puede ejecutar este comando con un perfil específico:

$ 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 CLI de AWS.

Ejemplo:

{
    "UserId": "XXXXXXXXXXXXXXXXXXXXX",
    "Account": "XXXXXXXXXXXX",
    "Arn": "arn:aws:iam::XXXXXXXXXXXX:user/testuser"
}

Confirme que la entidad de IAM que se devuelve coincide con la entidad IAM creadora del clúster. Si la entidad de IAM devuelta no es la creadora del clúster, actualice la configuración de la CLI de AWS para usar la entidad IAM creadora del clúster.

3.    Actualice o genere el archivo kubeconfig al utilizar el siguiente comando:

$ aws eks update-kubeconfig --name eks-cluster-name --region aws-region

Nota:

  • Sustituya eks-cluster-name por el nombre de su clúster.
  • Sustituya aws-region por el nombre de su región de AWS.

Para especificar un perfil de CLI de AWS, ejecute el siguiente comando:

$ aws eks update-kubeconfig --name eks-cluster-name —region aws-region —profile my-profile

Nota:

  • Sustituya eks-cluster-name por el nombre de su clúster.
  • Sustituya aws-region por el nombre de su región.
  • Sustituya my-profile por el nombre de tu perfil.

4.    Para confirmar que el archivo kubeconfig esté actualizado, ejecute el comando siguiente:

$ kubectl config view --minify

5.    Para confirmar que su entidad de IAM está autenticada y que puede acceder a su clúster de EKS, ejecute 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

El clúster lo ha creado otra persona

Usted no es el creador del clúster si su entidad de IAM no se usó para crear el clúster. En este caso, debe asignar su entidad de IAM al aws-auth ConfigMap para permitir el acceso al clúster.

1.    Asegúrese de configurar la CLI de AWS con su entidad de IAM. Para ver la entidad de IAM que está configurada para la CLI de AWS en su entorno de shell, ejecute el siguiente comando:

$ aws sts get-caller-identity

También puede ejecutar este comando con un perfil específico:

$ aws sts get-caller-identity --profile my-profile

El resultado devuelve el ARN de la entidad de IAM que está configurada para AWS CLI.

Ejemplo:

{
    "UserId": "XXXXXXXXXXXXXXXXXXXXX",
    "Account": "XXXXXXXXXXXX",
    "Arn": "arn:aws:iam::XXXXXXXXXXXX:user/testuser"
}

Confirme que la entidad de IAM que se devuelve es su entidad de IAM. Si la entidad de IAM devuelta no es la que se usa para interactuar con su clúster, primero actualice la configuración de la CLI de AWS para usar la entidad de IAM correcta. A continuación, vuelva a intentar acceder a su clúster mediante kubectl. Si el problema persiste, continúe con el paso 2.

2.    Si la entidad de IAM devuelta no es la creadora del clúster, agregue su entidad de IAM al aws-auth ConfigMap. Esto permite que la entidad de IAM acceda al clúster.

Solo el administrador del clúster puede modificar aws-auth ConfigMap. Por lo tanto, realice una de las siguientes acciones:

  • Siga las instrucciones de la sección You're cluster creator(Es el creador del clúster) para acceder al clúster mediante la entidad IAM creadora del clúster.
  • Pida al administrador del clúster que realice esta acción.

Compruebe si su entidad de IAM está en el aws-auth ConfigMap al ejecutar el siguiente comando:

eksctl get iamidentitymapping --cluster cluster-name

o

kubectl describe configmap aws-auth -n kube-system

Si su entidad de IAM se encuentra en aws-auth ConfigMap, puede pasar al paso 3.

Mapee su entidad de IAM automáticamente mediante la ejecución del siguiente comando:

eksctl create iamidentitymapping \
    --cluster $CLUSTER-NAME \
    --region $REGION \
    --arn arn:aws:iam::XXXXXXXXXXXX:user/testuser \
    --group system:masters \
    --no-duplicate-arns \
    --username admin-user1

O bien, puede mapear su entidad de IAM manualmente al editar el aws-auth ConfigMap:

$ kubectl edit configmap aws-auth --namespace kube-system

Para agregar un usuario de IAM, agregue el ARN del usuario de IAM a mapUsers.

Ejemplo:

mapUsers: |
  - userarn: arn:aws:iam::XXXXXXXXXXXX:user/testuser
    username: testuser
    groups:
      - system:masters

Para agregar un rol de IAM, agregue el ARN del rol de IAM a mapRoles.

Ejemplo:

mapRoles: |
  - rolearn: arn:aws:iam::XXXXXXXXXXXX:role/testrole
    username: testrole
    groups:
      - system:masters

Importante:

  • El rol de IAM se debe asignar sin la ruta. Si desea obtener más información sobre los requisitos para las rutas de rolearn, amplíe la secciónaws-auth ConfigMap no concede acceso al clúster en Solución de problemas de IAM.
  • Para especificar el rolearn para un rol de IAM de AWS IAM Identity Center (sucesor de AWS Single Sign-On), elimine la ruta “/aws-reserved/sso.amazonaws.com/REGION” del ARN de rol. De lo contrario, la entrada en ConfigMap no puede autorizarlo como usuario válido.
  • El grupo system:masters permite llevar a cabo un acceso de superusuario para llevar a cabo cualquier acción en cualquier recurso. Si desea obtener más información, consulte Roles predeterminados y enlaces de roles. Para restringir el acceso de este usuario, puede crear un recurso de enlace de roles y roles de Amazon EKS. Para ver un ejemplo de acceso restringido para los usuarios que ven recursos en la consola de Amazon EKS, siga los pasos 2 y 3 de Permisos necesarios.

3.    Actualice o genere el archivo kubeconfig al utilizar el siguiente comando. Asegúrese de que la CLI de AWS esté configurada con la entidad de IAM que aparece en el paso 1.

$ aws eks update-kubeconfig --name eks-cluster-name --region aws-region

Nota:

  • Sustituya eks-cluster-name por el nombre de su clúster.
  • Sustituya aws-region por el nombre de su región de AWS.

También puede ejecutar este comando con un perfil específico:

$ aws eks update-kubeconfig --name eks-cluster-name —region aws-region —profile my-profile

Nota:

  • Sustituya eks-cluster-name por el nombre de su clúster.
  • Sustituya aws-region por el nombre de su región de AWS.
  • Sustituya my-profile por el nombre de tu perfil.

4.    Para confirmar que el archivo kubeconfig esté actualizado, ejecute el comando siguiente:

$ kubectl config view --minify

5.    Para confirmar que su usuario o rol de IAM está autenticado, intente volver a acceder al clúster. Por ejemplo, puede ejecutar el siguiente comando para confirmar que se ha resuelto 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

Consejos adicionales para la solución de problemas

Si el error persiste, utilice los siguientes consejos de solución de problemas para identificar el problema.

Cuando ejecuta un comando kubectl, se envía una solicitud al servidor API del clúster Amazon EKS. A continuación, el autenticador Amazon EKS intenta autenticar esta solicitud. Por lo tanto, compruebe los registros del autenticador EKS en CloudWatch para identificar el problema.

1.    Asegúrese de haber activado el registro en su clúster de Amazon EKS.

2.    Abra CloudWatch Log Insights.

3.    Seleccione el grupo de registros de su clúster. Ejemplo: “/aws/eks/example-cluster/cluster”.

4.    Ejecute la siguiente consulta:

fields @timestamp, @message
| filter @logStream like /authenticator/
| sort @timestamp desc
| limit 1000

Identifique las líneas de registro del mismo intervalo de tiempo en el que se produjo el error al ejecutar los comandos kubectl. Puede encontrar más información sobre la causa del error en los registros de autenticación de Amazon EKS.

  • Si el problema se debe al uso de una entidad de IAM incorrecta para kubectl, revise la configuración de kubectl kubeconfig y de la CLI de AWS. Asegúrese de utilizar la entidad de IAM correcta. Por ejemplo, suponga que los registros tienen un aspecto similar al siguiente. Este resultado significa que la entidad de IAM utilizada por kubectl no se puede validar. Asegúrese de que la entidad de IAM utilizada por kubectl exista en IAM y que el acceso programático de la entidad esté activado.
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 su entidad de IAM no está mapeada en aws-auth ConfigMap o está mapeada incorrectamente, revise el aws-auth ConfigMap. Asegúrese de que la entidad de IAM esté mapeada correctamente y cumpla con los requisitos que se enumeran en la sección You're not cluster creator (No es el creador del clúster). En este caso, los registros del autenticador EKS tienen un aspecto similar al siguiente:
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 actualizó el aws-auth ConfigMap y perdió el acceso al clúster, puede acceder al clúster mediante la entidad de IAM del creador del clúster. Esto se debe a que no es necesario mapear al creador del clúster en el aws-auth ConfigMap.
  • Si se eliminó la entidad de IAM del creador del clúster, primero cree de nuevo el mismo usuario o rol de IAM. A continuación, acceda al clúster mediante esta entidad de IAM y siga los pasos de la sección You're the cluster creator (Usted es el creador del clúster).
  • Si el creador del clúster es un rol de IAM que se creó para un usuario de SSO que se eliminó, no puede volver a crear este rol de IAM. En este caso, póngase en contacto con AWS Support para obtener ayuda.

Información relacionada

Activar el acceso de usuario y rol de IAM a su clúster

How do I provide access to other IAM users and roles after cluster creation in Amazon EKS? (¿Cómo proporciono acceso a otros usuarios y roles de IAM después de crear el clúster en Amazon EKS?)

Resolución de problemas de Amazon EKS

Documentación de Kubernetes para usar la autorización RBAC

OFICIAL DE AWS
OFICIAL DE AWSActualizada hace un año