Protección del endurecimiento de los planos de datos de Kubernetes

En esta página se describe cómo usar el conjunto de recomendaciones de seguridad de Microsoft Defender for Cloud dedicadas a la protección del plano de datos de Kubernetes.

Sugerencia

Para obtener una lista de las recomendaciones de seguridad que pueden aparecer para los clústeres y nodos de Kubernetes, revise las recomendaciones de contenedor.

Configuración de la protección de cargas de trabajo

Microsoft Defender for Cloud incluye una agrupación de recomendaciones que están disponibles una vez que haya instalado el Azure Policy para Kubernetes.

Requisitos previos

Habilitación del endurecimiento de planos de datos de Kubernetes

Puede habilitar el Azure Policy para Kubernetes de una de estas dos maneras:

Habilitación de Azure Policy para Kubernetes para todos los clústeres actuales y futuros mediante la configuración del plan o conector

Nota:

Al habilitar esta configuración, el Azure Policy para los pods de Kubernetes se instalan en el clúster. Al hacerlo, se asignará una pequeña cantidad de CPU y de memoria para uso de los pods. Esta asignación puede alcanzar la capacidad máxima, pero no afecta al resto de la CPU o a la memoria del recurso.

Nota:

No se admite la habilitación para AWS a través del conector debido a una limitación en EKS que requiere que el administrador del clúster agregue permisos para un nuevo rol de IAM en el propio clúster.

Habilitar para suscripciones de Azure o en las instalaciones.

Al habilitar Microsoft Defender para contenedores, la configuración "Azure Policy para Kubernetes" está habilitada de forma predeterminada para la Azure Kubernetes Service y para los clústeres de Kubernetes habilitados para Azure Arc en la suscripción correspondiente. Si deshabilita este ajuste en la configuración inicial, podrá habilitarlo después manualmente.

Si deshabilitó la configuración de "Azure Policy para Kubernetes" en el plan de contenedores, puede seguir los pasos que se indican a continuación para habilitarlo en todos los clústeres de la suscripción:

  1. Inicie sesión en el portal Azure.

  2. Vaya a Microsoft Defender for Cloud>Management>Configuración de entorno.

  3. Seleccione la suscripción correspondiente.

  4. En la página Planes de Defender, confirme que el parámetro Contenedores esté Activado.

  5. Seleccione Configuración.

    Captura de pantalla que muestra el botón de configuración en el plan Defender.

  6. En la página Configuración y supervisión, en Azure Policy para Kubernetes elija la opción Activado.

    Captura de pantalla que muestra los botones de alternancia utilizados para habilitar o deshabilitar las extensiones.

Habilitar para proyectos de GCP

Al habilitar Microsoft Defender para contenedores en un conector GCP, la opción "Extensión Azure Policy para Azure Arc" se habilita de forma predeterminada para Google Kubernetes Engine en el proyecto pertinente. Si deshabilita este ajuste en la configuración inicial, podrá habilitarlo después manualmente.

Si deshabilitó la configuración de "extensión Azure Policy para Azure Arc" en el conector GCP, puede seguir los pasos siguientes para enablelo en el conector de GCP.

Implementación de Azure Policy para Kubernetes en clústeres existentes

Puede configurar manualmente el Azure Policy para Kubernetes en clústeres de Kubernetes existentes a través de la página Recomendaciones. Una vez habilitadas, las recomendaciones de protección estarán disponibles (algunas de las recomendaciones requieren otra configuración para funcionar).

Nota:

Para AWS, no se admite la incorporación a escala mediante el conector. Sin embargo, puede instalar Azure Policy para Kubernetes en todos los clústeres existentes o en clústeres específicos mediante la recomendación Azure Arc-enabled Kubernetes clusters should have the Azure policy extension for Kubernetes extension installed.

