Configurar el endurecimiento del plano de datos de Kubernetes en Defender for Cloud

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 Defender for Cloud, se implementa el endurecimiento de planos de datos usando Azure Policy for Kubernetes para evaluar y hacer cumplir estas configuraciones. Microsoft Defender for Containers despliega automáticamente Azure Policy cuando activas el aprovisionamiento automático.

Si desactivas Azure Policy para Kubernetes en la configuración del plan de Defender for Containers, puedes desplegarla remediando la recomendación relevante. También puedes desplegar Azure Policy manualmente usando CLI de Azure para desplegar Defender para componentes de contenedores o Helm para desplegar Defender para componentes de contenedores si desactivas la provisión automática durante la habilitación o excluyes clústeres específicos de la provisión automática.

Después de desplegar Azure Policy para Kubernetes, Defender for Cloud genera recomendaciones de endurecimiento del plano de datos basadas en la configuración de tu clúster. Puedes revisar estas recomendaciones, configurar parámetros de política e aplicarlas en tus clústeres.

Prerequisites

Para empezar, asegúrate de que:

Habilitación de Azure Policy para Kubernetes mediante la corrección de recomendaciones

Si no desplegaste Azure Policy para Kubernetes o la desactivaste en la configuración del plan de Defender for Containers, instálala remediando la recomendación que coincida con tu tipo de clúster en Defender for Cloud.

  1. Inicie sesión en Azure Portal.

  2. Vaya a Microsoft Defender para la nube>Recommendations.

  3. Busque la recomendación pertinente:

    • Azure: los clústeres de Azure Kubernetes Service deberían tener instalado el complemento Azure Policy para Kubernetes
    • GCP: Los clústeres GKE deberían tener instalada la extensión Azure Policy
    • Kubernetes habilitado para Arc/AWS: Los clústeres de Kubernetes habilitados para Azure Arc deben tener instalada la extensión Azure Policy

    Screenshot que muestra la recomendación de clústeres de servicio de Kubernetes Azure.

  4. Seleccione una recomendación.

  5. En la pestaña Realizar acción , seleccione Corregir.

    Captura de pantalla de una recomendación con el botón Corregir resaltado.

  6. Seleccione Corregir para corregir los recursos seleccionados.

  7. 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:

  1. Inicie sesión en Azure Portal.

  2. Vaya aInventario de >.

  3. Establezca el filtro de tipo de recurso en El servicio Kubernetes y seleccione Aplicar.

    Captura de pantalla del uso del filtro de tipo de recurso para seleccionar kubernetes service.

  4. Seleccione el clúster correspondiente.

  5. Revise las recomendaciones disponibles. Las recomendaciones de fortalecimiento del plano de datos muestran el número de componentes de Kubernetes afectados.

  6. Seleccione una recomendación para ver los recursos afectados.

    Captura de pantalla de la selección de una recomendación en la página Resource Health.

  7. Seleccione Tomar acción para revisar opciones de remediación.

    Captura de pantalla de la pestaña Realizar acción, que se usa para ver los pasos de corrección de una recomendació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 directiva para aplicar un sistema de archivos raíz inmutable (solo lectura) a los contenedores incluye los parámetros excludedContainers, excludedImages y excludedNamespaces.

Las exclusiones de contenedores se corresponden con los nombres de los 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:

  1. Inicie sesión en Azure Portal.

  2. Vaya a Microsoft Defender para la nube>Configuración del entorno.

  3. Seleccione la suscripción correspondiente.

  4. Seleccione Directivas de seguridad.

    Captura de pantalla de la página Directivas de seguridad.

  5. En la pestaña Estándares , seleccione el estándar de seguridad correspondiente.

  6. Seleccione el menú de tres puntos de la asignación de políticas correspondiente y seleccione Gestionar efecto y parámetros.

    Captura de pantalla de seleccionar el menú de tres puntos y luego seleccionar Gestionar efecto y parámetros.

  7. Actualice los valores de parámetro necesarios.

    Captura de pantalla del panel de parámetros.

  8. 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:

  1. Inicie sesión en Azure Portal.

  2. Vaya a Microsoft Defender para la nube>Recommendations.

  3. Busque y seleccione la recomendación de protección del plano de datos pertinente.

  4. En la pestaña Realizar acción , seleccione Denegar.

    Screenshot que muestra la opción Denegar para Azure Policy parameter.

  5. Establezca el ámbito.

  6. 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

La siguiente implementación infringe intencionadamente varias políticas de endurecimiento del plano de datos, entre ellas ejecutar un contenedor privilegiado como root, habilitar la red del host y espacios de nombres compartidos, y montar un volumen hostPath.

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

Paso siguiente