Эталонное тестирование Центра безопасности в Интернете 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.8.0 по AKS. Результаты применимы к AKS 1.21.x до AKS 1.27.x.

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

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

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

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

  • Пройдено — рекомендация была применена.
  • Сбой . Рекомендация не была применена.
  • Н/Д: рекомендация связана с требованиями к разрешениям файла манифеста, которые не относятся к 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 Убедитесь, что подключаемый модуль управления допуском SecurityContextDeny установлен, если PodSecurityPolicy не используется. Без оценки L1 Сбой
1.2.13 Убедитесь, что подключаемый модуль управления допуском ServiceAccount установлен. С оценкой L1 Пройдено
1.2.14 Убедитесь, что подключаемый модуль управления допуском NamespaceLifecycle установлен. С оценкой L1 Пройдено
1.2.15 Убедитесь, что подключаемый модуль управления допуском NodeRestriction установлен. С оценкой L1 Пройдено
1.2.16 Убедитесь, что для аргумента --secure-port не задано значение 0. С оценкой L1 Пройдено
1.2.17 Убедитесь, что для аргумента --profiling задано значение false. С оценкой L1 Пройдено
1.2.18 Убедитесь, что аргумент --audit-log-path задан. С оценкой L1 Эквивалентный механизм контроля
1.2.19 Убедитесь, что для аргумента --audit-log-maxage задано значение 30 или другое соответствующее значение. С оценкой L1 Эквивалентный механизм контроля
1.2.20 Убедитесь, что для аргумента --audit-log-maxbackup задано значение 10 или другое соответствующее значение. С оценкой L1 Пройдено
1.2.21 Убедитесь, что для аргумента --audit-log-maxsize задано значение 100 или другое соответствующее значение. С оценкой L1 Пройдено
1.2.22 Убедитесь, что аргумент --request-timeout задан соответствующим образом. С оценкой L1 Пройдено
1.2.23 Убедитесь, что для аргумента --service-account-lookup задано значение true. С оценкой L1 Пройдено
1.2.24 Убедитесь, что аргумент --service-account-key-file задан соответствующим образом. С оценкой L1 Пройдено
1.2.25 Убедитесь, что аргументы --etcd-certfile и --etcd-keyfile заданы соответствующим образом. С оценкой L1 Пройдено
1.2.26 Убедитесь, что аргументы --tls-cert-file и --tls-private-key-file заданы соответствующим образом. С оценкой L1 Пройдено
1.2.27 Убедитесь, что аргумент --client-ca-file задан соответствующим образом. С оценкой L1 Пройдено
1.2.28 Убедитесь, что аргумент --etcd-cafile задан соответствующим образом. С оценкой L1 Зависит от среды
1.2.29 Убедитесь, что аргумент --encryption-provider-config задан соответствующим образом. С оценкой L1 Зависит от среды
1.2.30 Убедитесь, что поставщики шифрования настроены соответствующим образом. С оценкой L1 Зависит от среды
1.2.31 Убедитесь, что сервер 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 Для пользователей не следует использовать проверку подлинности с использованием сертификата клиента Без оценки L2 Пройдено
3.1.2 Проверка подлинности маркера учетной записи службы не должна использоваться для пользователей Без оценки L2 Пройдено
3.1.3 Проверка подлинности маркера начальной загрузки не должна использоваться для пользователей Без оценки L2 Пройдено
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 Убедитесь, что для аргумента --protect-kernel-defaults задано значение true. С оценкой L1 Пройдено
4.2.7 Убедитесь, что для аргумента --make-iptables-util-chains задано значение true. С оценкой L1 Пройдено
4.2.8 Убедитесь, что аргумент --hostname-override не задан. Без оценки L1 Пройдено
4.2.9 Убедитесь, что аргумент eventRecordQPS установлен на уровне, который обеспечивает соответствующую запись событий. Без оценки L2 Пройдено
4.2.10 Убедитесь, что аргументы --tls-cert-file и --tls-private-key-file заданы соответствующим образом. С оценкой L1 Пройдено
4.2.11 Убедитесь, что для аргумента --rotate-certificates не задано значение false. С оценкой L1 Пройдено
4.2.12 Убедитесь, что для аргумента RotateKubeletServerCertificate задано значение true. С оценкой L1 Пройдено
4.2.13 Убедитесь, что Kubelet использует только надежные криптографические шифры. Без оценки 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.6 Ограничение доступности корневых контейнеров Без оценки L2 Зависит от среды
5.2.7 Ограничение доступности контейнеров с функцией NET_RAW Без оценки L1 Зависит от среды
5.2.8 Ограничение доступности контейнеров с расширенными возможностями Без оценки 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 Используйте секреты в качестве файлов вместо секретов в качестве переменных среды Без оценки L1 Зависит от среды
5.4.2 Рассмотрите возможность использования внешнего хранилища секретов Без оценки L2 Зависит от среды
5.5 Расширяемый механизм управления допуском
5.5.1 Настройка проверки образов с помощью контроллера допуска ImagePolicyWebhook Без оценки L2 Сбой
5.7 Общие политики
5.7.1 Создание административных границ между ресурсами с помощью пространств имен Без оценки L1 Зависит от среды
5.7.2 Убедитесь, что в определениях pod для профиля profile задано значение docker или default. Без оценки L2 Зависит от среды
5.7.3 Применение контекста безопасности для модулей pod и контейнеров Без оценки L2 Зависит от среды
5.7.4 Не следует использовать пространство имен по умолчанию С оценкой L2 Зависит от среды

Примечание.

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

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

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

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

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