Поделиться через


Эталонное тестирование Центра безопасности в Интернете Kubernetes

Служба Azure Kubernetes (AKS), будучи защищенной службой, соответствует стандартам SOC, ISO, PCI DSS и HIPAA. В этой статье рассматривается укрепление безопасности AKS с помощью эталонного тестирования CIS Kubernetes. Дополнительные сведения о безопасности AKS см. в статье Основные понятия безопасности приложений и кластеров в Службе Azure Kubernetes (AKS). Дополнительные сведения о тесте производительности CIS см. в разделе Эталоны Центра безопасности в Интернете (CIS).

Эталонное тестирование Kubernetes CIS

Ниже приведены результаты рекомендаций CIS Kubernetes версии 1.27 Benchmark версии 1.9.0 по AKS. Результаты применимы к AKS 1.27.x до AKS 1.29.x.

Уровни безопасности

Эталоны CIS предлагают два уровня параметров безопасности:

  • L1 (уровень 1): рекомендации относительно базовых требований к безопасности, которые можно настроить в любой системе и которые (практически) не ведут к перебоям в обслуживании или нарушению функциональности.
  • L2 (уровень 2): рекомендации относительно параметров безопасности для сред с более высокими требованиями к безопасности, которые могут вести к снижению функциональности.

Состояние оценки

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

  • Автоматизировано: представляет рекомендации, для которых оценка технического контроля может быть полностью автоматизирована и проверена на состояние передачи или сбоя. Рекомендации включают необходимые сведения для реализации автоматизации.
  • Вручную. Представляет рекомендации, для которых оценка технического элемента управления не может быть полностью автоматизирована и требует выполнения всех или некоторых действий вручную, чтобы убедиться, что настроенное состояние задано должным образом. Ожидаемое состояние может отличаться в зависимости от среды.

Автоматические рекомендации влияют на оценку теста, если они не применяются, а рекомендации вручную не применяются.

Состояние аттестации

Рекомендации могут иметь одно из следующих состояний аттестации:

  • Передайте: была применена рекомендация.
  • Сбой: рекомендация не была применена.
  • N/A. Рекомендация относится к требованиям к разрешениям файла манифеста, которые не относятся к AKS. Кластеры Kubernetes по умолчанию используют модель манифеста для развертывания модулей pod уровня управления, которые работают на основе файлов с виртуальной машины узла. В рамках эталонного тестирования CIS Kubernetesе рекомендуется устанавливать для этих файлов определенные требования к разрешениям. Кластеры AKS используют диаграмму Helm для развертывания модулей pod уровня управления и не используют файлы на виртуальной машине узла.
  • Зависит от среды: рекомендация применяется в конкретной среде пользователя и не контролируется AKS. Автоматические рекомендации влияют на оценку теста, применяется ли рекомендация к определенной среде пользователя или нет.
  • Эквивалентный элемент управления: рекомендация реализована по-другому, аналогично.

Сведения о тесте

