¿Cómo puedo solucionar el error «Your current user or role does not have access to Kubernetes objects on this EKS cluster» en Amazon EKS?

8 minutos de lectura
0

En Amazon Elastic Kubernetes Service (Amazon EKS), se muestra el siguiente error: «Your current user or role does not have access to Kubernetes objects on this EKS cluster».

Breve descripción

Es posible que se muestre este error cuando utilice la Consola de administración de AWS con un usuario o rol de AWS Identity and Access Management (IAM). El error indica que el usuario o rol de IAM no cuenta con los permisos requeridos RBAC (del sitio web de Kubernetes) para acceder a la API de Kubernetes. Para ver los recursos de Kubernetes en la Consola de administración de AWS, su usuario o rol de AWS IAM debe estar asignado al ConfigMap aws-auth en su clúster de Amazon EKS.

Al crear un clúster de Amazon EKS, a su usuario o rol de IAM se le conceden automáticamente los permisos de system:masters en la configuración de RBAC del clúster. Esto le permite ver los recursos de Kubernetes por medio de la consola de Amazon EKS. También le permite editar el ConfigMap aws-auth en Kubernetes y conceder la posibilidad de interactuar con el clúster a los usuarios o roles de AWS adicionales.

Se utilizan dos sistemas de autorización diferentes. La Consola de administración de AWS usa IAM. El clúster de EKS usa el sistema RBAC de Kubernetes (del sitio web de Kubernetes). El ConfigMap aws-auth del clúster asocia las identidades de IAM (usuarios o roles) con identidades de RBAC del clúster. Esto significa que el ConfigMap aws-auth asocia las identidades de IAM con identidades de Kubernetes.

Solución

Requisitos previos

Antes de empezar, recopile la siguiente información.

Usuario o rol que no es administrador

Si su usuario o rol de IAM no es el administrador del clúster y necesita visibilidad en la consola de Amazon EKS, siga estos pasos:

1.    Obtenga el nombre de recurso de Amazon (ARN) de la identidad de IAM del usuario de la Consola de administración de AWS.

Si se trata de un rol de IAM, utilice el siguiente formato de ARN:

arn:aws:iam::111122223333:role/example

Importante: No use el siguiente formato:

arn:aws:iam::111122223333:role/my-team/developers/example

2.    Proporcione el ARN al administrador del clúster y solicite que lo agregue al ConfigMap aws-auth.

Nota: Consulte los pasos para acceder a su ARN en el apartado Identificación del ARN de la identidad de IAM del usuario de la Consola de administración de AWS.

Usuario o rol creador o administrador del clúster

Si es el creador o el administrador del clúster, utilice la herramienta kubectl o la herramienta eksctl para administrar el ConfigMap aws-auth.

Nota: De forma predeterminada, el grupo system:masters está vinculado al clusterrole denominado cluster-admin. clusterrole utiliza el comodín (“*”) para los recursos y los verbos en su regla PolicyRule. Esto significa que cualquier usuario asignado al grupo system:masters tendrá total acceso a todos los recursos de Kubernetes en el clúster.

Consulte los pasos detallados del apartado Identificación del creador del clúster para saber cómo pueden identificar el estado «admin» los creadores y administradores de un clúster.

Identificación del ARN de la identidad de IAM del usuario de la Consola de administración de AWS

Identifique el usuario o rol de IAM que está usando para acceder a la consola. Puede ser diferente de la identidad que utiliza con la Interfaz de la línea de comandos de AWS (AWS CLI). Confirme que el usuario o rol de IAM identificado tenga los permisos para ver los nodos y las cargas de trabajo de todos los clústeres en la Consola de administración de AWS. A continuación, obtenga el ARN de la identidad de IAM. Utilice una de las siguientes opciones para acceder al ARN.

Uso de la AWS CLI

Si tiene acceso al usuario o rol de IAM con la AWS CLI, ejecute el siguiente comando:

aws sts get-caller-identity --query Arn

Inicio de CloudShell

Si no tiene acceso a la AWS CLI, ejecute el siguiente comando:

aws sts get-caller-identity --query Arn

El resultado es similar al siguiente:

"arn:aws:iam::111122223333:role/testrole"

Alternativa:

"arn:aws:iam::111122223333:user/testuser"

Nota:

  • Si se trata del ARN de un rol de IAM, asegúrese de que el formato sea similar al formato del ARN obtenido en el apartado Requisitos previos.
  • Si el ARN incluye assumed-role, deberá obtener el ARN del rol. Por ejemplo, el ARN del rol asumido arn:aws:sts::123456:assumed-role/MyRole/aadams está asociado al ARN del rol arn:aws:sts::123456:role/MyRole. Puede comprobar este valor en la consola de IAM.

Identificación del creador del clúster

