Настройка защиты плоскости данных Kubernetes в Defender для облака

Защита плоскости данных Kubernetes помогает применять безопасные конфигурации для рабочих нагрузок, работающих в кластере, таких как ограничение привилегированных контейнеров, применение ограничений ресурсов и ограничение сетевого доступа.

В Microsoft Defender для облака усиление плоскостей данных реализуется с помощью Политика Azure for Kubernetes для оценки и обеспечения соблюдения этих конфигураций. Политика Azure развертывается как часть Defender for Containers при включенном автоматическом предоставлении.

Если Политика Azure для Kubernetes отключена в настройках плана в Defender для контейнеров, её можно развернуть, устранив соответствующую рекомендацию. Вы также можете вручную развернуть Политика Azure, используя Azure CLI для развертывания компонентов Defender for Containers или Helm для развертывания компонентов Defender for Containers, если вы отключили автоматическую провизию во время активации или исключили определённые кластеры из автоматической настройки.

После развертывания Политика Azure для Kubernetes Defender для облака создает рекомендации по обеспечению защиты плоскости данных на основе конфигурации кластера. На этой странице показано, как просмотреть эти рекомендации, настроить параметры политики и применить их в кластерах.

Prerequisites

Чтобы начать, убедитесь, что:

Включение Политика Azure для Kubernetes путем исправления рекомендаций

Если Политика Azure for Kubernetes не развернута или была отключена в настройках плана Defender for Containers, вы можете установить её, исправив рекомендацию, соответствующую вашему кластеру, в Defender для облака.

  1. Войдите на портал Azure.

  2. Перейдите в Microsoft Defender для облака>Рекомендации.

  3. Найдите соответствующую рекомендацию:

    • Azure: Служба Azure Kubernetes кластерам должна быть установлена надстройка Политика Azure для Kubernetes.
    • GCP: кластеры GKE должны иметь расширение Политика Azure
    • AWS/Arc с поддержкой Kubernetes: Azure Arc кластеры Kubernetes должны иметь расширение Политика Azure

    Скриншот, показывающий рекомендации по кластерам службы Azure Kubernetes.

  4. Выберите рекомендацию.

  5. На вкладке "Действие" нажмите кнопку "Исправить".

    Снимок экрана: рекомендация с выделенной кнопкой

  6. Выберите "Исправление", чтобы устранить выбранные ресурсы.

  7. Повторите для каждой рекомендации.

Рекомендации по обеспечению защиты плоскости данных

После развертывания Политика Azure для Kubernetes Defender для облака оценивает конфигурацию кластера и создает рекомендации по обеспечению защиты уровня данных. Этот процесс может занять до 30 минут.

Note

Компоненты компании Microsoft, такие как датчик Defender, развертываются в пространстве имен kube-system по умолчанию и не признаны несоответствующими. Сторонние компоненты, установленные в других пространствах имен, могут быть помечены. Чтобы исключить определенные пространства имен, настройте исключения политик Azure.

В следующей таблице перечислены общие рекомендации по обеспечению защиты плоскости данных:

Имя рекомендации Контроль безопасности Требуется настройка
Для контейнеров должны соблюдаться ограничения по числу ЦП и объему оперативной памяти. Защита приложений от атак DDoS Yes
Образы контейнеров должны развертываться только из доверенных реестров Исправление уязвимостей Yes
Для контейнеров должны применяться возможности Linux с наименьшими привилегиями. Управление доступом и разрешениями Yes
Контейнеры должны использовать только разрешенные профили AppArmor Исправление конфигураций системы безопасности Yes
Службы должны работать только на разрешенных портах Ограничить несанкционированный сетевой доступ Yes
Использование сети и портов узлов должно быть ограничено Ограничить несанкционированный сетевой доступ Yes
Использование подключений томов HostPath для pod'ов должно быть ограничено списком, известным заранее. Управление доступом и разрешениями Yes
Контейнеры с повышением привилегий следует избегать Управление доступом и разрешениями No
Контейнеры, разделяющие чувствительные пространства имен хоста, следует по возможности избегать Управление доступом и разрешениями No
Для контейнеров должна применяться неизменяемая (доступная только для чтения) корневая файловая система Управление доступом и разрешениями No
Кластеры Kubernetes должны быть доступны только через HTTPS Шифрование данных при передаче No
Кластеры Kubernetes должны отключить автоматическое подключение учетных данных API. Управление доступом и разрешениями No
Кластеры Kubernetes не должны использовать пространство имен по умолчанию Реализация рекомендаций по безопасности No
Кластеры Kubernetes не должны предоставлять CAP_SYS_ADMIN возможности Управление доступом и разрешениями No
Требуется избегать привилегированных контейнеров Управление доступом и разрешениями No
Запуск контейнеров с привилегированными правами пользователя (root) следует избегать. Управление доступом и разрешениями No

