¿Cómo puedo solucionar los problemas de RBAC con Amazon EKS?

9 minutos de lectura
0

Cuando utilizo mi clúster de Amazon Elastic Kubernetes Service (Amazon EKS), quiero solucionar errores, como el acceso denegado, no autorizado o prohibido.

Descripción breve

AWS Identity and Access Management (IAM) proporciona autenticación al clúster y se basa en el control de acceso basado en roles (RBAC) nativo de Kubernetes para la autorización. Cuando un usuario o rol de IAM crea un clúster de Amazon EKS, la entidad de IAM se agrega a la tabla de autorización de RBAC de Kubernetes con los permisos system:masters.

Para agregar usuarios con acceso de administrador a un clúster de Amazon EKS, siga estos pasos:

  1. Permita los permisos de consola de IAM necesarios para los usuarios de IAM asociados, para que los usuarios puedan realizar las operaciones de clúster necesarias.
  2. Actualice el aws-auth ConfigMap para proporcionar a los usuarios de IAM adicionales el rol del clúster y enlaces de roles. Para obtener más información, consulte Agregar usuarios o roles de IAM a su clúster de Amazon EKS.

Nota: El aws-auth ConfigMap no admite caracteres comodín. Se recomienda utilizar eksctl para editar el ConfigMap. Las entradas mal formuladas pueden provocar un bloqueo.

Ejecute el siguiente comando kubectl auth can-i para comprobar que los permisos de RBAC están configurados correctamente:

kubectl auth can-i list secrets --namespace dev --as dave

Al ejecutar el comando kubectl, el mecanismo de autenticación completa los siguientes pasos principales:

  • Kubectl lee la configuración de contexto desde ~/.kube/config.
  • El comando aws eks get-token de la Interfaz de la línea de comandos de AWS (AWS CLI) se ejecuta para obtener las credenciales, tal como se define en .kube/config.
  • La solicitud de la API k8s se envía y se firma con el token anterior.

Nota: No puede modificar la caducidad de 15 minutos del token que se obtiene mediante aws eks get-token.

Resolución

Nota: Si se producen errores al ejecutar comandos de la Interfaz de la línea de comandos de AWS (AWS CLI), asegúrese de que utiliza la versión más reciente de la AWS CLI.

Problemas de autenticación

Error: "The cluster is inaccessible due to the cluster creator IAM user being deleted" (No se puede acceder al clúster porque se eliminó el usuario de IAM creador del clúster)

Si recibe el error anterior, debe volver a crear el usuario de IAM creador del clúster con el mismo nombre que el clúster. Para ello, busque información sobre el administrador y el creador del clúster.

Si creó el clúster en los últimos 90 días, puede buscar en AWS CloudTrail las llamadas a la API CreateCluster. Los permisos del creador del clúster son idénticos a los permisos system:masters. Si tiene otros usuarios con permisos system:masters, no depende del creador del clúster. Si ya se autenticó con el clúster Amazon EKS, puede revisar los registros de autenticación anteriores en el grupo de registros de Amazon CloudWatch. Utilice la siguiente consulta de Información de registros de CloudWatch para comprobar los detalles del usuario y el rol del administrador del clúster:

fields @timestamp, @message
| sort @timestamp desc
| filter @logStream like /authenticator/
| filter @message like "system:masters"

Para volver a crear el usuario y el rol de IAM del creador del clúster, ejecute los siguientes comandos:

Importante: Asegúrese de comprobar todos los comandos de AWS CLI y reemplazar todas las instancias de cadenas de ejemplo con los valores requeridos. Por ejemplo, reemplace EJEMPLO-USUARIO por su nombre de usuario.

aws iam create-user --user-name <EXAMPLE-USER>
aws iam create-role --role-name <EXAMPLE-ROLE>

Error: "Could not be assumed because it does not exist or the trusted entity is not correct or an error occurred when calling the AssumeRole operation" (No se pudo suponer porque no existe, la entidad de confianza no es correcta o se ha producido un error al llamar a la operación AssumeRole)

Si recibe el error anterior, compruebe que la política de confianza concede correctamente los permisos asumidos al usuario. Para más información, consulte Tutorial de IAM: delegar el acceso a través de cuentas de AWS utilizando roles de IAM.

Para identificar a los usuarios locales que implementan el clúster de Amazon EKS de manera predeterminada, ejecute el siguiente comando:

kubectl get clusterroles -l kubernetes.io/bootstrapping=rbac-defaults

Desactive el acceso anónimo para las acciones de la API. Los usuarios anónimos tienen el asunto establecido en nombre: system:unauthenticated. Para identificar a los usuarios anónimos, ejecute el siguiente comando:

kubectl get clusterrolebindings.rbac.authorization.k8s.io -o json | jq '.items[] | select(.subjects[]?.name=="system:unauthenticated")'

Para obtener más información, consulte las guías de prácticas recomendadas de Amazon EKS.

Problemas de autorización

Error: "Couldn't get current server API group list" (No se pudo obtener la lista actual de grupos de API del servidor)

Para solucionar el error anterior, consulte No autorizado o acceso denegado (kubectl).

Error: "You must be logged in to the server (Unauthorized)" (Debe iniciar sesión en el servidor [No autorizado])

Para solucionar el error anterior, consulte ¿Cómo puedo solucionar el error “Debe iniciar sesión en el servidor (No autorizado)”?

Error: "You must be logged in to the server (the server has asked for the client to provide credentials)" (Debe iniciar sesión en el servidor [el servidor ha pedido al cliente que proporcione sus credenciales])

El error anterior se produce cuando se utiliza una entidad de IAM para realizar llamadas a la API y no se asigna correctamente la entidad de IAM. Debe asignar la entidad de IAM a un rol de Amazon EKS en el aws-auth ConfigMap del clúster. Para obtener más información, consulte Habilitación del acceso de usuarios y roles de IAM al clúster.

Error: "Can't describe cluster control plane: AccessDeniedException" (No se puede describir el plano de control del clúster: AccessDeniedException)

El error anterior se produce al actualizar kubeconfig con un usuario y un rol que no tienen permiso para realizar la acción eks:DescribeCluster.

Error: "Current user or role does not have access to Kubernetes objects on this EKS cluster" (El usuario o rol actual no tiene acceso a los objetos de Kubernetes en este clúster de EKS)

Para obtener información sobre el error anterior, consulte Resolver el error de acceso a objetos de Kubernetes en Amazon EKS.

Error: "Changing the cluster creator IAM to another user/role" (Cambiar el IAM del creador del clúster a otro usuario/rol)

Después de crear un clúster, no puede cambiar el IAM del creador del clúster a otro usuario, porque no puede configurar un IAM del creador del clúster.

Problemas de red

Error: "Unable to connect to the server: dial tcp 172.xx.xx.xx.xx:443: i/o timeout" (No se pudo conectar al servidor: marque tcp 172.xx.xx.xx.xx:443: tiempo de espera de e/s)

Si recibe este error, confirme que los grupos de seguridad permiten el tráfico desde la dirección IP de origen del remitente.

Error: "Unable to connect to the server: x509: certificate is valid for *.example.com , example.com , not https://xxx.gr7.us-east-1.eks.amazonaws.com" (No se puede conectar al servidor: x509: el certificado es válido para *.example.com, example.com, no para https://xxx.gr7.us-east-1.eks.amazonaws.com)

Si recibe este error, compruebe que la configuración del proxy sea correcta.

Problemas de KUBECONFIG

Error: "The connection to the server localhost:8080 was refused" (Se ha rechazado la conexión al servidor localhost:8080)

El error anterior se produce cuando falta el archivo kubeconfig. El archivo kubeconfig se encuentra en ~/.kube/config y kubectl requiere el archivo. Este archivo contiene las credenciales del clúster necesarias para conectarse al servidor de la API del clúster. Si kubectl no encuentra este archivo, intenta conectarse a la dirección predeterminada (localhost:8080).

Error: "Kubernetes configuration file is group-readable" (El archivo de configuración de Kubernetes se puede leer en grupo)

El error anterior se produce cuando los permisos del archivo kubeconfig son incorrectos. Para resolver este problema, ejecute el siguiente comando:

chmod o-r ~/.kube/config
chmod g-r ~/.kube/config

Problemas de configuración de AWS IAM Identity Center (sucesor de AWS Single Sign-On)

Importante: Elimine /aws-reserved/sso.amazonaws.com/ de la URL de rolearn. Si no lo hace, no puede autorizar como usuario válido.

Asignar grupos de usuarios a una política de permisos de IAM

1.    Abra la consola de IAM Identity Center.

2.    Elija la pestaña AWS Accounts (Cuentas de AWS) y, a continuación, elija AWS account (Cuenta de AWS) para asignar usuarios.

3.    Elija Assign Users (Asignar usuarios).

4.    Busque los grupos de usuarios y, a continuación, elija Next: Permission sets (Siguiente: Conjuntos de permisos).

5.    Elija Create new permission set (Crear nuevo conjunto de permisos) y, a continuación, elija Create a custom permission set (Crear un conjunto de permisos personalizado).

6.    Asigne un nombre al conjunto de permisos y, a continuación, active la casilla Create a custom permissions policy (Crear una política de permisos personalizada).

7.    Copie la siguiente política de permisos y péguela en la ventana:

{
"Version": "2012-10-17",
  "Statement": [
    {
      "Effect": "Allow",
      "Action": "sts:AssumeRole",
      "Resource": "*"
    }
  ]
}

8.    Elija Create (Crear).

Configure los permisos de rol con Kubernetes RBAC

Para configurar los permisos de rol con el RBAC de Kubernetes, use el siguiente manifiesto para crear un rol de RBAC:

apiVersion: rbac.authorization.k8s.io/v1 
kind: Role
metadata:
    name: <example name of the RBAC group>
    namespace: <example name of namespace>
 rules:
 - apiGroups: [""]
    resources: ["services", "endpoints", "pods", "deployments", "ingress"]
    verbs: ["get", "list", "watch"]

Modifique el ConfigMap del autenticador de IAM

1.    Ejecute el siguiente comando para capturar el rol de IAM del grupo de usuarios de IAM Identity Center que contiene los datos del usuario deseado:

aws iam list-roles | grep Arn

2.    Ejecute el siguiente comando h para modificar el ConfigMap del autenticador:

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

3.    Agregue los siguientes atributos al ConfigMap en MapRoles:

- rolearn: <example arn of the AWS SSO IAM role> 
username: <example preferred username> 
groups:
    - <example name of the RBAC group>

Importante: Elimine /aws-reserved/sso.amazonaws.com/ de la URL de rolearn. Si no lo hace, no puede autorizar como usuario válido.

4.    Actualice su archivo kubeconfig ejecutando el siguiente comando:

aws eks update-kubeconfig —-name <example eks cluster>  —-region <example region>

5.    Inicie sesión con el nombre de usuario de IAM Identity Center y, a continuación, ejecute los comandos kubectl.


Información relacionada

Funciones y enlaces de roles predeterminados Control del acceso a los clústeres de EKS

OFICIAL DE AWS
OFICIAL DE AWSActualizada hace un año