¿Cómo proporciono acceso al clúster a otros usuarios y roles de IAM después de crear un clúster en Amazon EKS?
Cuando uso los comandos kubectl para acceder a un clúster de Amazon Elastic Kubernetes Service (Amazon EKS), aparece el mensaje de error “error: You must be logged in to the server (Unauthorized)”.
Descripción breve
Si el usuario o el rol de AWS Identity and Access Management (IAM) crea un clúster de Amazon EKS diferente del clúster que usa aws-iam-authenticator, recibirás el mensaje de error Unauthorized. Para resolver este problema, configura el control de acceso basado en roles (RBAC) del clúster de Amazon EKS para autorizar a la entidad de IAM. Para obtener más información sobre RBAC, consulta Using RBAC authorization (Uso de la autorización RBAC) en el sitio web de Kubernetes.
Solo el creador del clúster de Amazon EKS tiene los permisos system:masters para configurar el clúster. Hay dos maneras de extender los permisos system:masters a otros usuarios y roles de IAM:
- Asume las credenciales del creador del clúster. A continuación, añade el rol de IAM en la sección mapRoles del ConfigMap de aws-auth.
- Utiliza las entradas de acceso de EKS.
Importante: Se recomienda no añadir cluster_creator al ConfigMap. Si configuras el ConfigMap de forma incorrecta, es posible que todos los usuarios y roles de IAM, incluido cluster_creator, pierdan permanentemente el acceso al clúster de Amazon EKS. De forma predeterminada, el cluster_creator tiene acceso de administrador al clúster que ha creado, por lo que no es necesario añadir el cluster_creater al ConfigMap de aws-auth.
Nota: En la siguiente resolución, cluster_creator es la entidad de IAM que crea el clúster en Amazon EKS. El usuario al que concedes acceso es designated_user.
Resolución
Nota: Si se muestran errores al ejecutar comandos de la Interfaz de la línea de comandos de AWS (AWS CLI), consulta Troubleshooting errors for the AWS CLI (Solución de problemas de la AWS CLI). Además, asegúrate de utilizar la versión más reciente de la AWS CLI.
Identificación del usuario o rol de IAM del creador del clúster
Identifica la entidad de IAM del creador del clúster que tiene acceso principal para configurar el clúster de Amazon EKS. Para identificar al creador del clúster, busca la llamada a la API CreateCluster en AWS CloudTrail y, a continuación, consulta la sección userIdentity de la llamada a la API.
A continuación, identifica la entidad de IAM a la que concedes la autorización después de crear el clúster.
Uso del ConfigMap de aws-auth para conceder acceso al clúster cuando el cluster_creator es un usuario de IAM
Sigue estos pasos:
-
Instala kubectl en la máquina host local. O bien, si tienes una instancia específica de Amazon Elastic Compute Cloud (Amazon EC2) con un paquete kubectl instalado, utiliza SSH para conectarte a la instancia.
-
En la máquina host en la que está instalado kubectl, configura la AWS CLI con las credenciales de designated_user:
aws configure
-
Ejecuta el comando get-caller-identity de la AWS CLI:
aws sts get-caller-identity
La salida devuelve los detalles del usuario de IAM para el designated_user:
{ "UserId": "#####################", "Account": "############", "Arn": "arn:aws:iam::############:user/designated_user" }
-
Enumera los pods que se ejecutan en el clúster del espacio de nombres predeterminado:
kubectl get pods --namespace default
La salida muestra el mensaje de error Unauthorized porque el designated_user no tiene autorización para acceder al clúster de Amazon EKS.
-
Configura el ID de la clave de acceso de AWS y la clave de acceso secreta de AWS del cluster_creator.
Si has usado la consola de Amazon EKS para crear el clúster, configura el usuario o rol de IAM del clúster_creator en la AWS CLI en tu máquina host local:aws configure
Si has usado eksctl para crear el clúster, utiliza las credenciales del perfil de la AWS CLI especificadas para configurar la AWS CLI para ejecutar los comandos kubectl.
-
Comprueba que el cluster_creator tenga acceso al clúster:
kubectl get pods
No recibes el mensaje de error Unauthorized y la salida muestra todos los pods que se están ejecutando en el espacio de nombres predeterminado. Si la salida no muestra ningún recurso, significa que no hay ningún pod en ejecución en el espacio de nombres predeterminado.
-
Para permitir el acceso del designated_user al clúster, añade la sección mapUsers al archivo aws-auth.yaml. Para obtener más información, consulta Agregar las entidades principales de IAM al clúster de Amazon EKS.
-
Añade el designated_user a la sección mapUsers del archivo aws-auth.yaml y, a continuación, guarda el archivo.
-
Aplica el nuevo ConfigMap a la configuración del RBAC del clúster:
kubectl apply -f aws-auth.yaml
-
Vuelve a cambiar la configuración de la AWS CLI para usar las credenciales del designated_user:
aws configure
- Comprueba que el designated_user tenga acceso al clúster:
kubectl get pods
No recibes el mensaje de error Unauthorized y la salida muestra todos los pods que se están ejecutando en el espacio de nombres predeterminado. Si la salida no muestra ningún recurso, significa que no hay ningún pod en ejecución en el espacio de nombres predeterminado.
Uso del ConfigMap de aws-auth para conceder acceso al clúster cuando el cluster_creator es un rol de IAM
Si un rol de IAM ha creado el clúster en lugar de un usuario de IAM, no puedes usar credenciales. En su lugar, debes asumir el rol de IAM que ha creado el clúster para proporcionar acceso al designated_user.
Sigue estos pasos:
-
Ejecuta el comando get-caller-identity de la AWS CLI para obtener los detalles del usuario de IAM del assume_role_user:
aws sts get-caller-identity
-
Confirma que el assume_role_user tiene acceso al clúster:
kubectl get pods
La salida muestra el mensaje de error Unauthorized porque el designated_user no tiene autorización para acceder al clúster de Amazon EKS.
-
Permite que el assume_role_user asuma el rol del cluster_creator:
aws sts assume-role --role-arn arn:aws:iam:11122223333:role/cluster_creator --role-session-name test
La salida muestra las credenciales de IAM temporales para el assume_role_user.
-
Utiliza las credenciales de IAM temporales para configurar las variables de entorno AWS_ACCESS_KEY_ID, AWS_SESSION_TOKEN y AWS_SECRET_ACCESS_KEY:
export AWS_ACCESS_KEY_ID=AKIAIOSFODNN7EXAMPLE export AWS_SESSION_TOKEN=EXAMPLETOKEN export AWS_SECRET_ACCESS_KEY=wJalrXUtnFEMI/K7MDENG/bPxRfiCYEXAMPLEKEY
La AWS CLI clasifica las credenciales que se configuran en las variables de entorno y las usa para realizar llamadas a los servicios de AWS.
-
Comprueba que la AWS CLI utilice el rol asumido del cluster_creator:
aws sts get-caller-identity
-
Para permitir el acceso del designated_user al clúster, añade la sección mapUsers al archivo aws-auth.yaml.
-
Añade el designated_user a la sección mapUsers del archivo aws-auth.yaml y, a continuación, guarda el archivo.
-
Aplica la nueva configuración a la configuración del RBAC del clúster de Amazon EKS:
kubectl apply -f aws-auth.yaml
-
Desactiva las siguientes variables de entorno:
unset AWS_ACCESS_KEY_ID unset AWS_SESSION_TOKEN unset AWS_SECRET_ACCESS_KEY
-
Ejecuta el comando get-caller-identity de la AWS CLI para obtener los detalles del usuario de IAM del designated_user:
aws sts get-caller-identity
- Confirma que el designated_user tiene acceso al clúster:
kubectl get pods
No recibes el mensaje de error Unauthorized y la salida muestra todos los pods que se están ejecutando en el espacio de nombres predeterminado. Si la salida no muestra ningún recurso, significa que no hay ningún pod en ejecución en el espacio de nombres predeterminado.
Nota: Si usas eksctl, consulta Manage IAM users and roles (Administración de usuarios y roles de IAM) en el sitio web de eksctl para obtener más información.
Uso de las entradas de acceso de EKS para conceder acceso al clúster a los usuarios y roles de IAM
Amazon EKS admite tres modos de autenticación para las entradas de acceso:
- CONFIG_MAP para usar solo el ConfigMap de aws-auth.
- API_AND_CONFIG_MAP para usar tanto las API de entrada de acceso de EKS como el ConfigMap de aws-auth. Este modo prioriza la autenticación mediante entradas de acceso de EKS y es útil cuando quieres migrar los permisos de aws-auth existentes a las entradas de acceso de EKS.
- API para usar solo las API de entrada de acceso de EKS.
Para obtener más información, consulta Concesión a los usuarios y roles de IAM de acceso a las APIs de Kubernetes.
Para configurar el clúster con entradas de acceso, define el modo de autenticación del clúster en API de EKS o API de EKS y ConfigMap.
Para comprobar el modo de autenticación actual del clúster, sigue estos pasos:
- Abre la consola de Amazon EKS.
- Selecciona la pestaña Acceso.
- En Configuración de acceso, comprueba la etiqueta Modo de autenticación.
O bien, ejecuta el comando describe-cluster:
aws eks describe-cluster --name example-cluster --query 'cluster.accessConfig.authenticationMode' --region exampleRegion
Si el modo de autenticación del clúster es API de EKS o API de EKS y ConfigMap, puedes configurar el clúster para que utilice entradas de acceso. De lo contrario, consulta Cambio del modo de autenticación para utilizar las entradas de acceso.
Nota: Puedes cambiar del modo de autenticación CONFIG_MAP al modo API, pero no puedes cambiar del modo API o API_AND_CONFIG_MAP al modo CONFIG_MAP. Para obtener más información, consulta Cluster access manager (Administrador de acceso al clúster) en el sitio web de GitHub.
Información relacionada
Using an IAM role in the AWS CLI (Uso de un rol de IAM en la AWS CLI)
Concesión de acceso a los usuarios de IAM a las entradas de acceso de Kubernetes con EKS
Migración de las entradas existentes de aws-auth ConfigMap a entradas de acceso
How can I use the Amazon EKS access entry API to recover access to an EKS cluster? (¿Cómo puedo usar la API de entrada de acceso de Amazon EKS para recuperar el acceso a un clúster de EKS?)
Vídeos relacionados
Contenido relevante
- OFICIAL DE AWSActualizada hace 3 años
- OFICIAL DE AWSActualizada hace un año
- OFICIAL DE AWSActualizada hace 9 meses
- OFICIAL DE AWSActualizada hace 2 años