Просмотр рекомендаций для кластера

Чтобы просмотреть рекомендации по обеспечению защиты плоскости данных для определенного кластера, выполните указанные ниже действия.

  1. Войдите на портал Azure.

  2. Перейдите к Defender для облака>Inventory.

  3. Задайте фильтр типа ресурса в службу Kubernetes и нажмите кнопку "Применить".

    Снимок экрана: использование фильтра типов ресурсов для выбора службы Kubernetes.

  4. Выберите соответствующий кластер.

  5. Просмотрите доступные рекомендации. Рекомендации по обеспечению защиты плоскости данных показывают количество затронутых компонентов Kubernetes.

  6. Выберите рекомендацию для просмотра затронутых ресурсов.

    Скриншот с изображением выбора рекомендации на странице состояния ресурсов.

  7. Перейдите на вкладку "Действие" , чтобы просмотреть параметры исправления.

    Снимок экрана: вкладка

Настройка параметров политики

Некоторые рекомендации включают параметры, ограничивающие ресурсы Kubernetes, оцениваемые базовой Политика Azure. Например, политика для иммутабельной (только для чтения) корневой файловой системы должна применяться для контейнеров , включая excludedContainersпараметры , excludedImages, и excludedNamespaces . Исключения контейнеров совпадают с именами контейнеров. Исключения изображений поддерживают соответствие префиксов, когда значение заканчивается на *, например myregistry.azurecr.io/istio:*, . Используйте полностью квалифицированное имя изображения, чтобы избежать случайного исключения изображения из ненадёжного реестра.

Другие рекомендации требуют настройки параметров для эффективности. Например, образы контейнеров следует развертывать только из доверенных реестров; это требует определения списка таких реестров.

Если необходимые параметры не настроены, ресурсы отображаются как неработоспособные.

Чтобы настроить параметры политики, выполните следующие действия.

  1. Войдите на портал Azure.

  2. Перейдите к Microsoft Defender для облака>параметрам среды.

  3. Выберите соответствующую подписку.

  4. Выберите политики безопасности.

    Снимок экрана: страница

  5. На вкладке "Стандарты" выберите соответствующий стандарт безопасности.

  6. Выберите 3-пунктное меню соответствующего назначения политики и выберите пункт "Управление эффектом и параметрами".

    Снимок экрана: выбор 3-пунктичного меню и выбор параметра

  7. Обновите необходимые значения параметров.

    Снимок экрана: панель параметров.

  8. Нажмите Сохранить.

Принудительное применение политик защиты плоскости данных

По умолчанию политики оценивают ресурсы в режиме аудита. Чтобы применить политику, задайте для нее значение "Запретить".

Чтобы применить рекомендацию, выполните следующее:

  1. Войдите на портал Azure.

  2. Перейдите в Microsoft Defender для облака>Рекомендации.

  3. Найдите и выберите соответствующую рекомендацию по обеспечению защиты плоскости данных.

  4. На вкладке "Действие" нажмите кнопку "Запретить".

    Снимок экрана, показывающий параметр

  5. Задайте область.

  6. Нажмите кнопку "Изменить", чтобы запретить.

Проверка применения политики

Политики защиты плоскости данных можно проверить, развернув тестовые рабочие нагрузки.

  • Развертывание, соответствующее требованиям к укреплению защиты плоскости передачи данных
  • Несоответствующее развертывание, которое нарушает несколько политик

Разверните в следующем примере файлы YAML, чтобы убедиться, что соответствующие рабочие нагрузки развертываются успешно, а несоответствующие рабочие нагрузки помечены или блокируются в зависимости от параметров применения политик.

Пример совместимого развертывания

Следующее развертывание использует доверенный реестр контейнеров, обеспечивает соблюдение ограничений CPU и памяти, а также ограничивающий контекст безопасности, который отключает эскалацию привилегий и запускается как некорневый пользователь.

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

Пример несоответствующего развертывания

Следующее развертывание намеренно нарушает несколько политик упрочнения плоскостей данных, включая запуск привилегированного контейнера в качестве root, включение сети и общих пространств имён, а также монтирование тома пути хоста.

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

Следующий шаг