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