Usar restricciones para aplicar la seguridad del Pod

En esta página, se muestra cómo usar las restricciones del controlador de políticas para lograr muchas de las mismas protecciones que PodSecurityPolicies, con la capacidad adicional de probar las políticas antes de aplicarlas. En los ejemplos de este documento, no se abarcan todas las restricciones relacionadas, pero se muestra cómo comenzar a usarlas.

El código fuente para las restricciones y las plantillas de restricciones que se analizan en este documento está disponible en el directorio pod-security-policy del repositorio del proyecto de Gatekeeper. Cada una de las plantillas de restricciones también incluye pruebas de unidades.

Antes de comenzar

Evita que los pods ejecuten contenedores privilegiados

Te recomendamos que evites que los pods ejecuten contenedores con privilegios, ya que los contenedores con privilegios pueden afectar al sistema operativo host en el nodo o a otras cargas de trabajo que se ejecutan en el nodo.

Esta restricción evita que los pods ejecuten contenedores con privilegios mediante el uso de la plantilla de restricciones K8sPSPPrivilegedContainer:

apiVersion: constraints.gatekeeper.sh/v1beta1
kind: K8sPSPPrivilegedContainer
metadata:
  name: psp-privileged-container
spec:
  match:
    kinds:
      - apiGroups: [""]
        kinds: ["Pod"]

Solicita un sistema de archivos raíz de solo lectura en el contenedor

De forma predeterminada, un contenedor puede escribir en su sistema de archivos raíz. Además de los problemas de seguridad, esto puede causar cuellos de botella en el rendimiento debido a la latencia de escritura en la capa del contenedor que admite la escritura. Puedes solicitar un sistema de archivos raíz de solo lectura en contenedores mediante el uso de una PodSecurityPolicy o una restricción.

Esta restricción usa la plantilla de restricciones K8sPSPReadOnlyRootFilesystem:

apiVersion: constraints.gatekeeper.sh/v1beta1
kind: K8sPSPReadOnlyRootFilesystem
metadata:
  name: psp-readonlyrootfilesystem
spec:
  match:
    kinds:
      - apiGroups: [""]
        kinds: ["Pod"]

Restringe los tipos de volúmenes que puede montar un contenedor

De forma predeterminada, un contenedor puede activar cualquier tipo de volumen registrado con la API de Kubernetes en el clúster.

Esta restricción limita los contenedores a un conjunto delimitado de tipos de volumen mediante la plantilla de restricciones K8sPSPVolumeTypes:

apiVersion: constraints.gatekeeper.sh/v1beta1
kind: K8sPSPVolumeTypes
metadata:
  name: psp-volume-types
spec:
  match:
    kinds:
      - apiGroups: [""]
        kinds: ["Pod"]
  parameters:
    volumes:
    # - "*" # * can be used to allow all volume types
    - configMap
    - emptyDir
    - projected
    - secret
    - downwardAPI
    - persistentVolumeClaim
    #- hostPath #required for allowedHostPaths
    - flexVolume #required for allowedFlexVolumes

Audita los resultados

Puedes probar la eficacia de las restricciones sin interrumpir las cargas de trabajo activas mediante la acción de aplicación dryrun. Esto produce resultados de auditoría para tus políticas sin bloquearlas de forma activa. Para obtener más información, consulta Audita mediante restricciones.

¿Qué sigue?