Introducció
Les Polítiques de Seguretat de Pods (PSP) són una característica de Kubernetes que permet definir un conjunt de regles que controlen la seguretat dels pods en un clúster. Aquestes polítiques ajuden a garantir que els pods s'executin amb els permisos mínims necessaris, reduint així el risc de vulnerabilitats de seguretat.
Conceptes Clau
Abans d'entrar en detall sobre les PSP, és important comprendre alguns conceptes clau:
- Pod: La unitat bàsica de desplegament en Kubernetes, que pot contenir un o més contenidors.
- PSP: Un objecte de Kubernetes que defineix les condicions que un pod ha de complir per ser creat.
- RBAC (Role-Based Access Control): Un sistema que permet controlar l'accés als recursos del clúster basat en rols.
Creació d'una Política de Seguretat de Pods
Exemple de PSP
A continuació es mostra un exemple d'una PSP que només permet l'execució de contenidors no privilegiats:
apiVersion: policy/v1beta1
kind: PodSecurityPolicy
metadata:
name: restricted
spec:
privileged: false
allowPrivilegeEscalation: false
requiredDropCapabilities:
- ALL
runAsUser:
rule: 'MustRunAsNonRoot'
seLinux:
rule: 'RunAsAny'
supplementalGroups:
rule: 'MustRunAs'
ranges:
- min: 1
max: 65535
fsGroup:
rule: 'MustRunAs'
ranges:
- min: 1
max: 65535
volumes:
- 'configMap'
- 'emptyDir'
- 'projected'
- 'secret'
- 'downwardAPI'Explicació del Codi
- privileged: false: No permet l'execució de contenidors privilegiats.
- allowPrivilegeEscalation: false: No permet l'escalat de privilegis dins del contenidor.
- requiredDropCapabilities: ['ALL']: Elimina totes les capacitats de Linux per defecte.
- runAsUser.rule: 'MustRunAsNonRoot': Requereix que els contenidors s'executin com a usuaris no root.
- seLinux.rule: 'RunAsAny': Permet qualsevol configuració de SELinux.
- supplementalGroups.rule: 'MustRunAs': Requereix que els grups suplementaris estiguin dins del rang especificat.
- fsGroup.rule: 'MustRunAs': Requereix que el grup de fitxers estigui dins del rang especificat.
- volumes: Permet només certs tipus de volums.
Aplicació de la PSP
Per aplicar una PSP, cal associar-la amb un rol i assignar aquest rol als usuaris o serveis que necessiten crear pods. Això es fa mitjançant RBAC.
Exemple de Rol i Binding
apiVersion: rbac.authorization.k8s.io/v1
kind: Role
metadata:
name: psp-user
namespace: default
rules:
- apiGroups: ['policy']
resources: ['podsecuritypolicies']
verbs: ['use']
resourceNames: ['restricted']
---
apiVersion: rbac.authorization.k8s.io/v1
kind: RoleBinding
metadata:
name: use-restricted-psp
namespace: default
subjects:
- kind: User
name: 'example-user'
apiGroup: rbac.authorization.k8s.io
roleRef:
kind: Role
name: psp-user
apiGroup: rbac.authorization.k8s.ioExplicació del Codi
- Role: Defineix un rol que permet l'ús de la PSP anomenada 'restricted'.
- RoleBinding: Assigna el rol 'psp-user' a l'usuari 'example-user' en el namespace 'default'.
Exercici Pràctic
Objectiu
Crear una PSP que permeti només l'execució de contenidors no privilegiats i aplicar-la a un usuari específic.
Passos
- Crear la PSP:
- Escriu una PSP que permeti només l'execució de contenidors no privilegiats.
- Crear el Rol i el RoleBinding:
- Defineix un rol que permeti l'ús de la PSP creada.
- Assigna aquest rol a un usuari específic.
Solució
# PSP
apiVersion: policy/v1beta1
kind: PodSecurityPolicy
metadata:
name: non-privileged
spec:
privileged: false
allowPrivilegeEscalation: false
requiredDropCapabilities:
- ALL
runAsUser:
rule: 'MustRunAsNonRoot'
seLinux:
rule: 'RunAsAny'
supplementalGroups:
rule: 'MustRunAs'
ranges:
- min: 1
max: 65535
fsGroup:
rule: 'MustRunAs'
ranges:
- min: 1
max: 65535
volumes:
- 'configMap'
- 'emptyDir'
- 'projected'
- 'secret'
- 'downwardAPI'
# Role
apiVersion: rbac.authorization.k8s.io/v1
kind: Role
metadata:
name: psp-user
namespace: default
rules:
- apiGroups: ['policy']
resources: ['podsecuritypolicies']
verbs: ['use']
resourceNames: ['non-privileged']
# RoleBinding
apiVersion: rbac.authorization.k8s.io/v1
kind: RoleBinding
metadata:
name: use-non-privileged-psp
namespace: default
subjects:
- kind: User
name: 'example-user'
apiGroup: rbac.authorization.k8s.io
roleRef:
kind: Role
name: psp-user
apiGroup: rbac.authorization.k8s.ioErrors Comuns i Consells
- Error: PSP no aplicada correctament: Assegura't que el RoleBinding està associat correctament amb l'usuari o servei que necessita utilitzar la PSP.
- Error: Permisos insuficients: Verifica que el rol té els permisos necessaris per utilitzar la PSP.
- Consell: Utilitza noms descriptius per a les PSP, rols i bindings per facilitar la gestió i el manteniment.
Conclusió
Les Polítiques de Seguretat de Pods són una eina poderosa per millorar la seguretat dels clústers de Kubernetes. Permeten definir i aplicar regles de seguretat que controlen com s'executen els pods, reduint així el risc de vulnerabilitats. Amb una comprensió clara de com crear i aplicar PSP, pots assegurar-te que els teus clústers siguin més segurs i complir amb les millors pràctiques de seguretat.
Curs de Kubernetes
Mòdul 1: Introducció a Kubernetes
- Què és Kubernetes?
- Arquitectura de Kubernetes
- Conceptes i Terminologia Clau
- Configuració d'un Clúster de Kubernetes
- CLI de Kubernetes (kubectl)
Mòdul 2: Components Bàsics de Kubernetes
Mòdul 3: Gestió de Configuració i Secrets
Mòdul 4: Xarxes en Kubernetes
Mòdul 5: Emmagatzematge en Kubernetes
Mòdul 6: Conceptes Avançats de Kubernetes
Mòdul 7: Monitorització i Registre
- Monitorització amb Prometheus
- Registre amb Elasticsearch, Fluentd i Kibana (EFK)
- Controls de Salut i Probes
- Servidor de Mètriques
Mòdul 8: Seguretat en Kubernetes
- Control d'Accés Basat en Rols (RBAC)
- Polítiques de Seguretat de Pods
- Seguretat de Xarxa
- Seguretat d'Imatges
Mòdul 9: Escalabilitat i Rendiment
- Autoscalat Horitzontal de Pods
- Autoscalat Vertical de Pods
- Autoscalat de Clúster
- Optimització del Rendiment
Mòdul 10: Ecosistema i Eines de Kubernetes
Mòdul 11: Estudis de Cas i Aplicacions del Món Real
- Desplegament d'una Aplicació Web
- CI/CD amb Kubernetes
- Execució d'Aplicacions Stateful
- Gestió Multi-Clúster
