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 Benchmark v1.12.0 sobre AKS. Los resultados son aplicables a AKS 1.32.x a AKS 1.34.x. Para obtener escalas de tiempo de soporte técnico, consulte versiones de Kubernetes compatibles.

Nota:

Además del punto de referencia de CIS para Kubernetes, también hay disponible un punto de referencia de CIS AKS.

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 implementarse. Ambos estados son igualmente importantes y se determinan y admiten de la siguiente manera:

  • Automatizado: 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 incluyen 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 del punto de referencia si no se aplican, mientras que las de tipo Manual no.

Estado de atestación

Las recomendaciones pueden tener uno de los siguientes estados de atestación:

  • Paso: se aplicó la recomendación.
  • Error: no se aplicó 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 recomendaciones Automatizadas 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 implementó de forma distinta y equivalente.

Detalles del punto de referencia

Id. de CIS Descripción de la recomendación Estado de evaluación Nivel Estado Motivo
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 N/D porque AKS es una solución administrada
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 N/D porque AKS es una solución administrada
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 N/D porque AKS es una solución administrada
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 N/D porque AKS es una solución administrada
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 N/D porque AKS es una solución administrada
1.1.6 Asegúrese de que la propiedad del archivo de especificación del pod del programador esté establecida en root: root Automatizados L1 N/D N/D porque AKS es una solución administrada
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 N/D porque AKS es una solución administrada
1.1.8 Asegúrese de que la propiedad del archivo de especificación de pod etcd esté establecida en root: root Automatizados L1 N/D N/D porque AKS es una solución administrada
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 N/D porque AKS es una solución administrada
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 N/D porque AKS es una solución administrada
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 N/D porque AKS es una solución administrada
1.1.12 Garantizar que la propiedad del directorio de datos etcd está establecida en etcd:etcd Automatizados L1 N/D N/D porque AKS es una solución administrada
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 N/D porque AKS es una solución administrada
1.1.14 Garantizar que la propiedad del archivo admin.conf está establecida en root: root Automatizados L1 N/D N/D porque AKS es una solución administrada
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 N/D porque AKS es una solución administrada
1.1.16 Garantizar que la propiedad del archivo scheduler.conf está establecida en root: root Automatizados L1 N/D N/D porque AKS es una solución administrada
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 N/D porque AKS es una solución administrada
1.1.18 Garantizar que la propiedad del archivo controller-manager.conf está establecida en root: root Automatizados L1 N/D N/D porque AKS es una solución administrada
1.1.19 Garantizar que la propiedad del archivo y el directorio PKI de Kubernetes están establecidos en root: root Automatizados L1 N/D N/D porque AKS es una solución administrada
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 N/D porque AKS es una solución administrada
1.1.21 Garantizar que los permisos del archivo de clave PKI de Kubernetes están establecidos en 600. Manual L1 N/D N/D porque AKS es una solución administrada
1.2 Servidor de API
1.2.1 Garantizar que el argumento --anonymous-auth está establecido en false. Manual L1 Pass (pasado)
1.2.2 Garantizar que el parámetro --token-auth-file no está establecido Automatizados L1 Incorrecto Rotación automática por AKS, actualmente el parámetro está establecido
1.2.3 Asegúrese de que --DenyServiceExternalIPs no está establecido Manual L1 Incorrecto Los clientes pueden usar Azure Policy para Kubernetes para denegar servicios con IP externa.
1.2.4 Asegúrese de que los argumentos --kubelet-client-certificate y --kubelet-client-key están establecidos según corresponda. Automatizados L1 Pass (pasado)
1.2.5 Garantizar que el argumento --kubelet-certificate-authority está establecido según corresponda. Automatizados L1 Incorrecto El certificado de servicio de Kubelet usa un certificado autofirmado
1.2.6 Garantizar que el argumento --authorization-mode no está establecido en AlwaysAllow Automatizados L1 Pass (pasado)
1.2.7 Garantizar que el argumento --authorization-mode incluye Node. Automatizados L1 Pass (pasado)
1.2.8 Garantizar que el argumento --authorization-mode incluye RBAC. Automatizados L1 Pass (pasado)
1.2.9 Garantizar que el complemento de control de admisión EventRateLimit está establecido. Manual L1 Incorrecto Impacto operativo
1.2.10 Garantizar que el complemento de control de admisión AlwaysAdmit no está establecido Automatizados L1 Pass (pasado)
1.2.11 Garantizar que el complemento de control de admisión AlwaysPullImages está establecido. Manual L1 Incorrecto Impacto operativo
1.2.12 Garantizar que el complemento de control de admisión ServiceAccount está establecido. Automatizados L2 Pass (pasado)
1.2.13 Garantizar que el complemento de control de admisión NamespaceLifecycle está establecido. Automatizados L2 Pass (pasado)
1.2.14 Garantizar que el complemento de control de admisión NodeRestriction está establecido. Automatizados L2 Pass (pasado)
1.2.15 Garantizar que el argumento --profiling está establecido en false. Automatizados L1 Pass (pasado)
1.2.16 Garantizar que el argumento --audit-log-path está establecido. Automatizados L1 Pass (pasado)
1.2.17 Garantizar que el argumento --audit-log-maxage está establecido en 30 o según corresponda. Automatizados L1 Control equivalente AKS almacena el registro de auditoría durante 14 días, Deployment.yaml tiene el valor 0.
1.2.18 Garantizar que el argumento --audit-log-maxbackup está establecido en 10 o según corresponda. Automatizados L1 Control equivalente AKS almacena el registro de auditoría durante 14 días, Deployment.yaml tiene el valor 0.
1.2.19 Garantizar que el argumento --audit-log-maxsize está establecido en 100 o según corresponda. Automatizados L1 Pass (pasado)
1.2.20 Garantizar que el argumento --request-timeout está establecido según corresponda. Manual L1 Pass (pasado) El parámetro no está establecido, lo que establecerá el valor predeterminado = 60s (que es compatible)
1.2.21 Garantizar que el argumento --service-account-lookup está establecido en true. Automatizados L1 Pass (pasado) El parámetro no está establecido, lo que establecerá el valor predeterminado en true (que es compatible)
1.2.22 Garantizar que el argumento --service-account-key-file está establecido según corresponda. Automatizados L1 Pass (pasado)
1.2.23 Asegúrese de que los argumentos --etcd-certfile y --etcd-keyfile están establecidos según corresponda. Automatizados L1 Pass (pasado)
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 Pass (pasado)
1.2.25 Garantizar que el argumento --client-ca-file está establecido según corresponda. Automatizados L1 Pass (pasado)
1.2.26 Garantizar que el argumento --etcd-cafile está establecido según corresponda. Automatizados L1 Pass (pasado)
1.2.27 Garantizar que el argumento --encryption-provider-config está establecido según corresponda. Manual L1 Depende del entorno El argumento se establece cuando se habilita Azure KMS
1.2.28 Asegúrese de que los proveedores de cifrado están configurados correctamente. Manual L1 Depende del entorno El argumento se establece cuando se habilita Azure KMS
1.2.29 Asegúrese de que el servidor de API solo usa cifrados criptográficos fuertes. Manual L1 Pass (pasado) AKS admite un subconjunto de 4 conjuntos de cifrado seguros de 21 recomendados de CIS
1.2.30 Garantizar que el parámetro --service-account-extend-token-expiration está establecido en false Automatizados L1 Depende del entorno Este parámetro se establece en false cuando OIDC está habilitado en el clúster
1.3 Administrador de controladores
1.3.1 Garantizar que el argumento --terminated-pod-gc-threshold está establecido según corresponda. Manual L1 Pass (pasado) AKS establece el valor predeterminado en 6000 en lugar de 12500
1.3.2 Garantizar que el argumento --profiling está establecido en false. Automatizados L1 Pass (pasado)
1.3.3 Garantizar que el argumento --use-service-account-credentials está establecido en true. Automatizados L1 Pass (pasado)
1.3.4 Garantizar que el argumento --service-account-private-key-file está establecido según corresponda. Automatizados L1 Pass (pasado)
1.3.5 Garantizar que el argumento --root-ca-file está establecido según corresponda. Automatizados L1 Pass (pasado)
1.3.6 Asegúrese de que el argumento RotateKubeletServerCertificate está establecido en true. Automatizados L2 Pass (pasado) El parámetro está establecido en true; consulte Rotación de certificados de servicio de Kubelet
1.3.7 Garantizar que el argumento --bind-address está establecido en 127.0.0.1. Automatizados L1 Control equivalente Se usa la dirección IP del pod
1.4 Scheduler
1.4.1 Garantizar que el argumento --profiling está establecido en false. Automatizados L1 Pass (pasado)
1.4.2 Garantizar que el argumento --bind-address está establecido en 127.0.0.1. Automatizados L1 Control equivalente Se usa la dirección IP del pod
2 etcd
2.1 Asegúrese de que los argumentos --cert-file y --key-file están establecidos según corresponda. Automatizados L1 Pass (pasado)
2.2 Garantizar que el argumento --client-cert-auth está establecido en true. Automatizados L1 Pass (pasado)
2.3 Garantizar que el argumento --auto-tls no está establecido en true Automatizados L1 Pass (pasado) El parámetro no está establecido, lo que establecerá el valor predeterminado en false (que es compatible)
2.4 Asegúrese de que los argumentos --peer-cert-file y --peer-key-file están establecidos según corresponda. Automatizados L1 Pass (pasado)
2.5 Garantizar que el argumento --peer-client-cert-auth está establecido en true. Automatizados L1 Pass (pasado)
2.6 Garantizar que el argumento --peer-auto-tls no está establecido en true Automatizados L1 Pass (pasado) El parámetro no está establecido, lo que establecerá el valor predeterminado en false (que es compatible)
2.7 Asegúrese de que se usa una Entidad de certificación única para etcd Manual L2 Pass (pasado) --client-ca-file para api-server es diferente de --trusted-ca-file para etcd
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 Pass (pasado) Al implementar un clúster de AKS, las cuentas locales se habilitan de manera predeterminada. Puede deshabilitar las cuentas locales para deshabilitar los certificados de cliente para la autenticación.
3.1.2 No se debe usar la autenticación de token de cuenta de servicio para los usuarios Manual L1 Pass (pasado) AKS proporciona compatibilidad con la autenticación de Microsoft Entra para las solicitudes enviadas al plano de control del clúster. El uso de tokens de recuento de servicios depende del cliente (para aplicar un procedimiento recomendado, según sea necesario)
3.1.3 La autenticación por token de arranque no debe usarse para usuarios Manual L1 Pass (pasado) Los usuarios no pueden usar tokens de arranque
3.2 Registro
3.2.1 Asegúrese de que se crea una directiva de auditoría mínima. Manual L1 Pass (pasado)
3.2.2 Asegúrese de que la directiva de auditoría cubre los principales problemas de seguridad. Manual L2 Pass (pasado)
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 Pass (pasado)
4.1.2 Garantizar que la propiedad del archivo de servicio de kubelet está establecida en root: root Automatizados L1 Pass (pasado)
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, garantizar que la propiedad 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 Pass (pasado)
4.1.6 Asegúrese de que la propiedad del archivo kubelet.conf --kubeconfig está establecida en root: root Automatizados L1 Pass (pasado)
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 Pass (pasado)
4.1.8 Garantizar que la propiedad del archivo de las entidades de certificado de cliente está establecida en root: root Manual L1 Pass (pasado)
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 Pass (pasado)
4.1.10 Si se usa el archivo de configuración kubelet config.yaml, garantizar que la propiedad del archivo esté establecida en root: root Automatizados L1 Pass (pasado)
4,2 Kubelet
4.2.1 Garantizar que el argumento --anonymous-auth está establecido en false. Automatizados L1 Pass (pasado)
4.2.2 Garantizar que el argumento --authorization-mode no está establecido en AlwaysAllow Automatizados L1 Pass (pasado)
4.2.3 Garantizar que el argumento --client-ca-file está establecido según corresponda. Automatizados L1 Pass (pasado)
4.2.4 Garantizar que el argumento --read-only-port está establecido en 0. Manual L1 Pass (pasado)
4.2.5 Garantizar que el argumento --streaming-connection-idle-timeout no está establecido en 0 Manual L1 Pass (pasado)
4.2.6 Garantizar que el argumento --make-iptables-util-chains está establecido en true. Automatizados L1 Pass (pasado)
4.2.7 Garantizar que el argumento --hostname-override no está establecido Manual L1 Pass (pasado)
4.2.8 Garantizar que el argumento --eventRecordQPS está establecido en un nivel que garantiza la captura de eventos adecuada Manual L2 Pass (pasado)
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 Pass (pasado)
4.2.10 Garantizar que el argumento --rotate-certificates no está establecido en false Automatizados L1 Pass (pasado)
4.2.11 Comprobar que el argumento RotateKubeletServerCertificate está establecido en true Manual L1 Pass (pasado)
4.2.12 Garantizar que Kubelet solo usa cifrados criptográficos fuertes. Manual L1 Pass (pasado)
4.2.13 Garantizar que hay un límite establecido en los PID de pod Manual L1 Pass (pasado)
4.2.14 Garantizar que el Kubelet exige el uso del perfil de seccomp RuntimeDefault Manual L1 Depende del entorno El valor predeterminado de AKS es Unconfined. La configuración personalizada del nodo se puede usar para habilitar RuntimeDefault el perfil seccomp.
4.3 kube-proxy
4.3.1 Garantizar que el servicio de métricas kube-proxy está enlazado a localhost Automatizados L1 Incorrecto AKS tiene extracción central de Prometheus para kube-proxy y aplica alerta y corrección automática cuando se detecta KubeProxyStale. metrics-bind-address se establece para ese propósito.
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 Use Definiciones de directivas integradas de Azure Policy para Azure Kubernetes Service
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 Use Definiciones de directivas integradas de Azure Policy para Azure Kubernetes Service
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 sistema: grupo de maestros 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 pod
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 Use Definiciones de directivas integradas de Azure Policy para Azure Kubernetes Service
5.2.2 Minimizar la admisión de contenedores con privilegios. Manual L1 Depende del entorno Use Definiciones de directivas integradas de Azure Policy para Azure Kubernetes Service
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 Use Definiciones de directivas integradas de Azure Policy para Azure Kubernetes Service
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 Use Definiciones de directivas integradas de Azure Policy para Azure Kubernetes Service
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 Use Definiciones de directivas integradas de Azure Policy para Azure Kubernetes Service
5.2.6 Minimizar la admisión de contenedores con allowPrivilegeEscalation. Manual L1 Depende del entorno Use Definiciones de directivas integradas de Azure Policy para Azure Kubernetes Service
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 Use Definiciones de directivas integradas de Azure Policy para Azure Kubernetes Service
5.2.9 Minimizar la admisión de contenedores con capacidades agregadas. Manual L1 Depende del entorno Use Definiciones de directivas integradas de Azure Policy para Azure Kubernetes Service
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 Use Definiciones de directivas integradas de Azure Policy para Azure Kubernetes Service
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 Pass (pasado)
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 Incorrecto Control equivalente implementado
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

Otras notas

  • 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 de kernel que no eran necesarios se han deshabilitado en el sistema operativo.

Pasos siguientes

Para más información acerca de la seguridad de AKS, consulte los siguientes artículos: