Эталонное тестирование Центра безопасности в Интернете 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 см. в следующих статьях: