Configuración de admisión de seguridad de pods
Antes de usar la admisión de seguridad de pods, debe comprender los Estándares de seguridad de Pod de Kubernetes. Estos estándares definen diferentes niveles de aislamiento para los pods. Te permiten definir cómo quieres restringir el comportamiento de los pods de una manera clara y consistente. Kubernetes ofrece un controlador de admisión de seguridad de pod incorporado para hacer cumplir los estándares de seguridad de pod. Las restricciones de seguridad de los pods se aplican a nivel de espacio de nombres cuando se crean los pods.
El estándar de seguridad de pod define tres niveles de política de seguridad:
Nivel |
Descripción |
---|---|
privileged |
Política sin restricciones, que proporciona el nivel más amplio posible de permisos, generalmente dirigidos a cargas de trabajo a nivel de sistema e infraestructura administradas por usuarios privilegiados y de confianza, como CNI y controladores de almacenamiento. |
baseline |
Política mínimamente restrictiva que evita las escalaciones de privilegios conocidas, normalmente dirigidas a cargas de trabajo no críticas. Esta política deshabilita capacidades como hostNetwork y hostPID. |
restricted |
Política muy restringida, siguiendo las mejores prácticas actuales de endurecimiento de Pod. |
La admisión de seguridad de pod se aplica a nivel de espacio de nombres. El controlador restringe el contexto de seguridad y otros parámetros en el pod o contenedor en el espacio de nombres. La política de privilegios no verifica el campo securityContext del pod y el contenedor. La línea de base y las políticas restringidas tienen requisitos diferentes sobre securityContext. Para obtener más información, consulte Normas de seguridad de Pod.
Configuración del contexto de seguridad: Configurar un contexto de seguridad para un pod o contenedor
Etiquetas de admisión de seguridad de pod
Kubernetes define tres tipos de etiquetas para la admisión de seguridad de pods (consulte Tabla 2). Puede establecer estas etiquetas en un espacio de nombres para definir el nivel estándar de seguridad del pod que se utilizará. Sin embargo, no cambie el nivel estándar de seguridad pod en espacios de nombres del sistema como kube-system. De lo contrario, los pods en el espacio de nombres del sistema pueden estar defectuosos.
Modo |
Objeto de destino |
Descripción |
---|---|---|
enforce |
Pods |
Las violaciones de la política provocarán que el pod sea rechazado. |
audit |
Cargas de trabajo (como la Deployment y el trabajo) |
Las violaciones de políticas activarán la adición de una anotación de auditoría al evento registrado en el log de auditoría, pero se permiten de otro modo. |
warn |
Cargas de trabajo (como la Deployment y el trabajo) |
Las violaciones de políticas activarán una advertencia de cara al usuario, pero están permitidas de otro modo. |
Los pods a menudo se crean indirectamente, mediante la creación de un objeto de carga de trabajo, como una Deployment o un trabajo. Para ayudar a detectar las infracciones con anticipación, tanto los modos de auditoría como de advertencia se aplican a los recursos de la carga de trabajo. Sin embargo, el modo de aplicación se aplica solo a los objetos pod resultantes.
Hacer cumplir la admisión de seguridad de pod con etiquetas de espacio de nombres
Puede etiquetar espacios de nombres para aplicar estándares de seguridad de pod. Suponga que un espacio de nombres está configurado de la siguiente manera:
apiVersion: v1 kind: Namespace metadata: name: my-baseline-namespace labels: pod-security.kubernetes.io/enforce: privileged pod-security.kubernetes.io/enforce-version: v1.25 pod-security.kubernetes.io/audit: baseline pod-security.kubernetes.io/audit-version: v1.25 pod-security.kubernetes.io/warn: restricted pod-security.kubernetes.io/warn-version: v1.25 # The label can be in either of the following formats: # pod-security.kubernetes.io/<MODE>: <LEVEL> # pod-security.kubernetes.io/<MODE>-version: <VERSION> # The audit and warn modes inform you of which security behaviors are violated by the load.
Las etiquetas del espacio de nombres indican el nivel de política que se aplicará al modo. Para cada modo, hay dos etiquetas que determinan la política utilizada:
- pod-security.kubernetes.io/<MODE>: <LEVEL>
- pod-security.kubernetes.io/<MODE>-version: <VERSION>
Opcional, que ancla la política a una versión determinada de Kubernetes.
- <MODE>: debe ser enforce, audit o warn. Para obtener más información sobre los modos, consulte Tabla 2.
- <VERSION>: número de versión de Kubernetes. Por ejemplo, v1.25. También puede utilizar latest.
Si los pods se desplieguen en el espacio de nombres anterior, se aplican las siguientes restricciones de seguridad:
- La verificación en el modo de aplicación se omite (modo de enforce + nivel de privileged).
- Se verifican las restricciones relacionadas con la política de línea de base (modo de audit + nivel de baseline). Es decir, si el pod o contenedor infringen la política, el evento correspondiente se registra en el log de auditoría.
- Se verifican las restricciones relacionadas con la política restringida (modo de warn + nivel restricted). Es decir, si el pod o contenedor infringen la política, el usuario recibirá una alarma al crear el pod.
Migración de la política de seguridad de pods a admisión de seguridad de pods
Si utiliza políticas de seguridad de pods en un clúster anterior a v1.25 y necesita reemplazarlas con admisión de seguridad de pods en un clúster de v1.25 o posterior, siga la guía de Migración de PodSecurityPolicy a la controladora de admisión integrada de PodSecurity.
- La admisión de seguridad de pod admite solo tres modos de aislamiento, menos flexible que las políticas de seguridad de pod. Si necesita más control sobre restricciones específicas, necesitará usar un Validating Admission Webhook para aplicar esas políticas.
- La admisión de seguridad de pod es un controlador de admisión que no cambia, lo que significa que no modificará los pods antes de validarlos. Si confiaba en este aspecto de PSP, necesitará modificar el contexto de seguridad en sus cargas de trabajo, o usar un Mutating Admission Webhook para realizar esos cambios.
- PSP le permite vincular diferentes políticas a diferentes cuentas de servicio. Este enfoque tiene muchas trampas y no se recomienda, pero si requiere esta función de todos modos, tendrá que usar un webhook de terceros en su lugar.
- No aplique la admisión de seguridad de pod a los espacios de nombres donde se despliegan los componentes de CCE, como kube-system, kube-public y kube-node-lease. De lo contrario, los componentes de CCE y las funciones adicionales serán anormales.