To implementar el Azure Policy para Kubernetes en clústeres especificados:

  1. Inicie sesión en el portal Azure.

  2. Vaya a Microsoft Defender for Cloud>General>Recommendations.

  3. Busque la recomendación pertinente:

    • Azure -"Azure Kubernetes Service clusters should have the Azure Policy add-on for Kubernetes installed"
    • GCP - "GKE clusters should have the Azure Policy extension".
    • AWS y local - "Azure Arc-enabled Kubernetes clusters should have the Azure policy extension for Kubernetes extension installed".

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

  4. Seleccione una recomendación encontrada.

  5. Seleccione Corregir.

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

  6. Repita para cada recomendación adicional.

Vista y configuración del conjunto de recomendaciones

Aproximadamente 30 minutos después de que se complete la Azure Policy para la instalación de Kubernetes, Defender for Cloud muestra el estado de mantenimiento de los clústeres para las siguientes recomendaciones, cada una de ellas en el control de seguridad pertinente, tal como se muestra:

Nota:

Si va a instalar el Azure Policy para Kubernetes por primera vez, estas recomendaciones aparecen como nuevas adiciones en la lista de recomendaciones.

Sugerencia

Algunas recomendaciones tienen parámetros que se deben personalizar a través de Azure Policy para usarlos de forma eficaz. Por ejemplo, para beneficiarse de la recomendación Las imágenes de contenedor deberán implementarse desde registros de confianza, tendrá que definir sus registros de confianza. Si no especifica los parámetros necesarios para las recomendaciones que requieren configuración, las cargas de trabajo aparecerán como incorrectas.

Nota:

Los componentes de Microsoft, como el sensor de Defender, se implementan en el espacio de nombres kube-system por defecto. Esta configuración garantiza que no están marcadas como no compatibles en las recomendaciones del plano de datos. Sin embargo, las herramientas de proveedor de terceros instaladas en un espacio de nombres diferente podrían marcarse como no compatibles. Para excluir proveedores de terceros de estas recomendaciones, puede agregar su espacio de nombres a la lista de exclusión.

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 seguridad CAPSYSADMIN 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

Para las recomendaciones con parámetros que deben personalizarse, es necesario establecer los parámetros:

Para establecer los parámetros:

  1. Inicie sesión en el portal Azure.

  2. Vaya a Microsoft Defender for Cloud>Management>Configuración de entorno.

  3. Seleccione la suscripción correspondiente.

  4. En el menú de navegación, seleccione Directivas de seguridad.

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

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

  6. Seleccione el menú de 3 puntos del estándar de seguridad y seleccione Administrar.

    Captura de pantalla seleccionando

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

  8. Modifique los valores según sea necesario.

    Captura de pantalla del panel de parámetros.

  9. Seleccione Guardar.

Para aplicar cualquiera de las recomendaciones:

  1. Abra la página de detalles de recomendaciones y haga clic en Denegar:

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

    Se abre el panel para establecer el ámbito.

  2. Establezca el ámbito y seleccione Cambiar a denegar.

Para ver qué recomendaciones se aplican a los clústeres:

  1. Inicie sesión en el portal Azure.

  2. Vaya a Defender for Cloud>Inventory.

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

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

  4. Seleccione un clúster para investigar.

  5. Revise las recomendaciones disponibles para ella. Cuando vea una recomendación de la protección de cargas de trabajo establecida, se mostrará el número de pods afectados ("componentes de Kubernetes") mostrados junto con el clúster.

  6. Opcional: para ver la lista de los pods específicos, seleccione la recomendación.

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

  7. y, a continuación, seleccione Realizar acción.

Captura de pantalla que muestra dónde ver los pods afectados por una recomendación de Kubernetes.

Para probar la aplicación, use las dos implementaciones de Kubernetes siguientes:

  • Una es para una implementación correcta, compatible con el conjunto de recomendaciones de protección de cargas de trabajo.

  • La otra es para una implementación incorrecta, no compatible con cualquiera de las recomendaciones.

Implemente los archivos .yaml de ejemplo tal cual o úselos como referencia para corregir su propia carga de trabajo.

Archivo .yaml de ejemplo de implementación correcta

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

Archivo .yaml de ejemplo de implementación incorrecta

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

Pasos siguientes

En este artículo, ha aprendido a configurar el endurecimiento de planos de datos de Kubernetes.

Para obtener material relacionado, vea las páginas siguientes: