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 Microsoft Defender para la nube, la protección del plano de datos se implementa mediante Azure Policy para que Kubernetes evalúe y aplique 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 puede implementar Azure Policy manualmente mediante CLI de Azure o Helm si deshabilita el aprovisionamiento automático durante la habilitación o excluye clústeres específicos del aprovisionamiento automático.

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.

Requisitos previos

Para empezar, asegúrese de que:

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

Si no se implementa Azure Policy para Kubernetes o se ha desactivado en la configuración del plan de Defender para contenedores, puede instalarlo mediante la corrección de la recomendación pertinente en Defender for Cloud.

  1. Inicie sesión en el portal Azure.

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

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

    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.

Nota:

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
Debe aplicar los límites de CPU y memoria de los contenedores Protección de aplicaciones contra ataques DDoS
Las imágenes de contenedor solo deben implementarse desde registros de confianza Corrección de vulnerabilidades
Deben aplicarse funcionalidades de Linux con privilegios mínimos para los contenedores Administración de acceso y permisos
Los contenedores solo deben usar perfiles de AppArmor permitidos Corrección de configuraciones de seguridad
Los servicios solo deben escuchar en los puertos permitidos Restricción de los accesos de red no autorizados
El uso de puertos y redes de hosts debe estar restringido Restricción de los accesos de red no autorizados
El uso de montajes de volúmenes HostPath de pod debe estar restringido a una lista conocida Administración de acceso y permisos
Debe evitar los contenedores con elevación 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
Debe evitar la ejecución de 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 el portal Azure.

  2. Vaya a Defender for Cloud>Inventory.

  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 la pestaña Realizar acción para revisar las opciones de correcció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 requieren que la configuración de parámetros sea eficaz. 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 el portal Azure.

  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 3 puntos de la asignación de directiva pertinente y seleccione Administrar efecto y parámetros.

    Captura de pantalla de la selección del menú de 3 puntos y, a continuación, seleccionar Administrar efecto y parámetros.

  7. Actualice los valores de parámetro necesarios.

    Captura de pantalla del panel de parámetros.

  8. Seleccione 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 el portal Azure.

  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

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

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