Punto de referencia de Centro para la seguridad de Internet (CIS) para Kubernetes
Como servicio seguro, Azure Kubernetes Service (AKS) es compatible con los estándares SOC, ISO, PCI DSS e HIPAA. En este artículo se trata la protección de la seguridad aplicada a AKS en función del punto de referencia de CIS para Kubernetes. Para más información acerca de la seguridad de AKS, consulte Conceptos de seguridad de las aplicaciones y los clústeres en Azure Kubernetes Service (AKS). Para obtener más información sobre el punto de referencia de CIS, vea Puntos de referencia de Center for Internet Security (CIS).
Punto de referencia de CIS para Kubernetes
A continuación se muestran los resultados de las recomendaciones de CIS Kubernetes V1.27 Benchmark v1.9.0 sobre AKS. Los resultados son aplicables a AKS 1.27.x a AKS 1.29.x.
Niveles de seguridad
Los puntos de referencia de CIS proporcionan dos niveles de configuración de seguridad:
- L1, o Nivel 1, recomienda requisitos de seguridad básicos esenciales que se pueden configurar en cualquier sistema y que deberían provocar poca interrupción del servicio o función reducida, o ninguna.
- L2, o Nivel 2, recomienda la configuración de seguridad para entornos que requieren una mayor seguridad, y que podría dar lugar a una función reducida.
Estado de evaluación
Se incluye un estado de evaluación para cada recomendación. El estado de la evaluación indica si la recomendación dada se puede automatizar o requiere pasos manuales para implementar. Ambos estados son igualmente importantes y se determinan y admiten como se define a continuación:
- Automated: representa recomendaciones para las que la evaluación de un control técnico se puede automatizar y validar completamente en un estado de paso o error. Las recomendaciones incluirán 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 completamente y requiere todos o algunos pasos manuales para validar que el estado configurado está establecido según lo previsto. El estado esperado puede variar en función del entorno.
Las recomendaciones Automatizadas afectan a la puntuación de la prueba comparativa si no se aplican, mientras que las recomendaciones Manuales no.
Estado de atestación
Las recomendaciones pueden tener uno de los siguientes estados de atestación:
- Pass: se ha aplicado la recomendación.
- Error: no se ha aplicado la recomendación.
- N/D: La recomendación está relacionada con los requisitos de permisos del archivo de manifiesto que no son pertinentes para AKS. Los clústeres de Kubernetes usan de manera predeterminada un modelo de manifiesto para implementar los pods del plano de control, que se basan en archivos de la máquina virtual del nodo. El punto de referencia de CIS para Kubernetes recomienda que estos archivos deben tener determinados requisitos de permiso. Los clústeres de AKS usan un gráfico de Helm para implementar pods del plano de control y no dependen de los archivos de la máquina virtual del nodo.
- Depende del entorno: la recomendación se aplica en el entorno específico del usuario y AKS no lo controla. Las recomendacionesAutomatizadas afectan la puntuación de la prueba comparativa si la recomendación se aplica al entorno específico del usuario o no.
- Control equivalente: la recomendación se ha implementado de forma distinta y equivalente.
Detalles de la prueba comparativa
Id. de CIS | Descripción de la recomendación | Estado de evaluación | Nivel | Estado |
---|---|---|---|---|
1 | Componentes del plano de control | |||
1.1 | Archivos de configuración de nodo del plano de control | |||
1.1.1 | Asegúrese de que los permisos del archivo de especificación del pod del servidor de API están establecidos en 600 o son más restrictivos. | Automatizados | L1 | N/D |
1.1.2 | Garantizar que la propiedad del archivo de especificación del pod del servidor de API está establecida en root:root. | Automatizados | L1 | N/D |
1.1.3 | Asegúrese de que los permisos del archivo de especificación del pod del administrador del controlador están establecidos en 600 o son más restrictivos. | Automatizados | L1 | N/D |
1.1.4 | Garantizar que la propiedad del archivo de especificación del pod del administrador del controlador está establecida en root:root. | Automatizados | L1 | N/D |
1.1.5 | Asegúrese de que los permisos del archivo de especificación del pod del programador están establecidos en 600 o son más restrictivos. | Automatizados | L1 | N/D |
1.1.6 | Garantizar que la propiedad del archivo de especificación del pod del programador está establecida en root:root. | Automatizados | L1 | N/D |
1.1.7 | Asegúrese de que los permisos del archivo de especificación del pod etcd están establecidos en 600 o son más restrictivos. | Automatizados | L1 | N/D |
1.1.8 | Garantizar que la propiedad del archivo de especificación del pod etcd está establecida en root:root. | Automatizados | L1 | N/D |
1.1.9 | Asegúrese de que los permisos del archivo de la interfaz de red de contenedor están establecidos en 600 o son más restrictivos. | Manual | L1 | N/D |
1.1.10 | Garantizar que la propiedad del archivo de la interfaz de red de contenedor está establecida en root:root. | Manual | L1 | N/D |
1.1.11 | Garantizar que los permisos del directorio de datos etcd están establecidos en 700 o más restrictivos. | Automatizados | L1 | N/D |
1.1.12 | Garantizar que la propiedad del directorio de datos etcd está establecida en etcd:etcd. | Automatizados | L1 | N/D |
1.1.13 | Asegúrese de que los permisos del archivo admin.conf están establecidos en 600 o son más restrictivos. | Automatizados | L1 | N/D |
1.1.14 | Garantizar que la propiedad del archivo admin.conf está establecida en root:root. | Automatizados | L1 | N/D |
1.1.15 | Asegúrese de que los permisos del archivo scheduler.conf están establecidos en 600 o son más restrictivos. | Automatizados | L1 | N/D |
1.1.16 | Garantizar que la propiedad del archivo scheduler.conf está establecida en root:root. | Automatizados | L1 | N/D |
1.1.17 | Asegúrese de que los permisos del archivo controller-manager.conf están establecidos en 600 o son más restrictivos. | Automatizados | L1 | N/D |
1.1.18 | Garantizar que la propiedad del archivo controller-manager.conf está establecida en root:root. | Automatizados | L1 | N/D |
1.1.19 | Garantizar que la propiedad del archivo y el directorio PKI de Kubernetes esta establecida en root:root. | Automatizados | L1 | N/D |
1.1.20 | Asegúrese de que los permisos del archivo de certificado PKI de Kubernetes están establecidos en 600 o son más restrictivos. | Manual | L1 | N/D |
1.1.21 | Garantizar que los permisos del archivo de clave PKI de Kubernetes están establecidos en 600. | Manual | L1 | N/D |
1.2 | Servidor de API | |||
1.2.1 | Garantizar que el argumento --anonymous-auth está establecido en false. |
Manual | L1 | Aprobado |
1.2.2 | Garantizar que el parámetro --token-auth-file no está establecido. |
Automatizados | L1 | Suspenso |
1.2.3 | Asegúrese de que --DenyServiceExternalIPs no está establecido. |
Manual | L1 | Error |
1.2.4 | Asegúrese de que los argumentos --kubelet-client-certificate y --kubelet-client-key están establecidos según corresponda. |
Automatizados | L1 | Aprobado |
1.2.5 | Garantizar que el argumento --kubelet-certificate-authority está establecido según corresponda. |
Automatizados | L1 | Suspenso |
1.2.6 | Garantizar que el argumento --authorization-mode no está establecido en AlwaysAllow. |
Automatizados | L1 | Aprobado |
1.2.7 | Garantizar que el argumento --authorization-mode incluye Node. |
Automatizados | L1 | Aprobado |
1.2.8 | Garantizar que el argumento --authorization-mode incluye RBAC. |
Automatizados | L1 | Aprobado |
1.2.9 | Garantizar que el complemento de control de admisión EventRateLimit está establecido. | Manual | L1 | Suspenso |
1.2.10 | Garantizar que el complemento de control de admisión AlwaysAdmit no está establecido. | Automatizados | L1 | Aprobado |
1.2.11 | Garantizar que el complemento de control de admisión AlwaysPullImages está establecido. | Manual | L1 | Suspenso |
1.2.12 | Garantizar que el complemento de control de admisión ServiceAccount está establecido. | Automatizados | L2 | No superada |
1.2.13 | Garantizar que el complemento de control de admisión NamespaceLifecycle está establecido. | Automatizados | L2 | Aprobado |
1.2.14 | Garantizar que el complemento de control de admisión NodeRestriction está establecido. | Automatizados | L2 | Aprobado |
1.2.15 | Garantizar que el argumento --profiling está establecido en false. |
Automatizados | L1 | Aprobado |
1.2.16 | Garantizar que el argumento --audit-log-path está establecido. |
Automatizados | L1 | Aprobado |
1.2.17 | Garantizar que el argumento --audit-log-maxage está establecido en 30 o según corresponda. |
Automatizados | L1 | Control equivalente |
1.2.18 | Garantizar que el argumento --audit-log-maxbackup está establecido en 10 o según corresponda. |
Automatizados | L1 | Control equivalente |
1.2.19 | Garantizar que el argumento --audit-log-maxsize está establecido en 100 o según corresponda. |
Automatizados | L1 | Aprobado |
1.2.20 | Garantizar que el argumento --request-timeout está establecido según corresponda. |
Manual | L1 | Pass (pasado) |
1.2.21 | Garantizar que el argumento --service-account-lookup está establecido en true. |
Automatizados | L1 | Aprobado |
1.2.22 | Garantizar que el argumento --service-account-key-file está establecido según corresponda. |
Automatizados | L1 | Aprobado |
1.2.23 | Asegúrese de que los argumentos --etcd-certfile y --etcd-keyfile están establecidos según corresponda. |
Automatizados | L1 | Aprobado |
1.2.24 | Asegúrese de que los argumentos --tls-cert-file y --tls-private-key-file están establecidos según corresponda. |
Automatizados | L1 | Aprobado |
1.2.25 | Garantizar que el argumento --client-ca-file está establecido según corresponda. |
Automatizados | L1 | Aprobado |
1.2.26 | Garantizar que el argumento --etcd-cafile está establecido según corresponda. |
Automatizados | L1 | Aprobado |
1.2.27 | Garantizar que el argumento --encryption-provider-config está establecido según corresponda. |
Manual | L1 | Depende del entorno |
1.2.28 | Asegúrese de que los proveedores de cifrado están configurados correctamente. | Manual | L1 | Depende del entorno |
1.2.29 | Asegúrese de que el servidor de API solo usa cifrados criptográficos fuertes. | Manual | L1 | Aprobado |
1.3 | Administrador de controladores | |||
1.3.1 | Asegúrese de que el argumento --terminated-pod-gc-threshold está establecido según corresponda. |
Manual | L1 | Aprobado |
1.3.2 | Garantizar que el argumento --profiling está establecido en false. |
Automatizados | L1 | Aprobado |
1.3.3 | Asegúrese de que el argumento --use-service-account-credentials está establecido en true. |
Automatizados | L1 | Aprobado |
1.3.4 | Asegúrese de que el argumento --service-account-private-key-file está establecido según corresponda. |
Automatizados | L1 | Aprobado |
1.3.5 | Asegúrese de que el argumento --root-ca-file está establecido según corresponda. |
Automatizados | L1 | Aprobado |
1.3.6 | Asegúrese de que el argumento RotateKubeletServerCertificate está establecido en true. | Automatizados | L2 | Aprobado |
1.3.7 | Asegúrese de que el argumento --bind-address está establecido en 127.0.0.1. |
Automatizados | L1 | Control equivalente |
1.4 | Scheduler | |||
1.4.1 | Garantizar que el argumento --profiling está establecido en false. |
Automatizados | L1 | Aprobado |
1.4.2 | Asegúrese de que el argumento --bind-address está establecido en 127.0.0.1. |
Automatizados | L1 | Control equivalente |
2 | etcd | |||
2.1 | Asegúrese de que los argumentos --cert-file y --key-file están establecidos según corresponda. |
Automatizados | L1 | Aprobado |
2,2 | Asegúrese de que el argumento --client-cert-auth está establecido en true. |
Automatizados | L1 | Aprobado |
2.3 | Asegúrese de que el argumento --auto-tls no está establecido en true. |
Automatizados | L1 | Aprobado |
2.4 | Asegúrese de que los argumentos --peer-cert-file y --peer-key-file están establecidos según corresponda. |
Automatizados | L1 | Aprobado |
2.5 | Asegúrese de que el argumento --peer-client-cert-auth está establecido en true. |
Automatizados | L1 | Aprobado |
2.6 | Asegúrese de que el argumento --peer-auto-tls no está establecido en true. |
Automatizados | L1 | Aprobado |
2.7 | Asegúrese de que se usa una Entidad de certificación única para etcd. | Manual | L2 | Aprobado |
3 | Configuración del plano de control | |||
3.1 | Autenticación y autorización | |||
3.1.1 | La autenticación de certificados de cliente no debe usarse para los usuarios. | Manual | L1 | Aprobado |
3.1.2 | No se debe usar la autenticación de token de cuenta de servicio para los usuarios | Manual | L1 | Aprobado |
3.1.3 | No se debe usar la autenticación de token de arranque para los usuarios | Manual | L1 | Aprobado |
3.2 | Registro | |||
3.2.1 | Asegúrese de que se crea una directiva de auditoría mínima. | Manual | L1 | Aprobado |
3.2.2 | Asegúrese de que la directiva de auditoría cubre los principales problemas de seguridad. | Manual | L2 | Aprobado |
4 | Nodos de trabajo | |||
4,1 | Archivos de configuración del nodo de trabajo | |||
4.1.1 | Asegúrese de que los permisos del de servicio de kubelet están establecidos en 600 o son más restrictivos. | Automatizados | L1 | Aprobado |
4.1.2 | Asegúrese de que la propiedad del archivo de servicio de kubelet está establecida en root:root. | Automatizados | L1 | Aprobado |
4.1.3 | Si existe un archivo kubeconfig de proxy, asegúrese de que los permisos están establecidos en 600 o son más restrictivos. | Manual | L1 | N/D |
4.1.4 | Si existe un archivo kubeconfig de proxy, asegúrese de que la titularidad está establecida en root:root. | Manual | L1 | N/D |
4.1.5 | Asegúrese de que los permisos del archivo kubelet.conf --kubeconfig están establecidos en 600 o son más restrictivos. |
Automatizados | L1 | Aprobado |
4.1.6 | Asegúrese de que la titularidad del archivo kubelet.conf --kubeconfig está establecida en root:root. |
Automatizados | L1 | Aprobado |
4.1.7 | Asegúrese de que los permisos del archivo de las entidades de certificación están establecidos en 600 o son más restrictivos. | Manual | L1 | Aprobado |
4.1.8 | Asegúrese de que la propiedad del archivo de las entidades de certificado de cliente está establecida en root:root. | Manual | L1 | Aprobado |
4.1.9 | Si se usa el archivo de configuración kubelet config.yaml, asegúrese de que los permisos están establecidos en 600 o son más restrictivos. | Automatizados | L1 | Aprobado |
4.1.10 | Si se usa el archivo de configuración kubelet config.yaml, asegúrese de que la titularidad del archivo esté establecida en root:root. | Automatizados | L1 | Aprobado |
4,2 | Kubelet | |||
4.2.1 | Garantizar que el argumento --anonymous-auth está establecido en false. |
Automatizados | L1 | Aprobado |
4.2.2 | Garantizar que el argumento --authorization-mode no está establecido en AlwaysAllow. |
Automatizados | L1 | Aprobado |
4.2.3 | Garantizar que el argumento --client-ca-file está establecido según corresponda. |
Automatizados | L1 | Aprobado |
4.2.4 | Garantizar que el argumento --read-only-port está establecido en 0. |
Manual | L1 | Aprobado |
4.2.5 | Garantizar que el argumento --streaming-connection-idle-timeout no está establecido en 0. |
Manual | L1 | Aprobado |
4.2.6 | Garantizar que el argumento --make-iptables-util-chains está establecido en true. |
Automatizados | L1 | Aprobado |
4.2.7 | Garantizar que el argumento --hostname-override no está establecido. |
Manual | L1 | Aprobado |
4.2.8 | Asegúrese de que el argumento --eventRecordQPS esté establecido en un nivel que garantice la captura de eventos adecuada |
Manual | L2 | Aprobado |
4.2.9 | Asegúrese de que los argumentos --tls-cert-file y --tls-private-key-file están establecidos según corresponda. |
Manual | L1 | Aprobado |
4.2.10 | Garantizar que el argumento --rotate-certificates no está establecido en false. |
Automatizados | L1 | Aprobado |
4.2.11 | Compruebe que el argumento RotateKubeletServerCertificate esté establecido en true | Manual | L1 | No superada |
4.2.12 | Garantizar que Kubelet solo usa cifrados criptográficos fuertes. | Manual | L1 | Aprobado |
4.2.13 | Asegúrese de que se establece un límite en los PID de pod | Manual | L1 | Aprobado |
4.3 | kube-proxy | |||
4.3.1 | Asegúrese de que el servicio de métricas kube-proxy está enlazado a localhost | Automatizados | L1 | Aprobado |
5 | Directivas | |||
5,1 | RBAC y cuentas de servicio | |||
5.1.1 | Garantizar que el rol de administrador del clúster solo se usa cuando es necesario. | Automatizados | L1 | Depende del entorno |
5.1.2 | Minimizar el acceso a secretos. | Automatizados | L1 | Depende del entorno |
5.1.3 | Minimizar el uso de caracteres comodín en Roles y ClusterRoles. | Automatizados | L1 | Depende del entorno |
5.1.4 | Minimizar el acceso para crear pods. | Automatizados | L1 | Depende del entorno |
5.1.5 | Garantizar que las cuentas de servicio predeterminadas no se usan activamente. | Automatizados | L1 | Depende del entorno |
5.1.6 | Garantizar que los tokens de la cuenta de servicio solo se montan cuando sea necesario. | Automatizados | L1 | Depende del entorno |
5.1.7 | Evitar el uso del grupo system:masters | Manual | L1 | Depende del entorno |
5.1.8 | Limitar el uso de los permisos Bind, Impersonate y Escalate en el clúster de Kubernetes | Manual | L1 | Depende del entorno |
5.1.9 | Minimizar el acceso para crear volúmenes persistentes | Manual | L1 | Depende del entorno |
5.1.10 | Minimizar el acceso al subrecurso de proxy de los nodos | Manual | L1 | Depende del entorno |
5.1.11 | Minimizar el acceso al subrecurso de aprobación de los objetos certificatesigningrequests | Manual | L1 | Depende del entorno |
5.1.12 | Minimizar el acceso a los objetos de configuración de webhook | Manual | L1 | Depende del entorno |
5.1.13 | Minimizar el acceso a la creación de tokens de cuenta de servicio | Manual | L1 | Depende del entorno |
5.2 | Estándares de seguridad de pods | |||
5.2.1 | Asegúrese de que el clúster tenga al menos un mecanismo de control de directivas activo implementado | Manual | L1 | Depende del entorno |
5.2.2 | Minimizar la admisión de contenedores con privilegios. | Manual | L1 | Depende del entorno |
5.2.3 | Minimizar la admisión de contenedores que quieren compartir el espacio de nombres de id. del proceso de host. | Manual | L1 | Depende del entorno |
5.2.4 | Minimizar la admisión de contenedores que quieren compartir el espacio de nombres de IPC del proceso de host. | Manual | L1 | Depende del entorno |
5.2.5 | Minimizar la admisión de contenedores que quieren compartir el espacio de nombres de red del host. | Manual | L1 | Depende del entorno |
5.2.6 | Minimizar la admisión de contenedores con allowPrivilegeEscalation. | Manual | L1 | Depende del entorno |
5.2.7 | Minimizar la admisión de contenedores raíz. | Manual | L2 | Depende del entorno |
5.2.8 | Minimizar la admisión de contenedores con capacidad NET_RAW. | Manual | L1 | Depende del entorno |
5.2.9 | Minimizar la admisión de contenedores con capacidades agregadas. | Manual | L1 | Depende del entorno |
5.2.10 | Minimizar la admisión de contenedores con capacidades asignadas. | Manual | L2 | Depende del entorno |
5.2.11 | Minimizar la admisión de contenedores de Windows HostProcess | Manual | L1 | Depende del entorno |
5.2.12 | Minimizar la admisión de volúmenes de HostPath | Manual | L1 | Depende del entorno |
5.2.13 | Minimizar la admisión de contenedores que usan HostPorts | Manual | L1 | Depende del entorno |
5.3 | Directivas de red y CNI | |||
5.3.1 | Garantizar que la CNI en uso admite directivas de red. | Manual | L1 | Aprobado |
5.3.2 | Garantizar que todos los espacios de nombres tienen definidas directivas de red. | Manual | L2 | Depende del entorno |
5.4 | Administración de secretos | |||
5.4.1 | Preferir usar secretos como archivos en lugar de secretos como variables de entorno. | Manual | L2 | Depende del entorno |
5.4.2 | Considerar la posibilidad de usar el almacenamiento de secretos externo. | Manual | L2 | Depende del entorno |
5.5 | Control de admisión extensible | |||
5.5.1 | Configurar Image Provenance mediante el controlador de admisión ImagePolicyWebhook | Manual | L2 | No superada |
5.6 | Directivas generales | |||
5.6.1 | Crear límites administrativos entre recursos mediante espacios de nombres. | Manual | L1 | Depende del entorno |
5.6.2 | Garantizar que el perfil seccomp está establecido en docker/predeterminado en las definiciones de pod. | Manual | L2 | Depende del entorno |
5.6.3 | Aplicar contexto de seguridad a los pods y contenedores. | Manual | L2 | Depende del entorno |
5.6.4 | No se debe usar el espacio de nombres predeterminado. | Manual | L2 | Depende del entorno |
Nota
Además del punto de referencia de CIS para Kubernetes, también hay disponible un punto de referencia de CIS AKS.
Notas adicionales
- El sistema operativo con protección de seguridad se crea y se mantiene específicamente para AKS y no se admite fuera de la plataforma AKS.
- Para reducir aún más el área expuesta a ataques, algunos controladores de módulos kernel innecesarios están deshabilitados en el sistema operativo.
Pasos siguientes
Para más información acerca de la seguridad de AKS, consulte los siguientes artículos:
Azure Kubernetes Service