Skip to main content

Command Palette

Search for a command to run...

Control de Accesos a Kubernetes con Teleport

¿Como hacemos generar roles con permisos granulares?

Updated
2 min read
Control de Accesos a Kubernetes con Teleport
S

I have a bachelor's degree in Technology from the University of Palermo, a Master in Information Security from the University of Murcia and different certifications such as CISSP | CISM | CDPSE | CCSK | CSX | MCSA | SMAC™️ | DSOE | DEPC | CSFPC | CSFPC | 5x AWS Certified.

He is currently CISO at Klar, a Mexican Fintech. He was fortunate to be awarded as CISO of the Year in Argentina in 2021 and was among the Top 100 CISO's in the World in 2022.

A lover of new technologies, he has developed a career in DevSecOps and Cloud Security at Eko Party, the largest security conference in Latin America.

Seguimos con la serie, ahora vamos a ir un poco más profundo. Ya tenemos nuestro Teleport listo para usar, vamos a perfilar un poco los accesos. Creo que lo mejor es hacer una prueba, para interiorizarnos en esta arista del producto.

Escenario

Este ejemplo muestro dos grupos, uno que puede listar y ver logs para pod's y otro que además puede abrir sesiones exec en el espacio de nombres app-dominio de nuestro Cluster microk8s. Un requisito fundamental es que tengamos RBAC habilitado.

apiVersion: rbac.authorization.k8s.io/v1
kind: Role
metadata:
  name: dev-exec
  namespace: app-dominio
rules:
- apiGroups:
  - ""
  resources:
  - pods
  - pods/log
  verbs:
  - get
  - list
  - watch
- apiGroups:
  - ""
  resources:
  - pods/exec
  verbs:
  - create
---
apiVersion: rbac.authorization.k8s.io/v1
kind: Role
metadata:
  name: dev-logs
  namespace: app-dominio
rules:
- apiGroups:
  - ""
  resources:
  - pods
  - pods/log
  verbs:
  - get
  - list
  - watch

Aplicamos los roles

kubectl apply -f role.yaml
role.rbac.authorization.k8s.io/dev-exec created
role.rbac.authorization.k8s.io/dev-logs created

Configuracion Role Bindings

apiVersion: rbac.authorization.k8s.io/v1
kind: RoleBinding
metadata:
  name: dev-exec-binding
  namespace: app-dominio
roleRef:
  apiGroup: rbac.authorization.k8s.io
  kind: Role
  name: dev-exec
subjects:
- apiGroup: rbac.authorization.k8s.io
  kind: Group
  name: developer-exec
---
apiVersion: rbac.authorization.k8s.io/v1
kind: RoleBinding
metadata:
  name: dev-logs-binding
  namespace: app-dominio
roleRef:
  apiGroup: rbac.authorization.k8s.io
  kind: Role
  name: dev-logs
subjects:
- apiGroup: rbac.authorization.k8s.io
  kind: Group
  name: developer-logs

Hacemos el Binding

kubectl apply -f rolebindings.yml
rolebinding.rbac.authorization.k8s.io/dev-exec-binding created
rolebinding.rbac.authorization.k8s.io/dev-logs-binding created

Ahora podemos asignar usuarios o roles con el grupo developer-exec o developer-logs.

kind: role
version: v4
metadata:
  name: developer-exec
spec:
  allow:
    kubernetes_groups: ["developer-exec"]
    kubernetes_labels:
       '*': '*'
kind: role
version: v4
metadata:
  name: developer-logs
spec:
  allow:
    kubernetes_groups: ["developer-logs"]
    kubernetes_labels:
       '*': '*'

Aplicamos los cambios, una vez que ingresamos a Teleport como teleport-admin.

Les dejo el proceso.

tsh login --proxy=teleport.esprueba.com:443 --auth=local --user=teleport-admin teleport.esprueba.com
tctl create -f developer-exec.yaml
tctl create -f developer-logs.yaml

Vamos a revisar Teleport y luego agregar un usuario alguno de estos roles, para ir probando, para ello le agrego a el usuario santiago el rol developer-exec.

tctl users update --set-roles=developer-exec santiago
User santiago has been updated:
    New roles: developer-exec

Ahora vamos a probar si el usuario santiago puede listar en cualquier namespace y que puede hacer dentro del namespace habilitado.

Vamos a revisar los logs un poco a detalle. Acá se puede ver el 200, del request a los Pods y los 403 de los requests no habilitados.

Como pueden ver el acceso al Cluster es extremadamente granular y sencillo de configurar. No dejen de revisar la documentación de Teleport, para hacerlo más fino.

Espero que les sirva.

Teleport Access

Part 1 of 3

In this section we are going to talk about Teleport, how to configure it to access our SSH servers, Kubernetes and how to manage roles and profiles.

Up next

Asegurando el acceso a nuestros Clusters Kubernetes con Teleport

Instalación de Teleport para manejar nuestros ambientes