En este documento, se presenta la comparativa de CIS Kubernetes y se explica cómo auditar tu cumplimiento con la comparativa y lo que Google Distributed Cloud (GDC) aislado configura cuando no puedes implementar una recomendación tú mismo.
Acerca de las comparativas de CIS
El Center for Internet Security (CIS) lanza comparativas de prácticas recomendadas de seguridad. La comparativa de CIS para Kubernetes proporciona un conjunto de recomendaciones para configurar Kubernetes de modo que posibilite una postura de seguridad sólida. La comparativa está vinculada a una versión específica de Kubernetes. La comparativa de CIS para Kubernetes está escrita para la distribución de Kubernetes de código abierto y tiene la intención de ser aplicable en todo el mundo, en todas las distribuciones.
Accede a la comparativa
La comparativa de CIS para Kubernetes está disponible en el sitio web de CIS.
Niveles de recomendación
En la siguiente tabla, se describen los niveles de recomendación en la comparativa de CIS en Kubernetes.
| Nivel | Descripción |
|---|---|
| Nivel 1 | Las recomendaciones muestran una o más de las siguientes características: |
| Nivel 2 | Se extiende el perfil del nivel 1. Las recomendaciones muestran una o más de las siguientes características: |
Estado de evaluación
Se incluye un estado de evaluación para cada recomendación. El estado de evaluación indica si la recomendación dada puede automatizarse o requiere pasos manuales para implementarse. Ambos estados tienen la misma importancia, y se determinan y admiten según 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 la comparativa de CIS para Kubernetes |
|---|---|---|
| 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 del nodo de 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 configurados en 600 o más restringidos (automático) |
L1 | Pass |
| 1.1.2 | Asegúrate de que la propiedad del archivo de especificación del pod del servidor de la API esté configurada en root:root (automático) |
L1 | Pass |
| 1.1.3 | Asegúrate de que los permisos del archivo de especificación del pod del administrador del controlador estén configurados en 600 o más restringidos (automático) |
L1 | Pass |
| 1.1.4 | Asegúrate de que la propiedad del archivo de especificación del pod del administrador del controlador esté configurada en root:root (automático) |
L1 | Pass |
| 1.1.5 | Asegúrate de que los permisos del archivo de especificación del pod del programador estén configurados en 600 o más restringidos (automático) |
L1 | Pass |
| 1.1.6 | Asegúrate de que la propiedad del archivo de especificación del pod del programador esté configurada en root:root (automático). |
L1 | Pass |
| 1.1.7 | Asegúrate de que los permisos del archivo de especificación del pod de etcd estén configurados en 600 o más restringidos (automático) |
L1 | Pass |
| 1.1.8 | Asegúrate de que la propiedad del archivo de especificación del pod de etcd esté configurada en root:root (automático) |
L1 | Pass |
| 1.1.9 | Asegúrate de que los permisos del archivo de la interfaz de red de los contenedores estén configurados en 600 o más restringidos (manual) |
L1 | Advertencia |
| 1.1.10 | Asegúrate de que la propiedad del archivo de la interfaz de red del contenedor esté configurada en root:root (manual) |
L1 | Advertencia |
| 1.1.11 | Asegúrate de que los permisos del directorio de datos de etcd estén configurados en 700 o más restringidos (automático) |
L1 | Pass |
| 1.1.12 | Asegúrate de que la propiedad del directorio de datos de etcd esté configurada en etcd:etcd (automático) |
L1 | Reprobada |
| 1.1.13 | Asegúrate de que los permisos del archivo de credenciales administrativas predeterminado estén configurados en 600 (automático) |
L1 | Pass |
| 1.1.14 | Asegúrate de que la propiedad del archivo de credenciales administrativas predeterminado esté configurada en root:root (automático) |
L1 | Pass |
| 1.1.15 | Asegúrate de que los permisos del archivo scheduler.conf estén configurados en 600 o más restringidos (automático) |
L1 | Pass |
| 1.1.16 | Asegúrate de que la propiedad del archivo scheduler.conf esté establecida en root:root (automático) |
L1 | Reprobada |
| 1.1.17 | Asegúrate de que los permisos del archivo controller-manager.conf estén configurados en 600 o más restringidos (automático) |
L1 | Pass |
| 1.1.18 | Asegúrate de que la propiedad del archivo controller-manager.conf esté establecida en root:root (automático) |
L1 | Reprobada |
| 1.1.19 | Asegúrate de que la propiedad del archivo y del directorio de la PKI de Kubernetes esté configurada como root:root (automático) |
L1 | Reprobada |
| 1.1.20 | Asegúrate de que los permisos del archivo de certificado de la PKI de Kubernetes estén configurados en 600 o más restringidos (manual) |
L1 | Advertencia |
| 1.1.21 | Asegúrate de que los permisos del archivo de claves de la PKI de Kubernetes estén configurados como 600 (manual) |
L1 | Advertencia |
| 1.2 | Servidor de la API | ||
| 1.2.1 | Asegúrate de que el argumento --anonymous-auth esté configurado como false (manual) |
L1 | Advertencia |
| 1.2.2 | Asegúrate de que el parámetro --token-auth-file no esté configurado (automático) |
L1 | Pass |
| 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 configurados como corresponda (automático) |
L1 | Pass |
| 1.2.5 | Asegúrate de que el argumento --kubelet-certificate-authority esté configurado como corresponda (automático) |
L1 | Pass |
| 1.2.6 | Asegúrate de que el argumento --authorization-mode no esté configurado en AlwaysAllow (automático) |
L1 | Pass |
| 1.2.7 | Asegúrate de que el argumento --authorization-mode incluya Node (automático) |
L1 | Pass |
| 1.2.8 | Asegúrate de que el argumento --authorization-mode incluya el RBAC (automático) |
L1 | Pass |
| 1.2.9 | Asegúrate de que el complemento de control de admisión EventRateLimit esté establecido (manual). |
L1 | Advertencia |
| 1.2.10 | Asegúrate de que el complemento de control de admisión AlwaysAdmit no esté establecido (automático) |
L1 | Pass |
| 1.2.11 | Asegúrate de que el complemento de control de admisión AlwaysPullImages esté establecido (manual). |
L1 | Advertencia |
| 1.2.12 | Asegúrate de que el complemento de control de admisión ServiceAccount esté establecido (automático) |
L1 | Aprobada |
| 1.2.13 | Asegúrate de que el complemento de control de admisión NamespaceLifecycle esté establecido (automático) |
L1 | Pass |
| 1.2.14 | Asegúrate de que el complemento de control de admisión NodeRestriction esté establecido (automático) |
L1 | Pass |
| 1.2.15 | Asegúrate de que el argumento --profiling esté configurado como false (automático) |
L1 | Pass |
| 1.2.16 | Asegúrate de que el argumento --audit-log-path esté configurado (automático) |
L1 | Pass |
| 1.2.17 | Asegúrate de que el argumento --audit-log-maxage esté configurado como 30 o según corresponda (automático) |
L1 | Pass |
| 1.2.18 | Asegúrate de que el argumento --audit-log-maxbackup esté configurado como 10 o según corresponda (automático) |
L1 | Pass |
| 1.2.19 | Asegúrate de que el argumento --audit-log-maxsize esté configurado como 100 o según corresponda (automático) |
L1 | Pass |
| 1.2.20 | Asegúrate de que el argumento --request-timeout esté configurado como corresponda (manual) |
L1 | Advertencia |
| 1.2.21 | Asegúrate de que el argumento --service-account-lookup esté configurado como true (automático) |
L1 | Pass |
| 1.2.22 | Asegúrate de que el argumento --service-account-key-file esté configurado como corresponda (automático) |
L1 | Pass |
| 1.2.23 | Asegúrate de que los argumentos --etcd-certfile y --etcd-keyfile estén configurados como corresponda (automático) |
L1 | Pass |
| 1.2.24 | Asegúrate de que los argumentos --tls-cert-file y --tls-private-key-file estén configurados como corresponda (automático) |
L1 | Pass |
| 1.2.25 | Asegúrate de que el argumento --client-ca-file esté configurado como corresponda (automático) |
L1 | Pass |
| 1.2.26 | Asegúrate de que el argumento --etcd-cafile esté configurado como corresponda (automático) |
L1 | Pass |
| 1.2.27 | Asegúrate de que el argumento --encryption-provider-config esté configurado como corresponda (manual) |
L1 | Pass |
| 1.2.28 | Asegúrate de que los proveedores de encriptación estén configurados según corresponda (manual) | L1 | Pass |
| 1.2.29 | Asegúrate de que el servidor de API solo use algoritmos de cifrado criptográficos sólidos (manual) | L1 | Pass |
| 1.3 | Administrador del controlador | ||
| 1.3.1 | Asegúrate de que el argumento --terminated-pod-gc-threshold esté configurado como corresponda (manual) |
L1 | Pass |
| 1.3.2 | Asegúrate de que --profiling argument esté configurado como false (automático) |
L1 | Pass |
| 1.3.3 | Asegúrate de que el argumento --use-service-account-credentials esté configurado como true (automático) |
L1 | Pass |
| 1.3.4 | Asegúrate de que el argumento --service-account-private-key-file esté configurado como corresponda (automático) |
L1 | Pass |
| 1.3.5 | Asegúrate de que el argumento --root-ca-file esté configurado como corresponda (automático) |
L1 | Pass |
| 1.3.6 | Asegúrate de que el argumento RotateKubeletServerCertificate esté configurado como true (automático) |
L2 | Pass |
| 1.3.7 | Asegúrate de que el argumento --bind-address esté configurado como 127.0.0.1 (automático) |
L1 | Reprobada |
| 1.4 | Programador | ||
| 1.4.1 | Asegúrate de que el argumento --profiling esté configurado como false (automático) |
L1 | Pass |
| 1.4.2 | Asegúrate de que el argumento --bind-address esté configurado como 127.0.0.1 (automático) |
L1 | Reprobada |
Comparativas de auditoría
Las instrucciones específicas para auditar cada recomendación están disponibles como parte de la comparativa de CIS relevante. Sin embargo, es posible que desees automatizar algunas de estas verificaciones para simplificar la verificación de estos controles en tu entorno. La siguiente herramienta puede ayudarte.
Auditoría automatizada de la comparativa de CIS en Kubernetes
Puedes usar una herramienta de código abierto kube-bench para probar la configuración de tu clúster con la comparativa de CIS para Kubernetes.
Asegúrate de especificar la versión adecuada. Por ejemplo:
kube-bench --benchmark BENCHMARK_VERSION
Reemplaza BENCHMARK_VERSION por la versión de la comparativa de CIS para Kubernetes que usas para evaluar tu clúster.
Para ejecutar secciones específicas de la comparativa de CIS, como master, nodo 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.