Usa restricciones para aplicar la seguridad del pod

Este tema ilustra 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 sus políticas antes de aplicarlas. En los ejemplos en este tema, no se cubren todas las restricciones relacionadas, pero se muestra cómo comenzar.

Antes de comenzar

Instale el Controlador de políticas en uno de sus clústeres inscritos en Anthos Config Management. Asegúrese de habilitar la biblioteca de plantillas de restricciones.

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

Evita que los pods ejecuten contenedores privilegiados

Un ejemplo en el tema sobre PodSecurityPolicies evita que Pods ejecute contenedores privilegiados. Esto se recomienda porque los contenedores privilegiados pueden afectar potencialmente el sistema operativo del host en el nodo u otras cargas de trabajo que se ejecutan en el nodo.

Esta restricción vuelve a implementar la misma restricción, ya que usa 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

Por defecto, un contenedor puede escribir en su sistema de archivos raíz. Además de las preocupaciones de seguridad, esto puede causar cuellos de botella en el rendimiento debido a la latencia de escritura en la capa de escritura del contenedor. Puedes solicitar un sistema de archivos raíz de solo lectura en contenedores con una PodSecurityPolicy o con una restricción. Esta restricción utiliza 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 montar cualquier tipo de volumen registrado con la API de Kubernetes en el clúster. Esta restricción restringe los contenedores a un conjunto limitado 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:
    # - "*" # * may be used to allow all volume types
    - configMap
    - emptyDir
    - projected
    - secret
    - downwardAPI
    - persistentVolumeClaim
    #- hostPath #required for allowedHostPaths
    - flexVolume #required for allowedFlexVolumes

¿Qué sigue?