IBM Cloud Docs
Admisión de seguridad de pod

Admisión de seguridad de pod

La admisión de seguridad de pod implementa los estándares de seguridad de pod de Kubernetes que restringen el comportamiento de los pods, proporcionando mensajes de aviso y sucesos de auditoría de kube-apiserver para los pods que violan la política de perfil de seguridad de pod configurada para el espacio de nombres relevante.

Red Hat OpenShift on IBM Cloud versión 4.11 y posterior incluye soporte para la admisión de seguridad de pod Kubernetes. Para obtener más información, consulte Admisión de seguridad de pod y Estándares de seguridad de pod en la documentación de Kubernetes.

Pod Security Admission está siempre activado para Red Hat OpenShift on IBM Cloud versión 4.11 y posteriores. Las versiones anteriores de Kubernetes utilizan políticas de seguridad de vainas.

Descripción de los perfiles de seguridad

Los estándares de seguridad de pod de Kubernetes definen los tres perfiles siguientes.

Privilegiado
La configuración de seguridad de pod predeterminada aplica de forma global el perfil de seguridad de pod de privileged Kubernetes, que no está restringido y permite escalamientos de privilegios conocidos, y genera avisos y sucesos de auditoría basados en las políticas establecidas por el perfil de restricted.
Línea base
El perfil baseline es un perfil restrictivo que impide escalabilidades de privilegios conocidas. Permite la configuración de pod predeterminada (especificada mínimamente).
Restringida
El perfil restricted está muy restringido y sigue los métodos recomendados de protección de pod actuales.

Para obtener más información sobre los perfiles de seguridad de pod, consulte Detalles de perfil en la documentación de Kubernetes.

La admisión de seguridad de pod contiene tres modalidades que definen qué acción realiza el plano de control si se detecta una infracción potencial.

imponer
Las infracciones de política hacen que se rechace el pod.
auditoría
Las infracciones de política desencadenan la adición de una anotación de auditoría al suceso registrado en el registro de auditoría, pero por lo demás están permitidas.
warn
Las infracciones de política desencadenan un aviso de cara al usuario, pero de lo contrario se permiten.

A medida que cambian los estándares de seguridad o las implementaciones de perfiles para abordar las nuevas características, puede configurar Pod Security Admission para utilizar una versión específica de los roles. Se admiten las siguientes versiones.

  • Una versión de Kubernetes major.minor (por ejemplo, v1.25)
  • latest

¿Qué pasa si Pod Security Admission no es la opción correcta para mí?

Aunque la admisión de seguridad de pod siempre está habilitada, puede ser uno de varios controladores de admisión. Puede configurar controladores de admisión de Kubernetes de terceros para implementar otros modelos de política de seguridad que se adapten a su caso de uso.

Si configura la admisión de seguridad de pod para aplicar, avisar y auditar utilizando el perfil de privileged, el plano de control permite que se ejecuten todos los pods. A continuación, puede configurar otros controladores de admisión para rechazarlos.

Puede instalar un controlador de admisión de terceros siempre que no realice ninguna de las acciones siguientes.

  • No instala sus propias políticas de seguridad de pod (PSP).
  • No se basa en PSP para imponer partes de la política.

Configuración de etiquetas de espacio de nombres de admisión de seguridad de pod

Puede definir la modalidad de control de admisión que desea utilizar para la seguridad de pod en cada espacio de nombres. Kubernetes define un conjunto de etiquetas que puede establecer para definir cuál de los perfiles predefinidos de Pod Security Standard desea utilizar para un espacio de nombres. La etiqueta que seleccione define qué acción realiza el plano de control si se detecta una posible infracción.

De forma predeterminada, Red Hat OpenShift on IBM Cloud añade las etiquetas de seguridad de pod de privileged a los siguientes espacios de nombres. Estos espacios de nombres se etiquetan en enforce, audit y warn utilizando el perfil privileged.

  • kube-system
  • ibm-system
  • ibm-operators
  • calico-system
  • tigera-operator
  • calico-apiserver (Versión 4.16 y posteriores)

No elimine ni cambie las etiquetas de estos espacios de nombres ni de ninguno de los espacios de nombres de openshift-*.

Se puede etiquetar un espacio de nombres para establecer el perfil de seguridad de pod para cualquiera o para todos los modes de admisión de seguridad de pod.

Por ejemplo, puede etiquetar un espacio de nombres para imponer el perfil privileged además de utilizar warn o audit utilizando el perfil baseline.

Esta etiqueta permite a los administradores y desarrolladores de aplicaciones ejecutar en seco aplicaciones buscando sólo avisos y registros de auditoría en el perfil de baseline sin rechazar pods. A continuación, puede realizar los cambios necesarios en las cargas de trabajo antes de cambiar la modalidad de imposición a baseline.

