Leer en inglés

Compartir a través de


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: