Nota:
El acceso a esta página requiere autorización. Puede intentar iniciar sesión o cambiar directorios.
El acceso a esta página requiere autorización. Puede intentar cambiar los directorios.
La protección del plano de datos de Kubernetes ayuda a aplicar configuraciones seguras para cargas de trabajo que se ejecutan en el clúster, como restringir contenedores con privilegios, aplicar límites de recursos y limitar el acceso a la red.
En Microsoft Defender para la nube, el endurecimiento de planos de datos se implementa utilizando Azure Policy for Kubernetes para evaluar y hacer cumplir estas configuraciones. Azure Policy se implementa como parte de Defender para contenedores cuando se habilita el aprovisionamiento automático.
Si la Azure Policy para Kubernetes está desactivada en la configuración del plan Defender for Containers, puede desplegarlo corrigiendo la recomendación pertinente. También puedes desplegar Azure Policy manualmente usando CLI de Azure para desplegar componentes de Defender para contenedores o Helm para desplegar componentes de Defender para contenedores si desactivaste la provisión automática durante la habilitación o excluiste clústeres específicos de la provisión automática.
Después de implementar Azure Policy para Kubernetes, Defender for Cloud genera recomendaciones de protección del plano de datos en función de la configuración del clúster. En esta página se muestra cómo revisar estas recomendaciones, configurar parámetros de directiva y aplicarlas en los clústeres.
Prerequisites
Para empezar, asegúrese de que:
Ha agregado las reglas requeridas de FQDN/aplicación para la política de Azure.
(Para clústeres que no son de AKS) El clúster de Kubernetes está conectado a Azure Arc.
Habilitación de Azure Policy para Kubernetes mediante la corrección de recomendaciones
Si Azure Policy para Kubernetes no está desplegado o se desactivó en la configuración del plan de Defender for Containers, puedes instalarlo corrigiendo la recomendación que coincida con tu tipo de clúster en Defender for Cloud.
Inicie sesión en Azure Portal.
Vaya a Microsoft Defender para la nube>Recommendations.
Busque la recomendación pertinente:
- Azure: Los clústeres del servicio de Kubernetes de Azure deben tener instalado el complemento de Azure Policy para Kubernetes
- GCP: los clústeres de GKE deben tener instalada la extensión Azure Policy
- AWS/Arc-enabled Kubernetes: Los clústeres de Kubernetes habilitados por Azure Arc deben tener instalada la extensión Azure Policy.
Seleccione una recomendación.
En la pestaña Realizar acción , seleccione Corregir.
Seleccione Corregir para corregir los recursos seleccionados.
Repita para cada recomendación.
Recomendaciones de reforzamiento del plano de datos
Después de implementar Azure Policy para Kubernetes, Defender for Cloud evalúa la configuración del clúster y genera recomendaciones de protección del plano de datos. Este proceso puede tardar hasta 30 minutos.
Note
Componentes de Microsoft, como el sensor de Defender, se implementan en el kube-system namespace de forma predeterminada y no están marcados como no cumplidores. Es posible que los componentes de terceros instalados en otros espacios de nombres puedan señalizarse. Para excluir espacios de nombres específicos, configure exclusiones de directivas de Azure.
En la tabla siguiente se enumeran las recomendaciones comunes de endurecimiento del plano de datos.
| Nombre de la recomendación | Control de seguridad | Configuración requerida |
|---|---|---|
| Se deben aplicar los límites de CPU y memoria de los contenedores. | Protección de aplicaciones contra ataques DDoS | Yes |
| Las imágenes de contenedor solo deben implementarse desde registros de confianza | Corregir las vulnerabilidades | Yes |
| Deben aplicarse funcionalidades de Linux con privilegios mínimos para los contenedores | Administración de acceso y permisos | Yes |
| Los contenedores solo deben usar perfiles de AppArmor permitidos. | Corrección de configuraciones de seguridad | Yes |
| Los servicios solo deben escuchar en los puertos permitidos. | Restricción de los accesos de red no autorizados | Yes |
| El uso de puertos y redes de hosts debe estar restringido. | Restricción de los accesos de red no autorizados | Yes |
| El uso de montajes de volúmenes HostPath de pod debe estar restringido a una lista conocida | Administración de acceso y permisos | Yes |
| Se deberían evitar los contenedores con escalada de privilegios. | Administración de acceso y permisos | No |
| Deben evitarse los contenedores que comparten espacios de nombres de host confidenciales. | Administración de acceso y permisos | No |
| El sistema de archivos raíz inmutable (de solo lectura) debe aplicarse para los contenedores. | Administración de acceso y permisos | No |
| Los clústeres de Kubernetes solo deben ser accesibles mediante HTTPS | Cifrado de los datos en tránsito | No |
| Los clústeres de Kubernetes deben deshabilitar las credenciales de la API de montaje automático | Administración de acceso y permisos | No |
| Los clústeres de Kubernetes no deben usar el espacio de nombres predeterminado | Implementación de procedimientos recomendados de seguridad | No |
| Los clústeres de Kubernetes no deben conceder funcionalidades de CAP_SYS_ADMIN | Administración de acceso y permisos | No |
| Deben evitarse los contenedores con privilegios. | Administración de acceso y permisos | No |
| Se debe evitar ejecutar contenedores como usuario raíz. | Administración de acceso y permisos | No |
Visualización de recomendaciones para un clúster
Para ver las recomendaciones de endurecimiento del plano de datos para un clúster específico:
Inicie sesión en Azure Portal.
Vaya aInventario de >.
Establezca el filtro de tipo de recurso en El servicio Kubernetes y seleccione Aplicar.
Seleccione el clúster correspondiente.
Revise las recomendaciones disponibles. Las recomendaciones de fortalecimiento del plano de datos muestran el número de componentes de Kubernetes afectados.
Seleccione una recomendación para ver los recursos afectados.
Seleccione la pestaña Realizar acción para revisar las opciones de corrección.
Configuración de parámetros de directiva
Algunas recomendaciones incluyen parámetros que limitan los recursos de Kubernetes evaluados por la Azure Policy subyacente. Por ejemplo, la política para el sistema raíz Inmutable (solo lectura) debe aplicarse para contenedores que incluye los excludedContainersparámetros, , excludedImages, y excludedNamespaces . Las exclusiones de contenedores coinciden con los nombres de contenedores. Las exclusiones de imagen soportan la coincidencia de prefijos cuando el valor termina en *, como myregistry.azurecr.io/istio:*. Utiliza un nombre de imagen totalmente cualificado para evitar excluir accidentalmente una imagen de un registro no confiable.
Otras recomendaciones requieren que la configuración de parámetros sea efectiva. Por ejemplo, la recomendación Las imágenes de contenedor deben ser implementadas solo desde registros de confianza requiere que defina una lista de registros de confianza.
Si los parámetros requeridos no están configurados, los recursos se muestran como no saludables.
Para configurar parámetros de directiva:
Inicie sesión en Azure Portal.
Vaya a Microsoft Defender para la nube>Configuración del entorno.
Seleccione la suscripción correspondiente.
Seleccione Directivas de seguridad.
En la pestaña Estándares , seleccione el estándar de seguridad correspondiente.
Seleccione el menú de 3 puntos de la asignación de directiva pertinente y seleccione Administrar efecto y parámetros.
Actualice los valores de parámetro necesarios.
Haga clic en Guardar.
Aplicar políticas de endurecimiento del plano de datos
De forma predeterminada, las directivas evalúan los recursos en modo auditoría. Para aplicar una directiva, establezca su efecto en Denegar.
Para aplicar una recomendación:
Inicie sesión en Azure Portal.
Vaya a Microsoft Defender para la nube>Recommendations.
Busque y seleccione la recomendación de protección del plano de datos pertinente.
En la pestaña Realizar acción , seleccione Denegar.
Establezca el ámbito.
Seleccione Cambiar para denegar.
Aplicación de directivas de prueba
Puede validar las directivas de protección del plano de datos mediante la implementación de cargas de trabajo de prueba.
- Implementación compatible que cumple los requisitos de endurecimiento del plano de control de datos
- Una implementación no conforme que infringe varias directivas
Implemente los siguientes archivos YAML de ejemplo para comprobar que las cargas de trabajo compatibles se implementan correctamente y las cargas de trabajo no compatibles se marcan o bloquean, en función de la configuración de cumplimiento de directivas.
Ejemplo de implementación compatible
El siguiente despliegue utiliza un registro de contenedor confiable, aplica límites de CPU y memoria, y aplica un contexto de seguridad restrictivo que deshabilita la escalada de privilegios y se ejecuta como usuario no root.
apiVersion: apps/v1
kind: Deployment
metadata:
name: redis-healthy-deployment
labels:
app: redis
spec:
replicas: 3
selector:
matchLabels:
app: redis
template:
metadata:
labels:
app: redis
annotations:
container.apparmor.security.beta.kubernetes.io/redis: runtime/default
spec:
containers:
- name: redis
image: <customer-registry>.azurecr.io/redis:latest
ports:
- containerPort: 80
resources:
limits:
cpu: 100m
memory: 250Mi
securityContext:
privileged: false
readOnlyRootFilesystem: true
allowPrivilegeEscalation: false
runAsNonRoot: true
runAsUser: 1000
---
apiVersion: v1
kind: Service
metadata:
name: redis-healthy-service
spec:
type: LoadBalancer
selector:
app: redis
ports:
- port: 80
targetPort: 80
Ejemplo de implementación no compatible
El despliegue siguiente viola intencionadamente múltiples políticas de endurecimiento del plano de datos, incluyendo ejecutar un contenedor privilegiado como raíz, habilitar la red de host y espacios de nombres compartidos, y montar un volumen de rutas de host.
apiVersion: apps/v1
kind: Deployment
metadata:
name: redis-unhealthy-deployment
labels:
app: redis
spec:
replicas: 3
selector:
matchLabels:
app: redis
template:
metadata:
labels:
app: redis
spec:
hostNetwork: true
hostPID: true
hostIPC: true
containers:
- name: redis
image: redis:latest
ports:
- containerPort: 9001
hostPort: 9001
securityContext:
privileged: true
readOnlyRootFilesystem: false
allowPrivilegeEscalation: true
runAsUser: 0
capabilities:
add:
- NET_ADMIN
volumeMounts:
- mountPath: /test-pd
name: test-volume
readOnly: true
volumes:
- name: test-volume
hostPath:
# directory location on host
path: /tmp
---
apiVersion: v1
kind: Service
metadata:
name: redis-unhealthy-service
spec:
type: LoadBalancer
selector:
app: redis
ports:
- port: 6001
targetPort: 9001