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.io
Explicació 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.io
Errors 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