¿Cómo puedo proporcionar acceso a otros usuarios y roles de IAM tras la creación del clúster en Amazon EKS?

8 minutos de lectura
0

Cuando intento acceder al clúster de Amazon Elastic Kubernetes Service (Amazon EKS) mediante los comandos kubectl, aparece el siguiente error de autorización: «error: debe iniciar sesión en el servidor (no autorizado)».

Descripción breve

Aparece un error de autorización cuando su entidad de AWS Identity and Access Management (IAM) no está autorizada por la configuración del control de acceso basado en roles (RBAC) del clúster de Amazon EKS. Esto ocurre cuando un usuario o rol de IAM crea un clúster de Amazon EKS diferente del que usa aws-iam-authenticator.

Inicialmente, solo el creador del clúster de Amazon EKS tiene los permisos system:masters para configurar el clúster. Para extender los permisos system:masters a otros usuarios y roles, debe añadir el aws-auth ConfigMap a la configuración del clúster de Amazon EKS. El ConfigMap permite que otras entidades de IAM, como usuarios y roles, accedan al clúster de Amazon EKS.

Para conceder acceso a un rol de IAM, debe asumir las credenciales del creador del clúster. A continuación, añada el rol de IAM en la sección MapRoles del aws-auth ConfigMap.

Importante:

  • Evite errores de sintaxis, como errores tipográficos, al actualizar el aws-auth ConfigMap. Estos errores pueden afectar a los permisos de todos los usuarios y roles de IAM que se actualicen en el ConfigMap del clúster de Amazon EKS.
  • Se recomienda evitar añadir cluster_creator al ConfigMap. La modificación incorrecta del ConfigMap puede provocar que todos los usuarios y roles de IAM, incluido cluster_creator, pierdan permanentemente el acceso al clúster de Amazon EKS.
  • No hay que añadir el cluster_creator al aws-auth ConfigMap para obtener acceso de administrador al clúster de Amazon EKS. De forma predeterminada, el cluster_creator tiene acceso de administrador al clúster de Amazon EKS que creó.

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

Resolución

Nota: En los siguientes pasos, el creador del clúster es cluster_creator. El usuario que actualmente no tiene acceso al clúster pero lo necesita es designated_user.

Identificar el usuario o rol de IAM del creador del clúster

1.    Identifique el usuario o rol de IAM del creador del clúster que tiene acceso principal para configurar su clúster de Amazon EKS.

2.    Identifique el usuario de IAM al que el creador del clúster concede la autorización tras la creación del clúster. Para identificar al creador del clúster, busque la llamada a la API CreateCluster en AWS CloudTrail y, a continuación, consulte la sección userIdentity de la llamada a la API.

Añadir designated_user al ConfigMap si el cluster_creator es un usuario de IAM

1.    Instale kubectl en su máquina host local. O bien, si tiene una instancia específica de Amazon Elastic Compute Cloud (Amazon EC2) con un paquete kubectl instalado, utilice SSH para conectarse a la instancia.

2.    En la misma máquina host en la que está instalado kubectl, configure la AWS CLI con las credenciales del designated_user:

aws configure

3.    En la AWS CLI, ejecute el siguiente comando:

aws sts get-caller-identity

La salida debe devolver los detalles del usuario de IAM para el designated_user.

Por ejemplo:

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

4.    Enumere los pods que se ejecutan en el clúster del espacio de nombres predeterminado:

kubectl get pods --namespace default

La salida muestra lo siguiente: «error: debe iniciar sesión en el servidor (no autorizado)». Este error significa que el designated_user no tiene autorización para acceder al clúster de Amazon EKS.

5.    Configure el ID de la clave de acceso de AWS y la clave de acceso secreta de AWS del cluster_creator.

Si el clúster se creó mediante la Consola de administración de AWS, identifique el rol o usuario de IAM que creó el clúster. En la máquina host donde está instalado kubectl, configure el usuario o rol de IAM del cluster_creator en la AWS CLI:

aws configure

Si se usó eksctl para crear el clúster, utilice las credenciales del perfil de la AWS CLI predeterminadas o especificadas para configurar la AWS CLI para ejecutar los comandos kubectl.

6.    Compruebe que el clúster_creator tenga acceso al clúster:

kubectl get pods

Si todo está configurado correctamente, no recibirá ningún mensaje de error no autorizado. La salida debe mostrar todos los pods que se ejecutan en el espacio de nombres predeterminado. Si el resultado muestra que no se ha encontrado ningún recurso, significa que no hay ningún pod ejecutándose en el espacio de nombres predeterminado.

7.    Para permitir el acceso del designated_user al clúster, añada la sección mapUsers a su archivo aws-auth.yaml. Consulte el archivo aws-auth.yaml de ejemplo en Habilitar el acceso de usuarios y roles de IAM a su clúster.

8.    Añada designated_user a la sección MapUsers del archivo aws-auth.yaml del paso 7 y, a continuación, guarde el archivo.

9.    Aplique el nuevo ConfigMap a la configuración del RBAC del clúster:

kubectl apply -f aws-auth.yaml

10.    Vuelva a cambiar la configuración de la AWS CLI para usar las credenciales del designated_user:

aws configure

11.    Compruebe que el designated_user tenga acceso al clúster:

kubectl get pods

Si todo está configurado correctamente, no recibirá ningún mensaje de error no autorizado. La salida muestra todos los pods que se ejecutan en el espacio de nombres predeterminado. Si el resultado muestra que no se ha encontrado ningún recurso, significa que no hay ningún pod ejecutándose en el espacio de nombres predeterminado.

Añadir designated_user al ConfigMap si el cluster_creator es un rol de IAM

En los pasos anteriores, utilizó las credenciales del cluster_creator para proporcionar acceso al designated_user. Sin embargo, si el clúster lo creó un rol de IAM en vez de un usuario de IAM, no podrá usar ninguna credencial. En este caso, debe asumir la función de IAM que creó el clúster para proporcionar acceso al designated_user. Si el creador del clúster no es un rol de IAM, no es necesario que complete los siguientes pasos.

Nota: En los siguientes pasos, assume_role_user es el usuario que asume el rol de cluster_creator. El usuario que actualmente no tiene acceso al clúster pero lo necesita es designated_user.

Para asumir el rol de IAM y editar el aws-auth ConfigMap del clúster para poder proporcionar acceso al designated_user, siga estos pasos:

1.    Muestre los detalles del usuario de IAM de assume_role_user:

aws sts get-caller-identity

2.    Confirme que assume_role_user tiene acceso al clúster:

kubectl get pods

La salida muestra el siguiente error: «error: debe iniciar sesión en el servidor (no autorizado)». Este error significa que el assume_role_user no tiene autorización para configurar el clúster de Amazon EKS.

3.    Permita assume_role_user asuma el rol de 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 assume_role_user.

4.    Utilice las credenciales de IAM temporales para configurar las variables de entorno AWS_ACCESS_KEY_ID, AWS_SESSION_TOKEN y AWS_SECRET_ACCESS_KEY.

Por ejemplo:

export AWS_ACCESS_KEY_ID=AKIAIOSFODNN7EXAMPLE
export AWS_SESSION_TOKEN=EXAMPLETOKEN
export AWS_SECRET_ACCESS_KEY=wJalrXUtnFEMI/K7MDENG/bPxRfiCYEXAMPLEKEY

La AWS CLI ahora clasifica las credenciales que se configuran en las variables de entorno y las usa para realizar llamadas a los servicios de AWS.

5.    Compruebe que la AWS CLI utilice el rol asumido de cluster_creator:

aws sts get-caller-identity

6.    Para permitir el acceso del designated_user al clúster, añada la sección mapUsers a su archivo aws-auth.yaml. Consulte el archivo aws-auth.yaml de ejemplo en Habilitar el acceso de usuarios y roles de IAM a su clúster.

7.    Añada designated_user a la sección MapUsers del archivo aws-auth.yaml del paso 6 y, a continuación, guarde el archivo.

8.    Aplique la nueva configuración a la configuración del RBAC del clúster de Amazon EKS:

kubectl apply -f aws-auth.yaml

9.    Desactive las siguientes variables de entorno:

unset AWS_ACCESS_KEY_ID
unset AWS_SESSION_TOKEN
unset AWS_SECRET_ACCESS_KEY

10.    Muestre los detalles del usuario de IAM de designated_user:

aws sts get-caller-identity

11.    Confirme que el designated_user tiene acceso al clúster:

kubectl get pods

Si todo está configurado correctamente, no recibirá ningún mensaje de error no autorizado. La salida muestra todos los pods que se ejecutan en el espacio de nombres predeterminado. Si el resultado muestra que no se ha encontrado ningún recurso, significa que no hay ningún pod ejecutándose en el espacio de nombres predeterminado.

Nota: Si usa eksctl, considere la solución que se indica en Administrar usuarios y roles de IAM del sitio web de Weaveworks.


Información relacionada

Uso de un rol de IAM de la AWS CLI

OFICIAL DE AWS
OFICIAL DE AWSActualizada hace 2 años