Las etiquetas de espacio de nombres de admisión de seguridad de pod tienen el formato pod-security.kubernetes.io/<MODE>: <LEVEL> y pod-security.kubernetes.io/<MODE>-version: <VERSION>.

  • pod-security.kubernetes.io/enforce
  • pod-security.kubernetes.io/enforce-version
  • pod-security.kubernetes.io/audit
  • pod-security.kubernetes.io/audit-version
  • pod-security.kubernetes.io/warn
  • pod-security.kubernetes.io/warn-version

Para etiquetar un espacio de nombres para imponer el perfil privileged y generar avisos y sucesos de auditoría para infracciones del perfil baseline, utilice las etiquetas siguientes.

  • pod-security.kubernetes.io/enforce: privileged
  • pod-security.kubernetes.io/enforce-version: latest
  • pod-security.kubernetes.io/audit: baseline
  • pod-security.kubernetes.io/audit-version: latest
  • pod-security.kubernetes.io/warn: baseline
  • pod-security.kubernetes.io/warn-version: latest

Configuración predeterminada del plugin de admisión de seguridad de pod

Red Hat OpenShift on IBM Cloud utiliza el siguiente PodSecurityConfiguration de forma predeterminada.

apiVersion: pod-security.admission.config.k8s.io/v1
kind: PodSecurityConfiguration
defaults:
  enforce: "privileged"
  enforce-version: "latest"
  audit: "privileged"
  audit-version: "latest"
  warn: "privileged"
  warn-version: "latest"
exemptions:
  usernames: []
  runtimeClasses: []
  namespaces: []

Configuración de la admisión de seguridad de pod

Puede configurar el comportamiento de seguridad de pod a nivel de espacio de nombres con etiquetas de seguridad de pod predefinidas. Para obtener más información sobre la configuración, consulte Control de la sincronización de admisión de seguridad de pod en la documentación de Red Hat OpenShift. Tenga en cuenta que los pasos varían para cada versión de clúster, así que asegúrese de que está viendo los pasos para la versión correcta.

Para obtener más información sobre cómo configurar registros de apiserver para Red Hat OpenShift on IBM Cloud, consulte Registros de auditoría del servidor de API deKubernetes.

La admisión de seguridad de pod proporciona la capacidad de imponer, avisar y generar sucesos de auditoría para los pods que violan los perfiles de seguridad. En OpenShift 4.11, la configuración predeterminada aplica el perfil privilegiado, a la vez que genera avisos y sucesos de auditoría basados en el perfil restricted. Este comportamiento se puede controlar a nivel de espacio de nombres mediante el uso de etiquetas de seguridad de pod predefinidas en espacios de nombres. Cuando se aplican los perfiles de seguridad de pod, es posible que vea avisos como el ejemplo siguiente.

`Warning: would violate PodSecurity "restricted:latest": host namespaces (hostNetwork=true, hostPID=true), privileged (container "container-00" must not set securityContext.privileged=true), allowPrivilegeEscalation != false (container "container-00" must set securityContext.allowPrivilegeEscalation=false), unrestricted capabilities (container "container-00" must set securityContext.capabilities.drop=["ALL"]), restricted volume types (volume "host" uses restricted volume type "hostPath"), runAsNonRoot != true (pod or container "container-00" must set securityContext.runAsNonRoot=true), runAsUser=0 (container "container-00" must not set runAsUser=0), seccompProfile (pod or container "container-00" must set securityContext.seccompProfile.type to "RuntimeDefault" or "Localhost")`

En este ejemplo, el pod se sigue creando y se puede ejecutar siempre que la cuenta de servicio esté autorizada para un perfil de SecurityContextConstraint. El aviso indica que los cambios en el perfil securityContext del pod y contenedor son necesarios para que el pod se ejecute bajo el perfil de seguridad de pod especificado, como por ejemplo establecer la opción allowPrivilegeEscalation=false o que se debe utilizar un perfil de seguridad de pod que permita estas prestaciones.

Red Hat OpenShift también incluye un controlador que aplica etiquetas de espacio de nombres basadas en los permisos SCC de las cuentas de servicio en un espacio de nombres determinado. Se aplican tanto la admisión de seguridad de pod como las SCC. Puede utilizar principalmente SCC y utilizar el controlador de sincronización de admisión de seguridad de pod para ajustar la etiqueta de seguridad de pod en el espacio de nombres. O bien, puede utilizar principalmente perfiles de seguridad de pod con un enlace de rol de espacio de nombres que permita a todas las cuentas de servicio del espacio de nombres utilizar un equivalente (o más privilegiado) SCC. No defina enlaces de rol o enlaces de rol de clúster que se apliquen globalmente, como por ejemplo todos los usuarios autorizados o todas las cuentas de servicio en todos los espacios de nombres, ya que estos enlaces pueden afectar a los componentes de Red Hat OpenShift que esperan ejecutarse bajo un SCC determinado.

Recursos adicionales