En esta página, se presenta la comparativa de CIS Kubernetes, se proporciona una evaluación y se explica qué hace Google Distributed Cloud Connected para abordar las recomendaciones.
La comparativa de CIS
El Center for Internet Security (CIS) lanza comparativas de prácticas recomendadas de seguridad. Las comparativas de CIS para Kubernetes proporcionan un conjunto de recomendaciones destinadas a configurar Kubernetes con el objetivo de mantener una 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.
Versiones
En la siguiente tabla, se enumeran las versiones de Distributed Cloud Connected, Kubernetes y la comparativa de CIS para Kubernetes que se usaron para realizar la evaluación que se describe en este documento:
| Versión de Distributed Cloud conectado | Versión de Kubernetes | Versión de la comparativa de CIS para Kubernetes |
|---|---|---|
| 1.4.0: Plano de control local | 1.25 | 1.70 |
Accede a la comparativa
La comparativa de CIS para Kubernetes está disponible en el sitio web de CIS.
Niveles de recomendación
En la comparativa de CIS para Kubernetes:
| Nivel | Descripción |
|---|---|
| Nivel 1 | Se busca que las recomendaciones sean de la siguiente forma: |
| 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 a continuación:
| Puntuación | Descripción |
|---|---|
| Automatizada | Representa recomendaciones para las que la evaluación de un control técnico se puede automatizar y validar por completo a un estado de aprobación/error. En la sección Recomendaciones, se incluirá la información necesaria para implementar la automatización. |
| Manual | Representa recomendaciones para las que la evaluación de un control técnico no se puede automatizar por completo y requiere todos los pasos manuales para validar que el estado esté configurado como se espera. El estado esperado puede variar según el entorno. |
Estado de los clústeres del plano de control local conectados a Distributed Cloud
| # | 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 644 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 644 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 644 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 644 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 644 o más restringidos (manual) |
L1 | Control equivalente |
| 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 | Pass |
| 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 | Control equivalente |
| 1.1.12 | Asegúrate de que la propiedad del directorio de datos de etcd esté configurada en etcd:etcd (automático) |
L1 | Control equivalente |
| 1.1.13 | Asegúrate de que los permisos del archivo admin.conf estén configurados en 600 o más restringidos (automático) |
L1 | Pass |
| 1.1.14 | Asegúrate de que la propiedad del archivo admin.conf esté establecida en root:root (automático) |
L1 | Pass |
| 1.1.15 | Asegúrate de que los permisos del archivo scheduler.conf estén configurados en 644 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 | Control equivalente |
| 1.1.17 | Asegúrate de que los permisos del archivo controller-manager.conf estén configurados en 644 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 | Control equivalente |
| 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 | Control equivalente |
| 1.1.20 | Asegúrate de que los permisos del archivo de certificado de la PKI de Kubernetes estén configurados en 644 o más restringidos (manual) |
L1 | Control equivalente |
| 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 | Pass |
| 1.2 | Servidor de la API | ||
| 1.2.1 | Asegúrate de que el argumento --anonymous-auth esté configurado como falso (manual) |
L1 | Pass |
| 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 no esté configurado (automático) |
L1 | Reprobada |
| 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 | Reprobada |
| 1.2.9 | Asegúrate de que el complemento de control de admisión EventRateLimit esté establecido (manual) | L1 | Pass |
| 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 | Reprobadas |
| 1.2.12 | Asegúrate de que el complemento de control de admisión SecurityContextDeny esté establecido si no se usa PodSecurityPolicy (manual) | L1 | Advertencia |
| 1.2.13 | Asegúrate de que el complemento de control de admisión ServiceAccount esté establecido.(automático) | L1 | Pass |
| 1.2.14 | Asegúrate de que el complemento de control de admisión NamespaceLifecycle esté establecido (automático) | L1 | Pass |
| 1.2.15 | Asegúrate de que el complemento de control de admisión NodeRestriction esté establecido (automático) | L1 | Pass |
| 1.2.16 | Asegúrate de que el argumento --secure-port no esté establecido en 0 (automático) |
L1 | Pass |
| 1.2.17 | Asegúrate de que el argumento --profiling esté configurado como falso (automático) |
L1 | Pass |
| 1.2.18 | Asegúrate de que el argumento --audit-log-path esté configurado (automático) |
L1 | Reprobada |
| 1.2.19 | Asegúrate de que el argumento --audit-log-maxage esté configurado como 30 o según corresponda (automático) |
L1 | Reprobada |
| 1.2.20 | Asegúrate de que el argumento --audit-log-maxbackup esté configurado como 10 o según corresponda (automático) |
L1 | Reprobada |
| 1.2.21 | Asegúrate de que el argumento --audit-log-maxsize esté configurado como 100 o según corresponda (automático) |
L1 | Reprobada |
| 1.2.22 | Asegúrate de que el argumento --request-timeout esté configurado como corresponda (manual) |
L1 | Reprobada |
| 1.2.23 | Asegúrate de que el argumento --service-account-lookup esté configurado como verdadero (automático) |
L1 | Pass |
| 1.2.24 | Asegúrate de que el argumento --service-account-key-file esté configurado como corresponda (automático) |
L1 | Pass |
| 1.2.25 | Asegúrate de que los argumentos --etcd-certfile y --etcd-keyfile estén configurados como corresponda (automático) |
L1 | Pass |
| 1.2.26 | 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.27 | Asegúrate de que el argumento --client-ca-file esté configurado como corresponda (automático) |
L1 | Pass |
| 1.2.28 | Asegúrate de que el argumento --etcd-cafile esté configurado como corresponda (automático) |
L1 | Pass |
| 1.2.29 | Asegúrate de que el argumento --encryption-provider-config esté configurado como corresponda (manual) |
L1 | Pass |
| 1.2.30 | Asegúrate de que los proveedores de encriptación estén configurados según corresponda (manual) | L1 | Pass |
| 1.2.31 | 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 el argumento --profiling esté configurado como falso (automático) |
L1 | Pass |
| 1.3.3 | Asegúrate de que el argumento --use-service-account-credentials esté configurado como verdadero (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 verdadero (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 | Pass |
| 1.4 | Programador | ||
| 1.4.1 | Asegúrate de que el argumento --profiling esté configurado como falso (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 | Pass |
| 2 | ** etcd Configuración de nodos** |
||
| 2.1 | Asegúrate de que los argumentos --cert-file y --key-file estén configurados como corresponda (automático) |
L1 | Pass |
| 2.2 | Asegúrate de que el argumento --client-cert-auth esté configurado como verdadero (automático) |
L1 | Pass |
| 2.3 | Asegúrate de que el argumento --auto-tls no esté configurado como verdadero (automático) |
L1 | Pass |
| 2.4 | Asegúrate de que los argumentos --peer-cert-file y --peer-key-file estén configurados como corresponda (automático) |
L1 | Pass |
| 2.5 | Asegúrate de que el argumento --peer-client-cert-auth esté configurado como verdadero (automático) |
L1 | Pass |
| 2.6 | Asegúrate de que el argumento --peer-auto-tls no esté configurado como verdadero (automático) |
L1 | Pass |
| 2.7 | Asegúrate de usar una autoridad certificada única para etcd (manual) | L2 | Pass |
| 3 | Configuración del plano de control | ||
| 3.1 | Autenticación y autorización | ||
| 3.1.1 | La autenticación del certificado de cliente no se debe usar para los usuarios (manual) | L2 | Pass |
| 3.2 | Logging | ||
| 3.2.1 | Asegúrate de crear una política de auditoría mínima (manual) | L1 | Pass |
| 3.2.2 | Asegúrate de que la política de auditoría abarque los problemas de seguridad clave (manual) | L2 | Reprobada |
| 4 | Configuración de seguridad del nodo trabajador | ||
| 4.1 | Archivos de configuración del nodo trabajador | ||
| 4.1.1 | Asegúrate de que los permisos del archivo de servicio de kubelet estén configurados en 644 o más restringidos (automático) |
L1 | Reprobada |
| 4.1.2 | Asegúrate de que la propiedad del archivo de servicio de kubelet esté configurada en root:root (automático) |
L1 | Pass |
| 4.1.3 | Si existe un archivo kubeconfig de proxy, asegúrate de que los permisos estén configurados como 644 o más restringidos (manual) |
L1 | Pass |
| 4.1.4 | Si existe el archivo kubeconfig del proxy, de que los permisos estén establecidos en root:root o más restrictivos (Manual) |
L1 | Pass |
| 4.1.5 | Asegúrate de que los permisos del archivo --kubeconfig kubelet.conf estén configurados en 644 o más restringidos (automático) |
L1 | Pass |
| 4.1.6 | Asegúrate de que la propiedad del archivo --kubeconfig kubelet.conf esté establecida en root:root (automático) |
L1 | Pass |
| 4.1.7 | Asegúrate de que los permisos del archivo de autoridades certificadas estén configurados en 644 o más restringidos (manual) |
L1 | Reprobada |
| 4.1.8 | Asegúrate de que la propiedad del archivo de autoridades certificadas del cliente esté configurada en root:root (manual) |
L1 | Pass |
| 4.1.9 | Asegúrate de que el archivo de configuración --config de kubelet tenga permisos establecidos en 644 o más restringidos (automático) |
L1 | Reprobada |
| 4.1.10 | Asegúrate de que la propiedad del archivo de configuración --config de kubelet esté establecida en root:root(automático) |
L1 | Pass |
| 4.2 | Kubelet | ||
| 4.2.1 | Asegúrate de que el argumento --anonymous-auth esté configurado como falso (automático) |
L1 | Pass |
| 4.2.2 | Asegúrate de que el argumento --authorization-mode no esté configurado en AlwaysAllow (automático) |
L1 | Pass |
| 4.2.3 | Asegúrate de que el argumento --client-ca-file esté configurado como corresponda (automático) |
L1 | Pass |
| 4.2.4 | Asegúrate de que el argumento --read-only-port esté configurado como 0 (manual) |
L1 | Reprobada |
| 4.2.5 | Asegúrate de que el argumento --streaming-connection-idle-timeout no esté establecido en 0 (manual) |
L1 | Pass |
| 4.2.6 | Asegúrate de que el argumento --protect-kernel-defaults esté configurado como verdadero (automático) |
L1 | Aprobada |
| 4.2.7 | Asegúrate de que el argumento --make-iptables-util-chains esté configurado como verdadero (automático) |
L1 | Pass |
| 4.2.8 | Asegúrate de que el argumento --hostname-override no esté configurado (manual) |
L2 | Aprobada |
| 4.2.9 | Asegúrate de que el argumento --event-qps esté configurado como 0 o en un nivel que garantice la captura de eventos apropiada (manual) |
L1 | Control equivalente |
| 4.2.10 | Asegúrate de que los argumentos --tls-cert-file y --tls-private-key-file estén configurados como corresponda (manual) |
L1 | Aprobada |
| 4.2.11 | Asegúrate de que el argumento --rotate-certificates no esté configurado como falso (automático) |
L1 | Pass |
| 4.2.12 | Verifica que el argumento RotateKubeletServerCertificate esté configurado como verdadero (manual) | L1 | Pass |
| 4.2.13 | Asegúrate de que Kubelet solo use algoritmos de cifrado criptográficos sólidos (manual) | L1 | Reprobada |
Fallas y controles equivalentes para clústeres del plano de control local de Distributed Cloud Connected
| # | Recomendación | Nivel | Estado | Valor | Justificación |
|---|---|---|---|---|---|
| 1 | Configuración de seguridad del plano de control | ||||
| 1.1.9 | Asegúrate de que los permisos del archivo de la interfaz de red de los contenedores estén configurados en 644 o más restringidos (manual) |
L1 | Control equivalente | 755 |
Ninguno |
| 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 | Control equivalente | 755 |
El directorio de datos etcd tiene los permisos 755 predeterminados, pero sus subdirectorios usan 700. |
| 1.1.12 | Asegúrate de que la propiedad del directorio de datos etcd esté configurada en etcd:etcd (automático) |
L1 | Control equivalente | 2003:2003 |
El directorio de datos etcd, /var/lib/etcd, es propiedad de 2003:2003 debido a control-plane sin raíz para una seguridad mejorada. |
| 1.1.16 | Asegúrate de que la propiedad del archivo scheduler.conf esté establecida en root:root (automático) |
L1 | Control equivalente | 2002:2002 |
scheduler.conf es propiedad de 2002:2002 debido a plano de control sin permisos de administrador para mejorar la seguridad. |
| 1.1.18 | Asegúrate de que la propiedad del archivo controller-manager.conf esté establecida en root:root (automático) |
L1 | Control equivalente | 2001:2001 |
controller-manager.conf es propiedad de 2001:2001 debido a plano de control sin permisos de administrador para mejorar la seguridad. |
| 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 | Control equivalente | Varía | El directorio de la PKI, /etc/kubernetes/pki, es propiedad de root:root; los archivos dentro del directorio tienen varios propietarios. Esto se debe al plano de control sin permisos de administrador para mejorar la seguridad. |
| 1.1.20 | Asegúrate de que los permisos del archivo de certificado de la PKI de Kubernetes estén configurados en 644 o más restringidos (manual) |
L1 | Control equivalente | 644 |
Esto se debe al plano de control sin permisos de administrador para mejorar la seguridad. |
| 1.2 | Servidor de la API | ||||
| 1.2.3 | Asegúrate de que --DenyServiceExternalIPs no esté configurado (automático) |
L1 | Reprobada | ||
| 1.2.9 | Asegúrate de que el argumento --authorization-mode incluya el RBAC (automático) |
L1 | Reprobada | El controlador de admisión de límite de frecuencia de eventos es una función alfa de Kubernetes. Google Distributed Cloud no admite funciones que no sean de disponibilidad general. | |
| 1.2.11 | Asegúrate de que el complemento de control de admisión AlwaysAdmit no esté establecido (automático) |
L1 | Reprobadas | ||
| 1.2.12 | Asegúrate de que el complemento de control de admisión AlwaysPullImages esté establecido (manual). |
L1 | Reprobada | El controlador de admisión AlwaysPullImages proporciona cierta protección para las imágenes de registro privado en clústeres de multiusuarios no cooperativos, a costa de la creación de registros de contenedores en puntos únicos de fallo para crear pods nuevos en todo el clúster. Los clústeres de Distributed Cloud no habilitan el controlador de admisión AlwaysPullImages, lo que permite a los administradores del clúster implementar una política de admisión para mantener esta compensación por su cuenta. |
|
| 1.2.18 | Asegúrate de que el argumento --audit-log-path esté configurado (automático) |
L1 | Reprobada | Distributed Cloud captura los registros de auditoría, pero no usa esta marca para la auditoría. Consulta Registros de auditoría para obtener más información. | |
| 1.2.19 | Asegúrate de que el argumento --audit-log-maxage esté configurado como 30 o según corresponda (automático) |
L1 | Reprobada | Distributed Cloud captura los registros de auditoría, pero no usa esta marca para la auditoría. Consulta Registros de auditoría para obtener más información. | |
| 1.2.20 | Asegúrate de que el argumento --audit-log-maxbackup esté configurado como 10 o según corresponda (automático) |
L1 | Reprobada | Distributed Cloud Connected captura los registros de auditoría, pero no usa esta marca para la auditoría. Consulta Registros de auditoría para obtener más información. | |
| 1.2.21 | Asegúrate de que el argumento --audit-log-maxsize esté configurado como 100 o según corresponda (automático) |
L1 | Reprobada | Distributed Cloud Connected captura los registros de auditoría, pero no usa esta marca para la auditoría. Consulta Registros de auditoría para obtener más información. | |
| 1.2.22 | Asegúrate de que el argumento --request-timeout esté configurado como corresponda (manual) |
L1 | Reprobada | Distributed Cloud Connected captura los registros de auditoría, pero no usa esta marca para la auditoría. Consulta Registros de auditoría para obtener más información. | |
| 3 | Configuración del plano de control | ||||
| 3.2.2 | Asegúrate de que la política de auditoría abarque los problemas de seguridad clave (manual) | L2 | Reprobada | ||
| 4 | Configuración de seguridad del nodo trabajador | ||||
| 4.1.1 | Asegúrate de que los permisos del archivo de servicio de kubelet estén configurados en 644 o más restringidos (automático) |
L1 | Reprobada | 755 |
|
| 4.1.7 | Asegúrate de que los permisos del archivo de autoridades certificadas estén configurados en 644 o más restringidos (manual) |
L1 | Reprobada | ||
| 4.1.9 | Asegúrate de que el archivo de configuración --config de kubelet tenga permisos establecidos en 644 o más restringidos (automático) |
L1 | Reprobada | 644 |
|
| 4.2.4 | Asegúrate de que el argumento --read-only-port esté configurado como 0 (manual) |
L1 | Reprobada | Los clústeres conectados de Distributed Cloud establecen el argumento --read-only-port en 10255 para recopilar métricas de kubelet. |
|
| 4.2.9 | Asegúrate de que el argumento --event-qps esté configurado como 0 o en un nivel que garantice la captura de eventos apropiada (manual) |
L1 | Control equivalente | Los clústeres de Distributed Cloud administran la TLS del servidor de kubelet con la marca –rotate-server-certificates. |
|
| 4.2.13 | Asegúrate de que Kubelet solo use algoritmos de cifrado criptográficos sólidos (manual) | L1 | Reprobada |