Para encontrar el rol de administrador o creador del clúster con permisos principales para configurar el clúster, busque la llamada a la API CreateCluster en AWS CloudTrail. A continuación, consulte la sección userIdentity de la llamada a la API.

Consejo: Si encuentra el nombre del creador del clúster en CloudTrail, pero se ha eliminado, vuelva a crear un nuevo usuario o rol de IAM con el mismo nombre. Como esta nueva entidad de IAM tiene el mismo ARN que el creador del clúster original, hereda el mismo acceso de administrador al clúster.

Nota: CloudTrail solo proporciona 90 días de historial.

Agregación de un nuevo usuario o rol de IAM al RBAC de Kubernetes mediante kubectl o eksctl

Antes de elegir la herramienta kubectl o eksctl para editar el ConfigMap aws-auth, asegúrese de completar el paso 1. Luego, siga los pasos 2 a 4 para la edición con kubectl. Para la edición con eksctl, continúe con el paso 5.

1.    Tras identificar el creador o el administrador del clúster, configure la AWS CLI de modo que use el IAM del creador del clúster. Para obtener más información, consulte Configuración de la AWS CLI.

Para comprobar si la AWS CLI se ha configurado correctamente con la entidad de IAM, ejecute el siguiente comando:

$ aws sts get-caller-identity

El resultado devuelve el ARN del usuario o rol de IAM. Por ejemplo:

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

Nota: Si se muestran errores al ejecutar comandos de la AWS CLI, asegúrese de estar utilizando la versión más reciente de la AWS CLI.

2.     Para modificar el ConfigMap aws-auth con kubectl, debe tener acceso al clúster. Ejecute el siguiente comando kubectl:

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

La consola muestra el ConfigMap actual.

Si no puede conectarse al clúster, pruebe a actualizar el archivo kubeconfig. Ejecute el archivo con una identidad de IAM que tenga acceso al clúster. La identidad que creó el clúster siempre tendrá acceso a él.

aws eks update-kubeconfig --region region_code --name my_cluster

Nota: Sustituya region_code por el código de la región de AWS del clúster de EKS y my_cluster por el nombre del clúster de EKS.

Los comandos kubectl deben conectarse al punto de enlace del servidor de EKS. Si el punto de enlace del servidor de la API es público, deberá tener acceso a Internet para conectarse al punto de enlace. Si el punto de enlace del servidor de la API es privado, deberá conectarse al punto de enlace del servidor de EKS desde la VPC en la que se ejecuta el clúster de EKS.

3.    Para editar el ConfigMap aws-auth en el editor de texto como creador o administrador del clúster, ejecute el siguiente comando:

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

4.   Agregue un usuario o rol de IAM:

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

Alternativa:

Agregue el rol de IAM a mapRoles. Por ejemplo:

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

Tenga en cuenta la siguiente información:

  • system:masters concede acceso como superusuario para realizar cualquier acción en cualquier recurso. Se desaconseja en los entornos de producción.
  • Se recomienda minimizar los permisos concedidos. Plantéese crear un rol con acceso solo a un espacio de nombres específico. Para obtener más información, consulte Using RBAC Authorization en el sitio web de Kubernetes. Además, consulte Permisos necesarios y lea el ejemplo de acceso restringido a la consola de Amazon EKS en el apartado Ver recursos de Kubernetes en un espacio de nombres específico.

5.    La herramienta eksctl le permite actualizar el ConfigMap aws-auth con el siguiente comando:

eksctl create iamidentitymapping --cluster your_cluster_Name --region=your_region --arn YOUR_IAM_ARN <arn:aws:iam::123456:role testing=""> --group system:masters --username admin</arn:aws:iam::123456:role>

Nota: Sustituya your_cluster_Name por el nombre de su clúster de EKS, your_region por la región del clúster de EKS y YOUR_IAM_ARN por su rol de IAM o el ARN.

Comprobación del acceso a su clúster de Amazon EKS

1.    Abra la consola de Amazon EKS.

2.    En la sección Amazon EKS del panel de navegación, seleccione Clústeres.

3.    Seleccione su clúster.

4.    Compruebe si hay errores en las pestañas Información general y Cargas de trabajo.

Si lo ha configurado para un espacio de nombres específico, aparecerá el siguiente mensaje de error en la consola de Amazon EKS:

Error loading Deployments
deployments.apps is forbidden: User "xxxxxx" cannot list resource "deployments" in API group "apps" at the cluster scope or in the namespace "xxxxxxx"

El error no aparece para el espacio de nombres específico.

Para solucionar los problemas con los mensajes de error, consulte No puedo ver Nodos en la pestaña Compute (Informática) o cualquier cosa de la pestaña Resources (Recursos) y recibe un error en la AWS Management Console.


OFICIAL DE AWS
OFICIAL DE AWSActualizada hace un año