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
Los resultados siguientes son los que se obtienen de las recomendaciones de Benchmark v1.8.0 de CIS para Kubernetes V1.27 en AKS. Los resultados se aplican de AKS 1.21.x a AKS 1.27.x.
Las recomendaciones Puntuadas afectan a la puntuación del punto de referencia si no se aplican, mientras que las de tipo Sin puntuar no.
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.
Las recomendaciones pueden tener uno de los siguientes estados:
- Sin errores: se ha aplicado la recomendación.
- Con errores: la recomendación no se ha aplicado.
- 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 la controla. Las recomendaciones Puntuadas afectan a la puntuación del punto de referencia tanto si la recomendación se aplica al entorno específico del usuario como si no.
- Control equivalente: la recomendación se ha implementado de forma distinta y equivalente.
Id. de CIS | Descripción de la recomendación | Tipo de puntuació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. | Puntuada | 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. | Puntuada | 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. | Puntuada | 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. | Puntuada | 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. | Puntuada | L1 | N/D |
1.1.6 | Garantizar que la propiedad del archivo de especificación del pod del programador está establecida en root:root. | Puntuada | 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. | Puntuada | L1 | N/D |
1.1.8 | Garantizar que la propiedad del archivo de especificación del pod etcd está establecida en root:root. | Puntuada | 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. | Sin puntuar | L1 | N/D |
1.1.10 | Garantizar que la propiedad del archivo de la interfaz de red de contenedor está establecida en root:root. | Sin puntuar | L1 | N/D |
1.1.11 | Garantizar que los permisos del directorio de datos etcd están establecidos en 700 o más restrictivos. | Puntuada | L1 | N/D |
1.1.12 | Garantizar que la propiedad del directorio de datos etcd está establecida en etcd:etcd. | Puntuada | 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. | Puntuada | L1 | N/D |
1.1.14 | Garantizar que la propiedad del archivo admin.conf está establecida en root:root. | Puntuada | 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. | Puntuada | L1 | N/D |
1.1.16 | Garantizar que la propiedad del archivo scheduler.conf está establecida en root:root. | Puntuada | 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. | Puntuada | L1 | N/D |
1.1.18 | Garantizar que la propiedad del archivo controller-manager.conf está establecida en root:root. | Puntuada | L1 | N/D |
1.1.19 | Garantizar que la propiedad del archivo y el directorio PKI de Kubernetes esta establecida en root:root. | Puntuada | 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. | Puntuada | L1 | N/D |
1.1.21 | Garantizar que los permisos del archivo de clave PKI de Kubernetes están establecidos en 600. | Puntuada | L1 | N/D |
1.2 | Servidor de API | |||
1.2.1 | Garantizar que el argumento --anonymous-auth está establecido en false. |
Sin puntuar | L1 | Aprobado |
1.2.2 | Garantizar que el parámetro --token-auth-file no está establecido. |
Puntuada | L1 | Suspenso |
1.2.3 | Asegúrese de que --DenyServiceExternalIPs no está establecido. |
Puntuada | L1 | Error |
1.2.4 | Asegúrese de que los argumentos --kubelet-client-certificate y --kubelet-client-key están establecidos según corresponda. |
Puntuada | L1 | Aprobado |
1.2.5 | Garantizar que el argumento --kubelet-certificate-authority está establecido según corresponda. |
Puntuada | L1 | Suspenso |
1.2.6 | Garantizar que el argumento --authorization-mode no está establecido en AlwaysAllow. |
Puntuada | L1 | Aprobado |
1.2.7 | Garantizar que el argumento --authorization-mode incluye Node. |
Puntuada | L1 | Aprobado |
1.2.8 | Garantizar que el argumento --authorization-mode incluye RBAC. |
Puntuada | L1 | Aprobado |
1.2.9 | Garantizar que el complemento de control de admisión EventRateLimit está establecido. | Sin puntuar | L1 | Suspenso |
1.2.10 | Garantizar que el complemento de control de admisión AlwaysAdmit no está establecido. | Puntuada | L1 | Aprobado |
1.2.11 | Garantizar que el complemento de control de admisión AlwaysPullImages está establecido. | Sin puntuar | L1 | Suspenso |
1.2.12 | Garantizar que el complemento de control de admisión SecurityContextDeny está establecido si no se usa PodSecurityPolicy. | Sin puntuar | L1 | Suspenso |
1.2.13 | Garantizar que el complemento de control de admisión ServiceAccount está establecido. | Puntuada | L1 | Aprobado |
1.2.14 | Garantizar que el complemento de control de admisión NamespaceLifecycle está establecido. | Puntuada | L1 | Aprobado |
1.2.15 | Garantizar que el complemento de control de admisión NodeRestriction está establecido. | Puntuada | L1 | Aprobado |
1.2.16 | Garantizar que el argumento --secure-port no está establecido en 0. |
Puntuada | L1 | Aprobado |
1.2.17 | Garantizar que el argumento --profiling está establecido en false. |
Puntuada | L1 | Aprobado |
1.2.18 | Garantizar que el argumento --audit-log-path está establecido. |
Puntuada | L1 | Control equivalente |
1.2.19 | Garantizar que el argumento --audit-log-maxage está establecido en 30 o según corresponda. |
Puntuada | L1 | Control equivalente |
1.2.20 | Garantizar que el argumento --audit-log-maxbackup está establecido en 10 o según corresponda. |
Puntuada | L1 | Pass (pasado) |
1.2.21 | Garantizar que el argumento --audit-log-maxsize está establecido en 100 o según corresponda. |
Puntuada | L1 | Aprobado |
1.2.22 | Garantizar que el argumento --request-timeout está establecido según corresponda. |
Puntuada | L1 | Aprobado |
1.2.23 | Asegúrese de que el argumento --service-account-lookup está establecido en true. |
Puntuada | L1 | Aprobado |
1.2.24 | Garantizar que el argumento --service-account-key-file está establecido según corresponda. |
Puntuada | L1 | Aprobado |
1.2.25 | Asegúrese de que los argumentos --etcd-certfile y --etcd-keyfile están establecidos según corresponda. |
Puntuada | L1 | Aprobado |
1.2.26 | Asegúrese de que los argumentos --tls-cert-file y --tls-private-key-file están establecidos según corresponda. |
Puntuada | L1 | Aprobado |
1.2.27 | Garantizar que el argumento --client-ca-file está establecido según corresponda. |
Puntuada | L1 | Aprobado |
1.2.28 | Garantizar que el argumento --etcd-cafile está establecido según corresponda. |
Puntuada | L1 | Depende del entorno |
1.2.29 | Garantizar que el argumento --encryption-provider-config está establecido según corresponda. |
Puntuada | L1 | Depende del entorno |
1.2.30 | Asegúrese de que los proveedores de cifrado están configurados correctamente. | Puntuada | L1 | Depende del entorno |
1.2.31 | Asegúrese de que el servidor de API solo usa cifrados criptográficos fuertes. | Sin puntuar | 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. |
Puntuada | L1 | Aprobado |
1.3.2 | Garantizar que el argumento --profiling está establecido en false. |
Puntuada | L1 | Aprobado |
1.3.3 | Asegúrese de que el argumento --use-service-account-credentials está establecido en true. |
Puntuada | L1 | Aprobado |
1.3.4 | Asegúrese de que el argumento --service-account-private-key-file está establecido según corresponda. |
Puntuada | L1 | Aprobado |
1.3.5 | Asegúrese de que el argumento --root-ca-file está establecido según corresponda. |
Puntuada | L1 | Aprobado |
1.3.6 | Asegúrese de que el argumento RotateKubeletServerCertificate está establecido en true. | Puntuada | L2 | Suspenso |
1.3.7 | Asegúrese de que el argumento --bind-address está establecido en 127.0.0.1. |
Puntuada | L1 | Control equivalente |
1.4 | Scheduler | |||
1.4.1 | Garantizar que el argumento --profiling está establecido en false. |
Puntuada | L1 | Aprobado |
1.4.2 | Asegúrese de que el argumento --bind-address está establecido en 127.0.0.1. |
Puntuada | L1 | Control equivalente |
2 | etcd | |||
2.1 | Asegúrese de que los argumentos --cert-file y --key-file están establecidos según corresponda. |
Puntuada | L1 | Aprobado |
2,2 | Asegúrese de que el argumento --client-cert-auth está establecido en true. |
Puntuada | L1 | Aprobado |
2.3 | Asegúrese de que el argumento --auto-tls no está establecido en true. |
Puntuada | L1 | Aprobado |
2.4 | Asegúrese de que los argumentos --peer-cert-file y --peer-key-file están establecidos según corresponda. |
Puntuada | L1 | Aprobado |
2.5 | Asegúrese de que el argumento --peer-client-cert-auth está establecido en true. |
Puntuada | L1 | Aprobado |
2.6 | Asegúrese de que el argumento --peer-auto-tls no está establecido en true. |
Puntuada | L1 | Aprobado |
2.7 | Asegúrese de que se usa una Entidad de certificación única para etcd. | Sin puntuar | 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. | Sin puntuar | L2 | Pass (pasado) |
3.1.2 | No se debe usar la autenticación de token de cuenta de servicio para los usuarios | Sin puntuar | L2 | Pass (pasado) |
3.1.3 | No se debe usar la autenticación de token de arranque para los usuarios | Sin puntuar | L2 | Aprobado |
3.2 | Registro | |||
3.2.1 | Asegúrese de que se crea una directiva de auditoría mínima. | Puntuada | L1 | Aprobado |
3.2.2 | Asegúrese de que la directiva de auditoría cubre los principales problemas de seguridad. | Sin puntuar | 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. | Puntuada | L1 | Aprobado |
4.1.2 | Asegúrese de que la propiedad del archivo de servicio de kubelet está establecida en root:root. | Puntuada | 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. | Puntuada | L1 | N/D |
4.1.4 | Si existe un archivo kubeconfig de proxy, asegúrese de que la titularidad está establecida en root:root. | Puntuada | 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. |
Puntuada | L1 | Aprobado |
4.1.6 | Asegúrese de que la titularidad del archivo kubelet.conf --kubeconfig está establecida en root:root. |
Puntuada | 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. | Puntuada | 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. | Puntuada | 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. | Puntuada | 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. | Puntuada | L1 | Aprobado |
4,2 | Kubelet | |||
4.2.1 | Garantizar que el argumento --anonymous-auth está establecido en false. |
Puntuada | L1 | Aprobado |
4.2.2 | Garantizar que el argumento --authorization-mode no está establecido en AlwaysAllow. |
Puntuada | L1 | Aprobado |
4.2.3 | Garantizar que el argumento --client-ca-file está establecido según corresponda. |
Puntuada | L1 | Aprobado |
4.2.4 | Garantizar que el argumento --read-only-port está establecido en 0. |
Puntuada | L1 | Aprobado |
4.2.5 | Garantizar que el argumento --streaming-connection-idle-timeout no está establecido en 0. |
Puntuada | L1 | Aprobado |
4.2.6 | Garantizar que el argumento --protect-kernel-defaults está establecido en true. |
Puntuada | L1 | Aprobado |
4.2.7 | Garantizar que el argumento --make-iptables-util-chains está establecido en true. |
Puntuada | L1 | Aprobado |
4.2.8 | Garantizar que el argumento --hostname-override no está establecido. |
Sin puntuar | L1 | Aprobado |
4.2.9 | Asegúrese de que el argumento eventRecordQPS está establecido en un nivel que garantiza la captura de eventos adecuada. | Sin puntuar | L2 | Aprobado |
4.2.10 | Garantizar que los argumentos --tls-cert-file y --tls-private-key-file están establecidos según corresponda. |
Puntuada | L1 | Aprobado |
4.2.11 | Garantizar que el argumento --rotate-certificates no está establecido en false. |
Puntuada | L1 | Aprobado |
4.2.12 | Garantizar que el argumento RotateKubeletServerCertificate está establecido en true. | Puntuada | L1 | Aprobado |
4.2.13 | Garantizar que Kubelet solo usa cifrados criptográficos fuertes. | Sin puntuar | 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. | Sin puntuar | L1 | Depende del entorno |
5.1.2 | Minimizar el acceso a secretos. | Sin puntuar | L1 | Depende del entorno |
5.1.3 | Minimizar el uso de caracteres comodín en Roles y ClusterRoles. | Sin puntuar | L1 | Depende del entorno |
5.1.4 | Minimizar el acceso para crear pods. | Sin puntuar | L1 | Depende del entorno |
5.1.5 | Garantizar que las cuentas de servicio predeterminadas no se usan activamente. | Puntuada | L1 | Depende del entorno |
5.1.6 | Garantizar que los tokens de la cuenta de servicio solo se montan cuando sea necesario. | Sin puntuar | L1 | Depende del entorno |
5.1.7 | Evitar el uso del grupo system:masters | Sin puntuar | L1 | Depende del entorno |
5.1.8 | Limitar el uso de los permisos Bind, Impersonate y Escalate en el clúster de Kubernetes | Sin puntuar | L1 | Depende del entorno |
5.1.9 | Minimizar el acceso para crear volúmenes persistentes | Sin puntuar | L1 | Depende del entorno |
5.1.10 | Minimizar el acceso al subrecurso de proxy de los nodos | Sin puntuar | L1 | Depende del entorno |
5.1.11 | Minimizar el acceso al subrecurso de aprobación de los objetos certificatesigningrequests | Sin puntuar | L1 | Depende del entorno |
5.1.12 | Minimizar el acceso a los objetos de configuración de webhook | Sin puntuar | L1 | Depende del entorno |
5.1.13 | Minimizar el acceso a la creación de tokens de cuenta de servicio | Sin puntuar | L1 | Depende del entorno |
5.2 | Directivas 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 | Sin puntuar | L1 | Depende del entorno |
5.2.2 | Minimizar la admisión de contenedores con privilegios. | Sin puntuar | 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. | Puntuada | 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. | Puntuada | L1 | Depende del entorno |
5.2.5 | Minimizar la admisión de contenedores que quieren compartir el espacio de nombres de red del host. | Puntuada | L1 | Depende del entorno |
5.2.6 | Minimizar la admisión de contenedores con allowPrivilegeEscalation. | Puntuada | L1 | Depende del entorno |
5.2.6 | Minimizar la admisión de contenedores raíz. | Sin puntuar | L2 | Depende del entorno |
5.2.7 | Minimizar la admisión de contenedores con capacidad NET_RAW. | Sin puntuar | L1 | Depende del entorno |
5.2.8 | Minimizar la admisión de contenedores con capacidades agregadas. | Sin puntuar | L1 | Depende del entorno |
5.2.9 | Minimizar la admisión de contenedores con capacidades asignadas. | Sin puntuar | L1 | Depende del entorno |
5.2.10 | Minimizar la admisión de contenedores con capacidades asignadas. | Sin puntuar | L2 | |
5.2.11 | Minimizar la admisión de contenedores de Windows HostProcess | Sin puntuar | L1 | Depende del entorno |
5.2.12 | Minimizar la admisión de volúmenes de HostPath | Sin puntuar | L1 | Depende del entorno |
5.2.13 | Minimizar la admisión de contenedores que usan HostPorts | Sin puntuar | L1 | Depende del entorno |
5.3 | Directivas de red y CNI | |||
5.3.1 | Garantizar que la CNI en uso admite directivas de red. | Sin puntuar | L1 | Aprobado |
5.3.2 | Garantizar que todos los espacios de nombres tienen definidas directivas de red. | Puntuada | 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. | Sin puntuar | L1 | Depende del entorno |
5.4.2 | Considerar la posibilidad de usar el almacenamiento de secretos externo. | Sin puntuar | L2 | Depende del entorno |
5.5 | Control de admisión extensible | |||
5.5.1 | Configurar Image Provenance mediante el controlador de admisión ImagePolicyWebhook | Sin puntuar | L2 | Error |
5.7 | Directivas generales | |||
5.7.1 | Crear límites administrativos entre recursos mediante espacios de nombres. | Sin puntuar | L1 | Depende del entorno |
5.7.2 | Garantizar que el perfil seccomp está establecido en docker/predeterminado en las definiciones de pod. | Sin puntuar | L2 | Depende del entorno |
5.7.3 | Aplicar contexto de seguridad a los pods y contenedores. | Sin puntuar | L2 | Depende del entorno |
5.7.4 | No se debe usar el espacio de nombres predeterminado. | Puntuada | 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, se han deshabilitado en el sistema operativo algunos controladores de módulos de kernel que no eran necesarios.
Pasos siguientes
Para más información acerca de la seguridad de AKS, consulte los siguientes artículos:
Azure Kubernetes Service