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

  1. Crear la PSP:
    • Escriu una PSP que permeti només l'execució de contenidors no privilegiats.
  2. 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

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

Mòdul 8: Seguretat en Kubernetes

Mòdul 9: Escalabilitat i Rendiment

Mòdul 10: Ecosistema i Eines de Kubernetes

Mòdul 11: Estudis de Cas i Aplicacions del Món Real

Mòdul 12: Preparació per a la Certificació de Kubernetes

© Copyright 2024. Tots els drets reservats