Идентификатор CIS Описание рекомендации Состояние оценки Уровень Состояние
1 Компоненты уровня управления
1,1 Файлы конфигурации узла уровня управления
1.1.1 Убедитесь, что разрешения файла файла спецификации модуля pod сервера API имеют значение 600 или более строгих. Автоматизированный L1 Н/П
1.1.2 Убедитесь, что для параметра владения файлом спецификации модуля pod сервера API задано значение root:root. Автоматизированный L1 Н/П
1.1.3 Убедитесь, что разрешения файла спецификации pod диспетчера контроллера имеют значение 600 или более строгих Автоматизированный L1 Н/П
1.1.4 Убедитесь, что для параметра владения файлом спецификации модуля pod диспетчера контроллеров задано значение root:root. Автоматизированный L1 Н/П
1.1.5 Убедитесь, что разрешения файла спецификации pod планировщика имеют значение 600 или более строгих Автоматизированный L1 Н/П
1.1.6 Убедитесь, что для параметра владения файлом спецификации модуля pod планировщика задано значение root:root. Автоматизированный L1 Н/П
1.1.7 Убедитесь, что разрешения файла спецификации etcd pod имеют значение 600 или более строгих Автоматизированный L1 Н/П
1.1.8 Убедитесь, что для параметра владения файлом спецификации модуля pod etcd задано значение root:root. Автоматизированный L1 Н/П
1.1.9 Убедитесь, что разрешения файла сетевого интерфейса контейнера имеют значение 600 или более строгих Руководство L1 Н/П
1.1.10 Убедитесь, что для параметра владения файлом сетевого интерфейса контейнера задано значение root:root. Руководство L1 Н/П
1.1.11 Убедитесь, что для каталога данных etcd заданы разрешения 700 или более ограничительные. Автоматизированный L1 Н/П
1.1.12 Убедитесь, что для параметра владения каталогом данных etcd задано значение etcd:etcd. Автоматизированный L1 Н/П
1.1.13 Убедитесь, что для разрешений на файл admin.conf задано значение 600 или более строгих Автоматизированный L1 Н/П
1.1.14 Убедитесь, что для параметра владения файлом admin.conf задано значение root:root. Автоматизированный L1 Н/П
1.1.15 Убедитесь, что разрешения на файл scheduler.conf имеют значение 600 или более строгих. Автоматизированный L1 Н/П
1.1.16 Убедитесь, что для параметра владения файлом scheduler.conf задано значение root:root. Автоматизированный L1 Н/П
1.1.17 Убедитесь, что разрешения файла controller-manager.conf имеют значение 600 или более строгих Автоматизированный L1 Н/П
1.1.18 Убедитесь, что для параметра владения файлом controller-manager.conf задано значение root:root. Автоматизированный L1 Н/П
1.1.19 Убедитесь, что для параметра владения каталогом PKI Kubernetes задано значение root:root. Автоматизированный L1 Н/П
1.1.20 Убедитесь, что разрешения PKI-файла сертификата Kubernetes имеют значение 600 или более строгих. Руководство L1 Н/П
1.1.21 Убедитесь, что для разрешений файла ключ PKI Kubernetes заданы разрешения 600. Руководство L1 Н/П
1.2 Сервер API
1.2.1 Убедитесь, что для аргумента --anonymous-auth задано значение false. Руководство L1 Пройдено
1.2.2 Убедитесь, что --token-auth-file параметр не задан. Автоматизированный L1 Сбой
1.2.3 Убедитесь, что --DenyServiceExternalIPs не задано Руководство L1 Сбой
1.2.4 Убедитесь, что аргументы --kubelet-client-certificate и --kubelet-client-key заданы соответствующим образом. Автоматизированный L1 Пройдено
1.2.5 Убедитесь, что аргумент --kubelet-certificate-authority задан соответствующим образом. Автоматизированный L1 Сбой
1.2.6 Убедитесь, что для аргумента --authorization-mode не задано значение AlwaysAllow. Автоматизированный L1 Пройдено
1.2.7 Убедитесь, что аргумент --authorization-mode включает узел. Автоматизированный L1 Пройдено
1.2.8 Убедитесь, что аргумент --authorization-mode включает RBAC. Автоматизированный L1 Пройдено
1.2.9 Убедитесь, что подключаемый модуль управления допуском EventRateLimit установлен. Руководство L1 Сбой
1.2.10 Убедитесь, что подключаемый модуль управления допуском AlwaysAdmit не установлен. Автоматизированный L1 Пройдено
1.2.11 Убедитесь, что подключаемый модуль управления допуском AlwaysPullImages установлен. Руководство L1 Сбой
1.2.12 Убедитесь, что подключаемый модуль управления допуском ServiceAccount установлен. Автоматизированный L2 Сбой
1.2.13 Убедитесь, что подключаемый модуль управления допуском NamespaceLifecycle установлен. Автоматизированный L2 Пройдено
1.2.14 Убедитесь, что подключаемый модуль управления допуском NodeRestriction установлен. Автоматизированный L2 Пройдено
1.2.15 Убедитесь, что для аргумента --profiling задано значение false. Автоматизированный L1 Пройдено
1.2.16 Убедитесь, что аргумент --audit-log-path задан. Автоматизированный L1 Пройдено
1.2.17 Убедитесь, что для аргумента --audit-log-maxage задано значение 30 или другое соответствующее значение. Автоматизированный L1 Эквивалентный механизм контроля
1.2.18 Убедитесь, что для аргумента --audit-log-maxbackup задано значение 10 или другое соответствующее значение. Автоматизированный L1 Эквивалентный механизм контроля
1.2.19 Убедитесь, что для аргумента --audit-log-maxsize задано значение 100 или другое соответствующее значение. Автоматизированный L1 Пройдено
1.2.20 Убедитесь, что аргумент --request-timeout задан соответствующим образом. Руководство L1 Пройдено
1.2.21 Убедитесь, что для аргумента --service-account-lookup задано значение true. Автоматизированный L1 Пройдено
1.2.22 Убедитесь, что аргумент --service-account-key-file задан соответствующим образом. Автоматизированный L1 Пройдено
1.2.23 Убедитесь, что аргументы --etcd-certfile и --etcd-keyfile заданы соответствующим образом. Автоматизированный L1 Пройдено
1.2.24 Убедитесь, что аргументы --tls-cert-file и --tls-private-key-file заданы соответствующим образом. Автоматизированный L1 Пройдено
1.2.25 Убедитесь, что аргумент --client-ca-file задан соответствующим образом. Автоматизированный L1 Пройдено
1.2.26 Убедитесь, что аргумент --etcd-cafile задан соответствующим образом. Автоматизированный L1 Пройдено
1.2.27 Убедитесь, что аргумент --encryption-provider-config задан соответствующим образом. Руководство L1 Зависит от среды
1.2.28 Убедитесь, что поставщики шифрования настроены соответствующим образом. Руководство L1 Зависит от среды
1.2.29 Убедитесь, что сервер API использует только надежные криптографические шифры. Руководство L1 Пройдено
1,3 Диспетчер контроллеров
1.3.1 Убедитесь, что аргумент --terminated-pod-gc-threshold задан соответствующим образом. Руководство L1 Пройдено
1.3.2 Убедитесь, что для аргумента --profiling задано значение false. Автоматизированный L1 Пройдено
1.3.3 Убедитесь, что для аргумента --use-service-account-credentials задано значение true. Автоматизированный L1 Пройдено
1.3.4 Убедитесь, что аргумент --service-account-private-key-file задан соответствующим образом. Автоматизированный L1 Пройдено
1.3.5 Убедитесь, что аргумент --root-ca-file задан соответствующим образом. Автоматизированный L1 Пройдено
1.3.6 Убедитесь, что для аргумента RotateKubeletServerCertificate задано значение true. Автоматизированный L2 Пройдено
1.3.7 Убедитесь, что для аргумента --bind-address задано значение 127.0.0.1. Автоматизированный L1 Эквивалентный механизм контроля
1.4 Планировщик
1.4.1 Убедитесь, что для аргумента --profiling задано значение false. Автоматизированный L1 Пройдено
1.4.2 Убедитесь, что для аргумента --bind-address задано значение 127.0.0.1. Автоматизированный L1 Эквивалентный механизм контроля
2 etcd
2.1 Убедитесь, что аргументы --cert-file и --key-file заданы соответствующим образом. Автоматизированный L1 Пройдено
2,2 Убедитесь, что для аргумента --client-cert-auth задано значение true. Автоматизированный L1 Пройдено
2.3 Убедитесь, что для аргумента --auto-tls не задано значение true. Автоматизированный L1 Пройдено
2.4 Убедитесь, что аргументы --peer-cert-file и --peer-key-file заданы соответствующим образом. Автоматизированный L1 Пройдено
2.5 Убедитесь, что для аргумента --peer-client-cert-auth задано значение true. Автоматизированный L1 Пройдено
2.6 Убедитесь, что для аргумента --peer-auto-tls не задано значение true. Автоматизированный L1 Пройдено
2.7 Убедитесь, что для etcd используется уникальный центр сертификации. Руководство L2 Пройдено
3 Конфигурация уровня управления
3.1 Аутентификация и авторизация
3.1.1 Для пользователей не следует использовать проверку подлинности с использованием сертификата клиента Руководство L1 Пройдено
3.1.2 Проверка подлинности маркера учетной записи службы не должна использоваться для пользователей Руководство L1 Пройдено
3.1.3 Проверка подлинности маркера начальной загрузки не должна использоваться для пользователей Руководство L1 Пройдено
3.2 Ведение журнала
3.2.1 Убедитесь, что создана минимальная политика аудита. Руководство L1 Пройдено
3.2.2 Убедитесь, что политика аудита охватывает ключевые проблемы безопасности. Руководство L2 Пройдено
4 Рабочие узлы
4,1 Файлы конфигурации рабочих узлов
4.1.1 Убедитесь, что разрешения файла службы kubelet имеют значение 600 или более строгих. Автоматизированный L1 Пройдено
4.1.2 Убедитесь, что для параметра владения файлом службы kubelet задано значение root:root. Автоматизированный L1 Пройдено
4.1.3 Если файл kubeconfig прокси-сервера существует, убедитесь, что для разрешений задано значение 600 или более строгих. Руководство L1 Н/П
4.1.4 Если файл kubeconfig прокси-сервера существует, убедитесь, что владение имеет значение root:root Руководство L1 Н/П
4.1.5 Убедитесь, что --kubeconfig разрешения файла kubelet.conf имеют значение 600 или более строгих Автоматизированный L1 Пройдено
4.1.6 Убедитесь, что --kubeconfig для владельца файла kubelet.conf задано значение root:root Автоматизированный L1 Пройдено
4.1.7 Убедитесь, что разрешения файлов центра сертификации имеют значение 600 или более строгих Руководство L1 Пройдено
4.1.8 Убедитесь, что для параметра владения файлом центром клиентских сертификатов задано значение root:root. Руководство L1 Пройдено
4.1.9 Если используется файл конфигурации kubelet config.yaml, убедитесь, что разрешения, установленные для 600 или более строгих Автоматизированный L1 Пройдено
4.1.10 Если используется файл конфигурации kubelet config.yaml, убедитесь, что владение файлами имеет значение root:root. Автоматизированный L1 Пройдено
4.2 kubelet
4.2.1 Убедитесь, что для аргумента --anonymous-auth задано значение false. Автоматизированный L1 Пройдено
4.2.2 Убедитесь, что для аргумента --authorization-mode не задано значение AlwaysAllow. Автоматизированный L1 Пройдено
4.2.3 Убедитесь, что аргумент --client-ca-file задан соответствующим образом. Автоматизированный L1 Пройдено
4.2.4 Убедитесь, что для аргумента --read-only-port задано значение 0. Руководство L1 Пройдено
4.2.5 Убедитесь, что для аргумента --streaming-connection-idle-timeout не задано значение 0. Руководство L1 Пройдено
4.2.6 Убедитесь, что для аргумента --make-iptables-util-chains задано значение true. Автоматизированный L1 Пройдено
4.2.7 Убедитесь, что аргумент --hostname-override не задан. Руководство L1 Пройдено
4.2.8 Убедитесь, что --eventRecordQPS аргумент установлен на уровень, обеспечивающий соответствующую запись событий. Руководство L2 Пройдено
4.2.9 Убедитесь, что аргументы --tls-cert-file и --tls-private-key-file заданы соответствующим образом. Руководство L1 Пройдено
4.2.10 Убедитесь, что для аргумента --rotate-certificates не задано значение false. Автоматизированный L1 Пройдено
4.2.11 Убедитесь, что аргумент RotateKubeletServerCertificate имеет значение true Руководство L1 Сбой
4.2.12 Убедитесь, что Kubelet использует только надежные криптографические шифры. Руководство L1 Пройдено
4.2.13 Убедитесь, что ограничение задано в идентификаторах piD pod Руководство L1 Пройдено
4.3 kube-proxy
4.3.1 Убедитесь, что служба метрик kube-proxy привязана к localhost Автоматизированный L1 Пройдено
5 Политики
5.1 Учетные записи RBAC и служб
5.1.1 Убедитесь, что роль "Администратор кластера" используется только там, где это необходимо. Автоматизированный L1 Зависит от среды
5.1.2 Ограничение доступа к секретам Автоматизированный L1 Зависит от среды
5.1.3 Сокращение использования подстановочных знаков в ролях и ClusterRoles Автоматизированный L1 Зависит от среды
5.1.4 Ограничение доступа к созданию модулей pod Автоматизированный L1 Зависит от среды
5.1.5 Убедитесь, что учетные записи служб по умолчанию не используются активно. Автоматизированный L1 Зависит от среды
5.1.6 Убедитесь, что маркеры учетных записей службы подключаются только при необходимости. Автоматизированный L1 Зависит от среды
5.1.7 Избегайте использования группы system:master Руководство L1 Зависит от среды
5.1.8 Ограничение использования разрешений Bind, Олицетворения и эскалации разрешений в кластере Kubernetes Руководство L1 Зависит от среды
5.1.9 Минимизация доступа к созданию постоянных томов Руководство L1 Зависит от среды
5.1.10 Минимизация доступа к подресурсу прокси-сервера узлов Руководство L1 Зависит от среды
5.1.11 Минимизация доступа к подресурсу утверждения объектов certificatesigningrequests Руководство L1 Зависит от среды
5.1.12 Минимизация доступа к объектам конфигурации веб-перехватчика Руководство L1 Зависит от среды
5.1.13 Минимизация доступа к созданию маркера учетной записи службы Руководство L1 Зависит от среды
5,2 Стандарты безопасности Pod
5.2.1 Убедитесь, что кластер имеет по крайней мере один механизм управления активной политикой Руководство L1 Зависит от среды
5.2.2 Ограничение доступности привилегированных контейнеров Руководство L1 Зависит от среды
5.2.3 Ограничение доступности контейнеров, пытающихся совместно использовать пространство имен идентификаторов процесса узла Руководство L1 Зависит от среды
5.2.4 Ограничение доступности контейнеров, пытающихся совместно использовать пространство имен IPC узла Руководство L1 Зависит от среды
5.2.5 Ограничение доступности контейнеров, пытающихся совместно использовать пространство имен сети узла Руководство L1 Зависит от среды
5.2.6 Ограничение доступности контейнеров с разрешением allowPrivilegeEscalation Руководство L1 Зависит от среды
5.2.7 Ограничение доступности корневых контейнеров Руководство L2 Зависит от среды
5.2.8 Ограничение доступности контейнеров с функцией NET_RAW Руководство L1 Зависит от среды
5.2.9 Ограничение доступности контейнеров с расширенными возможностями Руководство L1 Зависит от среды
5.2.10 Ограничение доступности контейнеров с назначенными возможностями Руководство L2 Зависит от среды
5.2.11 Свести к минимуму прием контейнеров Windows HostProcess Руководство L1 Зависит от среды
5.2.12 Свести к минимуму прием томов HostPath Руководство L1 Зависит от среды
5.2.13 Свести к минимуму доступ к контейнерам, использующим HostPorts Руководство L1 Зависит от среды
5,3 Сетевые политики и CNI
5.3.1 Убедитесь, что используемая CNI поддерживают сетевые политики. Руководство L1 Пройдено
5.3.2 Убедитесь, что для всех пространств имен определены сетевые политики. Руководство L2 Зависит от среды
5,4 Управление секретами
5.4.1 Используйте секреты в качестве файлов вместо секретов в качестве переменных среды Руководство L2 Зависит от среды
5.4.2 Рассмотрите возможность использования внешнего хранилища секретов Руководство L2 Зависит от среды
5.5 Расширяемый механизм управления допуском
5.5.1 Настройка проверки образов с помощью контроллера допуска ImagePolicyWebhook Руководство L2 Сбой
5,6 Общие политики
5.6.1 Создание административных границ между ресурсами с помощью пространств имен Руководство L1 Зависит от среды
5.6.2 Убедитесь, что в определениях pod для профиля profile задано значение docker или default. Руководство L2 Зависит от среды
5.6.3 Применение контекста безопасности для модулей pod и контейнеров Руководство L2 Зависит от среды
5.6.4 Не следует использовать пространство имен по умолчанию Руководство L2 Зависит от среды

Примечание.

Помимо эталонного тестирования Kubernetes CIS, также доступно эталонное тестирование AKS CIS.

Дополнительные примечания

  • Операционная система с усиленной безопасностью разработана специально для AKS и поддерживается там же. За пределами платформы AKS данная ОС не поддерживается.
  • Чтобы уменьшить область атаки, некоторые ненужные драйверы модулей ядра отключены в ОС.

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

Дополнительные сведения о безопасности AKS см. в следующих статьях: