Crear usuario restringido en kubernetes

Si trabajamos en un entrono de kubernetes en el que varias personas tienen acceso compartiendo el usuario administrador,  quizá sea una buena idea facilitar un usuario restringido a un namespace concreto. Para ello deberemos de crear  varias cosas:

  1. Certificados del usuario
  2. Contexto
  3. Rol
  4. Rolbinding

Para esta prueba vamos a usar el entorno de minikube. Comenzamos creando el namespace de prueba ejecutando: kubectl create ns prueba

A continuación creamos los certificados del usuario con los siguientes comandos:

openssl genrsa -out developer.key 2048
openssl req -new -key developer.key -out developer.csr -subj "/CN=developer/O=occentus"
openssl x509 -req -in developer.csr -CA ~/.minikube/ca.crt -CAkey ~/.minikube/ca.key -CAcreateserial -out developer.crt -days 500

Ahora creamos el contexto para el usuario con los siguientes comandos:

kubectl config set-credentials developer --client-certificate=developer.crt --client-key=developer.key
kubectl config set-context developer-context --cluster=minikube --namespace=prueba --user=developer

Ahora podemos probar a cambiar de contexto ejecutando kubeselect y seleccionando el namespace de prueba. Si intentamos ver los pods, por ejemplo, nos dará un error de que no tenemos permisos.

Error from server (Forbidden): pods is forbiden: User "developer" cannot list pods in the namespace "prueba"

Ahora debemos crear el rol con los permisos que queramos otorgar en el namespace prueba. Debemos crear un fichero .yaml con el siguiente contenido:

kind: Role
apiVersion: rbac.authorization.k8s.io/v1beta1
metadata:
  namespace: prueba
  name: permisos-prueba
rules:
  - apiGroups: ["", "extensions", "apps"]
    resources: ["pods"]
    verbs: ["get"]

En este caso solo vamos a dar permisos para que puedan ejecutar kubectl get pods. Aplicamos el fichero ejecutando kubectl apply -f rol.yaml

Una vez creado el rol, creamos el rolbinding, que básicamente lo que hace es asociar el rol con el usuario developer. Creamos otro fichero .yaml con el siguiente contenido:

kind: RoleBinding
apiVersion: rbac.authorization.k8s.io/v1beta1
metadata:
  name: rolbinding-prueba
  namespace: prueba
subjects:
  - kind: User
    name: developer
    apiGroup: ""
  roleRef:
  kind: Role
  name: permisos-prueba
  apiGroup: ""

Lo aplicamos ejecutando

kubectl apply -f rolbinding.yaml

y ahora cambiamos al contexto del usuario developer y podemos comprobar que ahora sí que nos deja ver los pods.

 

 

Artículos relacionados