Configurar perfiles de Seccomp para la seguridad de los pods

En este documento se describe cómo configurar perfiles de Seccomp (modo de computación seguro) de Kubernetes para pods híbridos de Apigee con el fin de mejorar la seguridad restringiendo las llamadas al sistema (syscalls) que pueden hacer los contenedores.

Información sobre los perfiles de Seccomp en Kubernetes

Seccomp es una función de seguridad del kernel de Linux que limita las llamadas al sistema que puede hacer un proceso. Cuando se usa con Kubernetes, puedes aplicar perfiles de Seccomp al securityContext de un pod para restringir las llamadas al sistema disponibles para sus contenedores. De esta forma, se reduce la superficie de ataque del contenedor y se mitiga el riesgo de que se produzcan brechas de seguridad o una escalada de privilegios, ya que se aplica el principio de mínimos accesos.

Para obtener más información sobre Seccomp en Kubernetes, consulta Secure Computing (Seccomp) en la documentación de Kubernetes.

En el modo híbrido, los perfiles de Seccomp no están habilitados de forma predeterminada. Puedes aplicar un perfil de Seccomp a componentes híbridos añadiendo el objeto seccompProfile a tu archivo overrides.yaml.

Configurar perfiles de Seccomp

Puedes aplicar perfiles de Seccomp de forma global, por entorno o por componente en tu archivo overrides.yaml añadiendo el bloque de configuración securityContext.seccompProfile. Hybrid admite los siguientes tipos de perfiles de Seccomp:

  • RuntimeDefault: el perfil predeterminado especificado por el tiempo de ejecución del contenedor. Esta es la opción recomendada, ya que proporciona un nivel de seguridad razonable y, al mismo tiempo, mantiene la compatibilidad con la mayoría de las cargas de trabajo.
  • Unconfined: no aplica restricciones de Seccomp al pod. Esta es la opción menos segura y se debe usar con precaución.

Prioridad de la configuración

Puedes definir el seccompProfile en los siguientes niveles de overrides.yaml. Los ajustes a nivel de componente tienen prioridad sobre los ajustes a nivel de entorno, y estos últimos tienen prioridad sobre los ajustes globales:

  1. Nivel de componente: se aplica a un componente específico (por ejemplo, runtime o cassandra).
  2. Nivel de entorno: se aplica a todos los componentes de un entorno específico definido en la matriz envs[], a menos que se anule a nivel de componente.
  3. Nivel global: se aplica a todos los componentes del clúster, a menos que se anule en el nivel de entorno o de componente.

Ejemplos

Configuración global

Para aplicar el perfil de RuntimeDefault Seccomp a todos los componentes que no tengan una anulación a nivel de entorno o de componente, añade lo siguiente al nivel superior de tu overrides.yaml:

securityContext:
  seccompProfile:
    type: RuntimeDefault

Configuración del entorno

Para aplicar el perfil de RuntimeDefault Seccomp a todos los componentes de un entorno específico, añade la configuración en el elemento envs[]:

envs:
  - name: "my-environment"
    securityContext:
      seccompProfile:
        type: RuntimeDefault
    ...

Configuración de componentes

Para aplicar el perfil RuntimeDefault Seccomp a un componente específico (por ejemplo, el componente de tiempo de ejecución), añade la configuración en ese componente:

runtime:
  securityContext:
    seccompProfile:
      type: RuntimeDefault
...