¿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».

Descripción breve

Es posible que se muestre este error cuando utilice la Consola de administración de AWS con una identidad (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 para acceder a la API de Kubernetes. Para ver los recursos de Kubernetes en la Consola de administración de AWS, su identidad de AWS IAM debe estar asignado al ConfigMap aws-auth en su clúster de Amazon EKS. Para obtener más información, consulte Uso de la autorización RBAC en el sitio web de Kubernetes.

Al crear un clúster de Amazon EKS, a su identidad 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. La consola de administración de AWS usa IAM para autorizar y el clúster de EKS usa el sistema RBAC de Kubernetes. Dado que el ConfigMap de aws-auth del clúster asocia las identidades de IAM con las identidades de RBAC del clúster, el ConfigMap de aws-auth asocia las identidades de IAM con las identidades de Kubernetes.

Resolución

Requisitos previos

En función de su situación, 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 ARN de la identidad de IAM del usuario de la Consola de administración de AWS. AWS IAM Authenticator no permite una ruta en el ARN de rol que se usa en ConfigMap. Si se trata de un rol de IAM, utilice el siguiente formato de ARN:
    arn:aws:iam::111122223333:rol/ejemplo
    Nota: No utilices el siguiente formato porque contiene información innecesaria:
    arn:aws:iam::111122223333:rol/mi-equipo/desarrolladores/ejemplos
  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 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 usa para acceder a la consola. Esta identidad de IAM 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 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. Después, utilice una de las siguientes opciones para acceder al ARN.

Nota: Si se muestran errores al ejecutar comandos de la AWS CLI, consulte Errores de solución de problemas de la AWS CLI. Además, asegúrese de utilizar la versión más reciente de la AWS CLI.

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

CloudShell

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

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. Compruebe 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. 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.

Agregue el nuevo usuario o rol de IAM al RBAC de Kubernetes

Para agregar el nuevo usuario o rol de IAM al RBAC de Kubernetes, primero configure la CLI de AWS para usar el IAM del creador del clúster. Para comprobar si la AWS CLI se ha configurado correctamente con la identidad 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"
}

A continuación, utilice kubectl o eksctl para modificar el ConfigMap de aws-auth.

kubectl

  1. Para usar kubectl para modificar el ConfigMap de aws-auth, ejecute el siguiente comando kubectl para tener acceso al clúster:

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

    La consola muestra el ConfigMap actual. Si no puede conectarse al clúster, actualice el archivo kubeconfig. Como la identidad que crea el clúster siempre tiene acceso al clúster, ejecute el comando con una identidad de IAM que tenga acceso al clúster:

    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, conéctese al punto de enlace del servidor de EKS desde la nube virtual privada (VPC) en la que se ejecuta el clúster de EKS.

  2. 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
  3. Agregue un usuario o rol de IAM:

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

    O agregue el rol de IAM a mapRoles. Por ejemplo:

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

Se recomienda no utilizar system:masters en entornos de producción, ya que system:masters permite a un superusuario acceder para realizar cualquier acción en cualquier recurso. También, se recomienda minimizar los permisos concedidos. Cree un rol con acceso solo a un espacio de nombres específico. Revise la sección Ver los recursos de Kubernetes en un espacio de nombres específico de Permisos necesarios.

eksctl

Para usar la herramienta eksctl para actualizar el ConfigMap de aws-auth, ejecute 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

Siga estos pasos:

  1. Abra la consola de Amazon EKS.
  2. En el 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 Deploymentsdeployments.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 6 meses