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: