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

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

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

Ниже приведены результаты рекомендаций CIS Kubernetes версии 1.24 Benchmark версии 1.0.0 для AKS. Они применимы к AKS с 1.21.x по AKS 1.24.x.

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

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

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

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

  • Пройдено — рекомендация была применена.
  • Не пройдено — рекомендация не была применена.
  • Н/Д: рекомендация связана с требованиями к разрешениям файла манифеста, которые не относятся к AKS. Кластеры Kubernetes по умолчанию используют модель манифеста для развертывания модулей pod уровня управления, которые работают на основе файлов с виртуальной машины узла. В рамках эталонного тестирования CIS Kubernetesе рекомендуется устанавливать для этих файлов определенные требования к разрешениям. Кластеры AKS используют диаграмму Helm для развертывания модулей pod уровня управления и не используют файлы на виртуальной машине узла.
  • Зависит от среды — рекомендация применяется в конкретной среде пользователя и не контролируется системой AKS. Рекомендации с оценкой влияют на оценку эталонного тестирования независимо от того, относится ли данная рекомендация к среде конкретного пользователя.
  • Эквивалентный механизм контроля — рекомендация реализована в другом эквивалентном виде.
Идентификатор CIS Описание рекомендации Тип оценки Level Состояние
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 Убедитесь, что для файла спецификации pod etcd заданы разрешения 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-файлов 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.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,2 Политики безопасности pod
5.2.1 Ограничение доступности привилегированных контейнеров Без оценки L1 Зависит от среды
5.2.2 Ограничение доступности контейнеров, пытающихся совместно использовать пространство имен идентификаторов процесса узла С оценкой L1 Зависит от среды
5.2.3 Ограничение доступности контейнеров, пытающихся совместно использовать пространство имен IPC узла С оценкой L1 Зависит от среды
5.2.4 Ограничение доступности контейнеров, пытающихся совместно использовать пространство имен сети узла С оценкой L1 Зависит от среды
5.2.5 Ограничение доступности контейнеров с разрешением allowPrivilegeEscalation С оценкой L1 Зависит от среды
5.2.6 Ограничение доступности корневых контейнеров Без оценки L2 Зависит от среды
5.2.7 Ограничение доступности контейнеров с функцией NET_RAW Без оценки L1 Зависит от среды
5.2.8 Ограничение доступности контейнеров с расширенными возможностями Без оценки L1 Зависит от среды
5.2.9 Ограничение доступности контейнеров с назначенными возможностями Без оценки L2 Зависит от среды
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.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 см. в следующих статьях: