Administrar usuarios en AWS EKS

Una de las cosas que necesitamos hacer cuando trabajamos con un clúster EKS es añadir o borrar usuarios que puedan interactuar con el sistema. En este post vamos a ver dos posibles opciones.

  1. Añadir un usuario IAM directamente a Kubernetes
  2. Gestionar usuarios utilizando roles in grupos IAM

Todas ellas pasan por editar el ConfigMap aws-auth.

Para ello, utilizando kubectl con un usuario IAM que tenga acceso:

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

Dependiendo de si ha sido editado con anterioridad o no, veremos varias secciones. Habrá una llamada mapRoles y puede que haya una llamada mapUsers. Viendo esto, empecemos con la primera forma de añadir a alguien a EKS. Para estos ejemplos usaré el grupo de administradores.

Nota: Cuando creamos un clúster de Kubernetes en AWS utilizando EKS el usuario con el que nos hemos autenticado para crearlo recibe acceso de administración al mismo automáticamente. Este usuario no se verá afectado por los cambios que haremos a continuación, así que si algo sale mal siempre podremos restaurar el acceso utilizando esa cuenta. Es más, la recomendación del servicio técnico de AWS es que la cuenta no sea de una persona, ya que estas pueden dejar la compañía y con ello perder ese acceso que nunca falla. Consideran que es mejor tener una especie de cuenta genérica y guardar los datos guardados en lugar seguro.

1. Añadir un usuario IAM

Para añadir un usuario IAM simplemente tenemos que usar lo siguiente:

  • userarn: como su propio nombre indica, el arn del usuario IAM.
  • username: nombre de usuario de Kubernetes que se asignará al usuario IAM.
  • groups: lista de grupos de Kubernetes a los que queremos que el usuario pertenezca. Hablaré sobre estos grupos en otro post más adelante. En el caso de este ejemplo utilizamos system:masters, básicamente, acceso de administrador.

Por ejemplo:

mapUsers: |
    - userarn: arn:aws:iam::xxxxxxxx:user/daveops
      username: daveops
      groups:
        - system:masters

Esto es simplemente una lista en YAML, para tener más usuarios no hay más que añadirlos a la lista.

Aunque este método funciona yo no lo recomiendo. En mi opinión es un sistema poco robusto. Cada vez que hay que añadir o eliminar un usuario hay que editar el configmap a pelo. En mi caso, hice una modificación, como otras muchas que había hecho en el mismo configmap de un clúster que había heredado de un DevOps anterior y nos quedamos sin ningún tipo de acceso. Si la cuenta con la que se creó el clúster ya no está disponible (nuestro caso) es imposible recuperar el acceso por nosotros mismos y tuvimos que contactar al soporte técnico de AWS.

2. Utilizar roles IAM

Para mí, la mejor forma para gestionar los usuarios es utilizar roles IAM y grupos. Lo que hay que hacer es lo siguiente:

  1. Crear un rol en IAM.
  2. Añadir el rol a Kubernetes utilizando el configmap/aws-auth.
  3. Crear un grupo para controlar quién puede adoptar el rol que acabamos de crear.

Crear un rol IAM

Esta es la parte más fácil de todo el proceso. Necesitamos crear un rol, pero no necesitamos darle ningún tipo de permisos.

  1. Edita las relaciones de confianza para añadir la cuenta o cuentas de AWS que van a poder adoptar el rol.
  2. Toma nota del ARN del rol ya que lo necesitaremos más adelante.

Añadir el rol a Kubernetes

Esta parte es casi exactamente igual a lo que hicimos antes con los usuarios, salvo que en vez de mapUsers vamos a utilizar mapRoles. De nuevo editamos aws-auth.

$ kubectl -n kube-system  edit configmaps aws-auth
  mapRoles: |
    - rolearn: arn:aws:iam::xxxxxxxx:role/KubernetesClusterAdmin
      username: KubernetesClusterAdmin
      groups:
        - system:masters

 Al igual que con los usuarios, esto es una lista en YAML, así tenemos más roles sólo tenemos que ponerlos debajo.

Crear un grupo para controlar el qué usuarios pueden asumir el rol

Ahora debemos crear un grupo que permita a los usuarios adoptar el rol que utilizamos con EKS. De esta forma podemos dar o retirar el acceso fácilmente utilizando IAM en vez de tener que editar un confimap en Kubernetes. Simplemente añadimos o borramos usuarios del grupo.

La política de grupo que necesitamos configurar para este grupo debe ser similar a lo que hay debajo. Sustituye el valor en Resource por el rol que creaste y añadiste a Kubernetes.

{
  "Version": "2012-10-17",
  "Statement": [
    {
      "Sid": "123",
      "Effect": "Allow",
      "Action": [
        "sts:AssumeRole"
      ],
      "Resource": [
        "arn:aws:iam::xxxxxxxx:role/KubernetesClusterAdmin"
      ]
    }
  ]
}

Y ahora sólo queda añadir usuarios al grupo. Una vez tengan permisos para adoptar el rol, podrán acceder al clúster.


Si has llegado hasta aquí, ¡muchas gracias! Este es el primer post en este blog, espero que haya servido de ayuda. En el siguiente, explicaré cómo configurar el cliente de AWS y kubectl para poder acceder a Kubernetes.

¡Hasta la próxima!

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *