CIS Benchmark de Kubernetes

En este documento se presenta la guía de CIS para Kubernetes, se explica cómo auditar el cumplimiento de la guía y se indica qué configura Google Distributed Cloud (GDC) air-gapped cuando no puedes implementar una recomendación por tu cuenta.

Acerca de las comparativas del CIS

El Center for Internet Security (CIS) publica comparativas de prácticas recomendadas de seguridad. El estándar CIS Benchmark de Kubernetes proporciona un conjunto de recomendaciones para configurar Kubernetes de forma que se mantenga una postura de seguridad sólida. La comparativa está vinculada a una versión específica de Kubernetes. El benchmark de Kubernetes del CIS se ha escrito para la distribución de código abierto de Kubernetes y se ha diseñado para que se pueda aplicar de forma universal en todas las distribuciones.

Acceder a la comparativa

La guía de CIS Kubernetes está disponible en el sitio web de CIS.

Niveles de recomendación

En la siguiente tabla se describen los niveles de recomendación de la prueba comparativa de Kubernetes del CIS.

Nivel Descripción
Nivel 1

Las recomendaciones presentan una o varias de las siguientes características:

  • Sé práctico y prudente.
  • Ofrece una ventaja de seguridad clara.
  • No inhibas la utilidad de la tecnología más allá de los medios aceptables.
  • Nivel 2

    Amplía el perfil de nivel 1.

    Las recomendaciones presentan una o varias de las siguientes características:

  • Se aplica a entornos o casos prácticos en los que la seguridad es primordial.
  • Actúa como medida de defensa en profundidad.
  • Puede inhibir negativamente la utilidad o el rendimiento de la tecnología.
  • Estado de la evaluación

    Se incluye un estado de evaluación para cada recomendación. El estado de la evaluación indica si la recomendación se puede automatizar o si requiere pasos manuales para implementarse. Ambos estados son igual de importantes y se determinan y se admiten tal como se define en las siguientes tablas.

    Versiones

    La evaluación hace referencia a las siguientes versiones:

    Versión de GDC en Bare Metal Versión de Kubernetes Versión de CIS Kubernetes Benchmark
    1.30 1.30.9 v0.10.4

    Estado del clúster de Kubernetes aislado de GDC

    # Recomendación Nivel Estado
    1 Configuración de seguridad del plano de control
    1.1 Archivos de configuración de nodos del plano de control
    1.1.1 Asegúrate de que los permisos del archivo de especificación del pod del servidor de la API estén definidos en 600 o en un valor más restrictivo (automatizado) L1 Superada
    1.1.2 Asegúrate de que el archivo de especificación del pod del servidor de la API sea propiedad de root:root (automatizado) L1 Superada
    1.1.3 Asegúrate de que los permisos del archivo de especificación del pod del gestor de controladores se hayan definido en 600 o en un valor más restrictivo (automatizado) L1 Superada
    1.1.4 Asegúrate de que la propiedad del archivo de especificación del pod del gestor de controladores esté definida como root:root (automatizado) L1 Superada
    1.1.5 Comprueba que los permisos del archivo de especificación del pod del programador se hayan definido como 600 o más restrictivos (automatizado). L1 Superada
    1.1.6 Asegúrate de que el archivo de especificación del pod del programador sea propiedad de root:root (automatizado) L1 Superada
    1.1.7 Asegúrate de que los permisos del archivo de especificación del pod etcd estén definidos en 600 o en un valor más restrictivo (automatizado) L1 Superada
    1.1.8 Asegúrate de que la propiedad del archivo de especificación del pod de etcd esté definida como root:root (automatizado) L1 Superada
    1.1.9 Asegúrate de que los permisos del archivo de interfaz de red de contenedor estén definidos en 600 o en un valor más restrictivo (manual). L1 Advertencia
    1.1.10 Asegúrate de que el archivo de interfaz de red de contenedor sea propiedad de root:root (manual) L1 Advertencia
    1.1.11 Asegúrate de que los permisos del directorio de datos de etcd estén definidos en 700 o en un valor más restrictivo (automatizado) L1 Superada
    1.1.12 Asegúrate de que el propietario del directorio de datos de etcd sea etcd:etcd (automatizado) L1 No superada
    1.1.13 Asegúrate de que los permisos del archivo de credenciales administrativas predeterminado estén definidos como 600 (automatizado) L1 Superada
    1.1.14 Asegúrate de que la propiedad del archivo de credenciales administrativas predeterminado esté definida como root:root (automatizado) L1 Superada
    1.1.15 Asegúrate de que los permisos del archivo scheduler.conf estén definidos en 600 o en un valor más restrictivo (Automático). L1 Superada
    1.1.16 Asegúrate de que la propiedad del archivo scheduler.conf se haya asignado a root:root (automatizado) L1 No superada
    1.1.17 Asegúrate de que los permisos del archivo controller-manager.conf estén definidos en 600 o en un valor más restrictivo (Automático). L1 Superada
    1.1.18 Asegúrate de que la propiedad del archivo controller-manager.conf se haya asignado a root:root (automatizado) L1 No superada
    1.1.19 Asegúrate de que el directorio PKI de Kubernetes y la propiedad del archivo estén definidos como root:root (automatizado) L1 No superada
    1.1.20 Asegúrate de que los permisos del archivo de certificado de PKI de Kubernetes estén definidos en 600 o en un valor más restrictivo (manual). L1 Advertencia
    1.1.21 Asegúrate de que los permisos del archivo de claves de PKI de Kubernetes estén definidos en 600 (manual) L1 Advertencia
    1.2 Servidor de API
    1.2.1 Asegúrate de que el argumento --anonymous-auth esté definido como false (Manual). L1 Advertencia
    1.2.2 Asegúrate de que el parámetro --token-auth-file no esté definido (automatizado) L1 Superada
    1.2.3 Asegúrate de que --DenyServiceExternalIPs esté configurado (manual). L1 Advertencia
    1.2.4 Asegúrate de que los argumentos --kubelet-client-certificate y --kubelet-client-key estén definidos correctamente (Automático). L1 Superada
    1.2.5 Asegúrate de que el argumento --kubelet-certificate-authority esté configurado correctamente (automatizado) L1 Superada
    1.2.6 Asegúrate de que el argumento --authorization-mode no esté definido como AlwaysAllow (automatizado) L1 Superada
    1.2.7 Asegúrate de que el argumento --authorization-mode incluya Node (automatizado) L1 Superada
    1.2.8 Asegúrate de que el argumento --authorization-mode incluya RBAC (automatizado) L1 Superada
    1.2.9 Asegúrate de que el complemento de control de acceso EventRateLimit esté configurado como Manual L1 Advertencia
    1.2.10 Asegúrate de que el complemento de control de acceso AlwaysAdmit no esté configurado (automatizado) L1 Superada
    1.2.11 Asegúrate de que el complemento de control de acceso AlwaysPullImages esté configurado como Manual L1 Advertencia
    1.2.12 Asegúrate de que el complemento de control de acceso ServiceAccount esté configurado (automatizado) L1 Superada
    1.2.13 Asegúrate de que el complemento de control de acceso NamespaceLifecycle esté configurado (automatizado) L1 Superada
    1.2.14 Asegúrate de que el complemento de control de acceso NodeRestriction esté configurado (automatizado) L1 Superada
    1.2.15 Asegúrate de que el argumento --profiling esté configurado como false (Automatizado). L1 Superada
    1.2.16 Asegúrate de que el argumento --audit-log-path esté definido (automatizado) L1 Superada
    1.2.17 Asegúrate de que el argumento --audit-log-maxage esté definido como 30 o como corresponda (automatizado). L1 Superada
    1.2.18 Asegúrate de que el argumento --audit-log-maxbackup esté definido como 10 o como corresponda (automatizado). L1 Superada
    1.2.19 Asegúrate de que el argumento --audit-log-maxsize esté definido como 100 o como corresponda (automatizado). L1 Superada
    1.2.20 Asegúrate de que el argumento --request-timeout esté configurado correctamente (manual) L1 Advertencia
    1.2.21 Asegúrate de que el argumento --service-account-lookup esté configurado como true (Automatizado). L1 Superada
    1.2.22 Asegúrate de que el argumento --service-account-key-file esté configurado correctamente (automatizado) L1 Superada
    1.2.23 Asegúrate de que los argumentos --etcd-certfile y --etcd-keyfile estén definidos correctamente (Automático). L1 Superada
    1.2.24 Asegúrate de que los argumentos --tls-cert-file y --tls-private-key-file estén definidos correctamente (Automático). L1 Superada
    1.2.25 Asegúrate de que el argumento --client-ca-file esté configurado correctamente (automatizado) L1 Superada
    1.2.26 Asegúrate de que el argumento --etcd-cafile esté configurado correctamente (automatizado) L1 Superada
    1.2.27 Asegúrate de que el argumento --encryption-provider-config esté configurado correctamente (manual) L1 Superada
    1.2.28 Asegurarse de que los proveedores de cifrado estén configurados correctamente (manual) L1 Superada
    1.2.29 Asegúrate de que el servidor de la API solo usa cifrados criptográficos seguros (manual) L1 Superada
    1.3 Gestor de controladores
    1.3.1 Asegúrate de que el argumento --terminated-pod-gc-threshold esté configurado correctamente (manual) L1 Superada
    1.3.2 Comprueba que --profiling argument esté configurado como false (automatizado) L1 Superada
    1.3.3 Asegúrate de que el argumento --use-service-account-credentials esté configurado como true (Automatizado). L1 Superada
    1.3.4 Asegúrate de que el argumento --service-account-private-key-file esté configurado correctamente (automatizado) L1 Superada
    1.3.5 Asegúrate de que el argumento --root-ca-file esté configurado correctamente (automatizado) L1 Superada
    1.3.6 Asegúrate de que el argumento RotateKubeletServerCertificate esté configurado como true (Automatizado). L2 Superada
    1.3.7 Asegúrate de que el argumento --bind-address esté configurado como 127.0.0.1 (Automatizado). L1 No superada
    1.4 Programador
    1.4.1 Asegúrate de que el argumento --profiling esté configurado como false (Automatizado). L1 Superada
    1.4.2 Asegúrate de que el argumento --bind-address esté configurado como 127.0.0.1 (Automatizado). L1 No superada

    Comparativas de auditoría

    Las instrucciones específicas para auditar cada recomendación están disponibles en el benchmark de CIS correspondiente. Sin embargo, puede que quieras automatizar algunas de estas comprobaciones para simplificar la verificación de estos controles en tu entorno. La siguiente herramienta puede ayudarte con esto.

    Auditoría automatizada de la comparativa de CIS Kubernetes

    Puedes usar la herramienta de código abierto kube-bench para probar la configuración de tu clúster con la prueba comparativa de Kubernetes del CIS.

    Asegúrate de especificar la versión adecuada. Por ejemplo:

    kube-bench --benchmark BENCHMARK_VERSION
    

    Sustituye BENCHMARK_VERSION por la versión de la guía de referencia de CIS Kubernetes que estés usando para evaluar tu clúster.

    Para ejecutar secciones específicas de CIS Benchmark, como master, node o etcd, usa el comando run --targets. Por ejemplo:

    kube-bench run --targets master,node
    

    Para obtener más información, consulta la documentación de kube-bench sobre cómo ejecutar kube-bench y los comandos y las marcas.