Compartir vía


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

En esta página se describe el uso del conjunto de recomendaciones de seguridad de Microsoft Defender for Cloud dedicadas al endurecimiento de planos de datos de Kubernetes.

Sugerencia

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

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

Microsoft Defender for Cloud incluye un conjunto de recomendaciones que están disponibles cuando ha instalado Azure Policy para Kubernetes.

Requisitos previos

Habilitación del endurecimiento de planos de datos de Kubernetes

Es posible habilitar Azure Policy para Kubernetes de dos maneras:

Habilitar Azure Policy para Kubernetes en 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.

Habilitación de suscripciones de Azure o locales

Al habilitar Microsoft Defender para contenedores, el ajuste "Azure Policy para Kubernetes" estará habilitado de manera predeterminada para 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 siguientes para habilitarla en todos los clústeres de la suscripción:

  1. Inicie sesión en Azure Portal.

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

  3. Seleccione la suscripción correspondiente.

  4. En la página Planes de Defender, asegúrese de que el estado de los contenedores es Activado.

  5. Haga clic en Configuración.

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

  6. En la página Configuración y supervisión, cambie la opción "Azure Policy para Kubernetes" a Activado.

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

Habilitación de proyectos de GCP

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

Si deshabilitó la opción "Extensión de Azure Policy para Azure Arc" en el conector de GCP, puede seguir los pasos siguientes para habilitarlo 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 es posible realizar la incorporación a gran escala mediante el conector, pero se puede instalar en todos los clústeres o en clústeres específicos a través de la recomendación Los clústeres de Kubernetes habilitados para Azure Arc deben tener instalada la extensión de Azure Policy para Kubernetes.

Para implementar Azure Policy para Kubernetes en clústeres especificados:

  1. En la página de recomendaciones, 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". Captura de pantalla que muestra la recomendación de clústeres del servicio Azure Kubernetes.

      Sugerencia

      La recomendación se incluye en controles de seguridad diferentes y no importa cuál seleccione en el siguiente paso.

  2. En cualquiera de los controles de seguridad, seleccione la recomendación para ver los recursos en los que puede instalar el complemento.

  3. Seleccione el clúster correspondiente y, luego, Corregir.

    Captura de pantalla que muestra cómo seleccionar el clúster para corregir.

Vista y configuración del conjunto de recomendaciones

Aproximadamente 30 minutos después de completarse la instalación del Azure Policy para Kubernetes, Defender for Cloud muestra el estado de mantenimiento de los clústeres de las siguientes recomendaciones, cada uno en el control de seguridad pertinente como se muestra a continuación:

Nota:

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

Sugerencia

Algunas recomendaciones tienen parámetros que deben personalizarse a través de Azure Policy para usarlos de forma eficaz. Por ejemplo, para beneficiarse de la recomendación Las imágenes de contenedor solo deben 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 y el agente de Azure Monitor (AMA) se implementan en el espacio de nombres kube-system de manera predeterminada. 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 se pueden marcar 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 otorgar 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 Azure Portal.

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

  3. Seleccione la suscripción correspondiente.

  4. En el menú de Defender for Cloud, seleccione Directiva de seguridad.

  5. Seleccione la asignación pertinente. La asignación predeterminada es ASC default.

  6. Abra la pestaña Parámetros y modifique los valores según sea necesario.

    Captura de pantalla que muestra cómo modificar los parámetros para una de las recomendaciones del conjunto de protección del plano de datos de Kubernetes.

  7. Seleccione Revisar y guardar.

  8. Seleccione Guardar.

Para aplicar cualquiera de las recomendaciones:

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

    Captura de pantalla que muestra la opción Denegar del parámetro de Azure Policy.

    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. Abra la página Inventario de recursos de Defender for Cloud y establezca el filtro de tipo de recurso en Servicios de Kubernetes.

  2. Seleccione un clúster para investigar y revise las recomendaciones disponibles para este.

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. Para ver una lista de los pods específicos, seleccione el clúster 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: