- KSPM Kubernetes® Security Posture Management
- Установлены строгие разрешения для файла службы Kubelet
- Владелец файла службы Kubelet указан как root:root
- Установлены строгие разрешения для файла конфигурации kubeconfig
- Владелец файла конфигурации kubeconfig указан как root:root
- Установлены строгие разрешения для файла конфигурации Kubelet
- Владелец файла конфигурации kubelet указан как root:root
- Отключены запросы от анонимных пользователей к серверу Kubelet
- Разрешены только явно авторизованные запросы к серверу Kubelet
- Включена аутентификация Kubelet с использованием сертификатов
- Kubelet разрешено управлять iptables
- Включена ротация клиентских сертификатов Kubelet
KSPM Kubernetes® Security Posture Management
Правила для проверки конфигурации кластеров Kubernetes.
Установлены строгие разрешения для файла службы Kubelet
|
kind |
severity |
ID |
|
HostSecurity |
Medium |
host-security.kubelet-service-file-perm-600 |
Описание
Файл службы kubelet управляет различными параметрами, которые определяют поведение службы kubelet на рабочем узле.
Вы должны ограничить разрешения на файл для поддержания целостности.
Файл должен быть доступен для записи только администраторам системы.
Рекомендации
Для выполнения аудита вручную:
Выполните приведенную ниже команду (в зависимости от расположения файла в вашей системе) на каждом рабочем узле.
Например:
stat -c %a /etc/systemd/system/kubelet.service.d/kubeadm.conf
Убедитесь, что разрешения равны значению 600 или более строгие.
Исправление:
Выполните приведенную ниже команду (в зависимости от расположения файла в вашей системе) на каждом рабочем узле.
Например:
chmod 600 /etc/systemd/system/kubelet.service.d/kubeadm.conf
Владелец файла службы Kubelet указан как root:root
|
kind |
severity |
ID |
|
HostSecurity |
Medium |
host-security.kubelet-service-file-owner-root |
Описание
Файл службы kubelet управляет различными параметрами, которые определяют поведение службы kubelet на рабочем узле.
Вы должны установить владельца файла для поддержания целостности.
Файл должен принадлежать владельцу, указанному как root:root.
Рекомендации
Для выполнения аудита вручную:
Выполните приведенную ниже команду (в зависимости от расположения файла в вашей системе) на каждом рабочем узле.
Например:
stat -c %U:%G /etc/systemd/system/kubelet.service.d/kubeadm.conf
Убедитесь, что владелец указан как root:root.
Исправление:
Выполните приведенную ниже команду (в зависимости от расположения файла в вашей системе) на каждом рабочем узле.
Например:
chown root:root /etc/systemd/system/kubelet.service.d/kubeadm.conf
Установлены строгие разрешения для файла конфигурации kubeconfig
|
kind |
severity |
ID |
|
HostSecurity |
Medium |
host-security.kubelet-conf-600 |
Описание
Файл kubelet.conf является файлом kubeconfig для узла. Файл управляет различными параметрами, которые определяют поведение и идентификацию рабочего узла.
Вы должны ограничить разрешения на файл для поддержания целостности.
Файл должен быть доступен для записи только администраторам системы.
Рекомендации
Для выполнения аудита вручную:
Выполните приведенную ниже команду (в зависимости от расположения файла в вашей системе) на каждом рабочем узле.
Например:
stat -c %a /etc/kubernetes/kubelet.conf
Убедитесь, что разрешения установлены в значение 600 или более строгие.
Исправление:
Выполните приведенную ниже команду (в зависимости от расположения файла в вашей системе) на каждом рабочем узле.
Например:
chmod 600 /etc/kubernetes/kubelet.conf
Владелец файла конфигурации kubeconfig указан как root:root
|
kind |
severity |
ID |
|
HostSecurity |
Medium |
host-security.kubelet-conf-owner-root |
Описание
Файл kubelet.conf является файлом kubeconfig для узла. Файл управляет различными параметрами, которые определяют поведение и идентификацию рабочего узла.
Вы должны установить владельца файла для поддержания целостности.
Файл должен принадлежать владельцу, указанному как root:root.
Рекомендации
Для выполнения аудита вручную:
Выполните приведенную ниже команду (в зависимости от расположения файла в вашей системе) на каждом рабочем узле.
Например:
stat -c %U:%G /etc/kubernetes/kubelet.conf
Убедитесь, что владелец указан как root:root.
Исправление:
Выполните приведенную ниже команду (в зависимости от расположения файла в вашей системе) на каждом рабочем узле.
Например:
chown root:root /etc/kubernetes/kubelet.conf
Установлены строгие разрешения для файла конфигурации Kubelet
|
kind |
severity |
ID |
|
HostSecurity |
Medium |
host-security.kubelet-config-permissions-600 |
Описание
Если kubelet ссылается на файл конфигурации с аргументом --config, убедитесь, что этот файл имеет разрешения со значением 600 или более строгие.
Kubelet считывает различные параметры, включая настройки безопасности, из файла конфигурации, указанного аргументом --config.
Если этот файл указан, вы должны ограничить его разрешения для поддержания целостности файла.
Файл должен быть доступен для записи только администраторам системы.
Рекомендации
Для выполнения аудита вручную:
Выполните приведенную ниже команду (в зависимости от расположения файла в вашей системе) на каждом рабочем узле.
Например:
stat -c %a /var/lib/kubelet/config.yaml
Убедитесь, что разрешения равны значению 600 или более строгие.
Исправление:
Выполните следующую команду (используя расположение файла конфигурации, определенное на этапе аудита):
chmod 600 /var/lib/kubelet/config.yaml
Владелец файла конфигурации kubelet указан как root:root
|
kind |
severity |
ID |
|
HostSecurity |
Medium |
host-security.kubelet-config-owner-root |
Описание
Если kubelet ссылается на файл конфигурации с аргументом --config, убедитесь, что этот файл принадлежит root:root.
Kubelet считывает различные параметры, включая настройки безопасности, из файла конфигурации, указанного аргументом --config.
Если этот файл указан, вы должны ограничить его разрешения для поддержания целостности файла.
Файл должен принадлежать владельцу, указанному как root:root.
Рекомендации
Для выполнения аудита вручную:
Выполните приведенную ниже команду (в зависимости от расположения файла в вашей системе) на каждом рабочем узле.
Например:
stat -c %U:%G /var/lib/kubelet/config.yaml
Убедитесь, что владелец указан как root:root.
Исправление:
Выполните следующую команду (используя расположение файла конфигурации, определенное на этапе аудита):
chown root:root /etc/kubernetes/kubelet.conf
Отключены запросы от анонимных пользователей к серверу Kubelet
|
kind |
severity |
ID |
|
HostSecurity |
Medium |
host-security.anonymous-auth-false |
Описание
Отключите анонимные запросы к серверу Kubelet.
Когда включено, запросы, которые не отклонены другими настроенными методами аутентификации, обрабатываются как анонимные запросы.
Эти запросы затем обслуживаются сервером Kubelet.
Вы должны полагаться на аутентификацию для авторизации доступа и запретить анонимные запросы.
Рекомендации
Для проведения аудита вручную:
Если используется файл конфигурации Kubelet, проверьте, что есть запись для authentication: anonymous: enabled, установленная в false.
Выполните следующую команду на каждом узле:
ps -ef | grep kubelet
Убедитесь, что аргумент --anonymous-auth установлен в значение false.
Этот аргумент исполняемого файла может быть опущен при условии, что есть соответствующая запись, установленная в значение false в файле конфигурации Kubelet.
Исправление:
Если используется файл конфигурации Kubelet, отредактируйте файл, чтобы установить authentication: anonymous: enabled в значение false.
Если используются аргументы исполняемого файла, отредактируйте файл службы kubelet /etc/kubernetes/kubelet.conf на каждом рабочем узле и установите приведенный ниже параметр в переменной KUBELET_SYSTEM_PODS_ARGS:
--anonymous-auth=false
В зависимости от вашей системы перезапустите службу kubelet.
Например:
systemctl daemon-reload
systemctl restart kubelet.service
Разрешены только явно авторизованные запросы к серверу Kubelet
|
kind |
severity |
ID |
|
HostSecurity |
Medium |
host-security.auth-mode-not-always-allow |
Описание
Не разрешайте все запросы. Включите явную авторизацию.
Агенты Kubelet по умолчанию разрешают все аутентифицированные запросы (даже анонимные) без необходимости явных проверок авторизации с сервера apiserver.
Вы должны ограничить это поведение и разрешить только явно авторизованные запросы.
Рекомендации
Для проведения аудита вручную:
Выполните следующую команду на каждом узле:
ps -ef | grep kubelet
Если аргумент --authorization-mode существует, убедитесь, что он не установлен в AlwaysAllow.
Если он отсутствует, убедитесь, что есть файл конфигурации Kubelet, указанный параметром --config, и этот файл устанавливает authorization: mode в значение, отличающееся от AlwaysAllow.
Также можно просмотреть текущую конфигурацию Kubelet через конечную точку /configz на порту API Kubelet (обычно 10250/TCP).
Доступ к ним с соответствующими учетными данными предоставит детали конфигурации Kubelet.
Исправление:
Если используется файл конфигурации Kubelet, отредактируйте файл, чтобы установить authorization: mode в Webhook.
Если используются аргументы исполняемого файла, отредактируйте файл службы kubelet /etc/kubernetes/kubelet.conf на каждом рабочем узле и установите приведенный ниже параметр в переменной KUBELET_AUTHZ_ARGS:
--authorization-mode=Webhook
В зависимости от вашей системы, перезапустите службу kubelet.
Например:
systemctl daemon-reload
systemctl restart kubelet.service
Включена аутентификация Kubelet с использованием сертификатов
|
kind |
severity |
ID |
|
HostSecurity |
Medium |
host-security.client-ca-file-set |
Описание
Включите аутентификацию Kubelet с использованием сертификатов.
Соединения от apiserver к kubelet используются для получения логов для подов, подключения (через kubectl) к запущенным подам и использования функциональности перенаправления портов kubelet.
Эти соединения завершаются на конечной точке HTTPS kubelet.
По умолчанию apiserver не проверяет сертификат обслуживания kubelet, что делает соединение уязвимым для атак типа «человек посередине» и небезопасным для работы через ненадежные и/или публичные сети.
Включение аутентификации сертификатов Kubelet гарантирует, что apiserver может аутентифицировать Kubelet перед отправкой любых запросов.
Рекомендации
Для проведения аудита вручную:
Выполните следующую команду на каждом узле:
ps -ef | grep kubelet
Убедитесь, что аргумент --client-ca-file существует и установлен в расположение файла центра сертификации клиента.
Если аргумент --client-ca-file отсутствует, проверьте, что есть файл конфигурации Kubelet, указанный параметром --config, и что файл устанавливает authentication: x509: clientCAFile в расположение файла центра сертификации клиента.
Исправление:
Если используется файл конфигурации Kubelet, отредактируйте файл, чтобы установить authentication: x509: clientCAFile в расположение файла CA клиента.
Если используются аргументы командной строки, отредактируйте файл службы kubelet /etc/kubernetes/kubelet.conf на каждом рабочем узле и установите приведенный ниже параметр в переменной KUBELET_AUTHZ_ARGS:
--client-ca-file=<path/to/client-ca-file>
В зависимости от вашей системы, перезапустите службу kubelet.
Например:
systemctl daemon-reload
systemctl restart kubelet.service
Kubelet разрешено управлять iptables
|
kind |
severity |
ID |
|
HostSecurity |
Medium |
host-security.make-iptables-util-chains-true |
Описание
Разрешите Kubelet управлять iptables.
Kubelet может автоматически управлять необходимыми изменениями в iptables в зависимости от того, как вы выбираете сетевые параметры для подов.
Рекомендуется разрешить kubelet управлять изменениями в iptables.
Это гарантирует, что конфигурация iptables остается синхронизированной с конфигурацией сети подов.
Ручная настройка iptables с динамическими изменениями конфигурации сети подов может помешать связи между подами/контейнерами и внешним миром.
Ваши правила iptables могут быть слишком ограничительными или слишком открытыми.
Рекомендации
Для проведения аудита вручную:
Выполните следующую команду на каждом узле:
ps -ef | grep kubelet
Если аргумент --make-iptables-util-chains существует, убедитесь, что он установлен в значение true.
Если аргумент --make-iptables-util-chains не существует и есть файл конфигурации Kubelet, указанный параметром --config, убедитесь, что файл не устанавливает makeIPTablesUtilChains в значение false.
Исправление:
Если используется файл конфигурации Kubelet, отредактируйте файл, чтобы установить makeIPTablesUtilChains: true.
Если используются аргументы командной строки, отредактируйте файл службы kubelet /etc/kubernetes/kubelet.conf на каждом рабочем узле и удалите аргумент --make-iptables-util-chains из переменной KUBELET_SYSTEM_PODS_ARGS.
В зависимости от вашей системы перезапустите службу kubelet.
Например:
systemctl daemon-reload
systemctl restart kubelet.service
Включена ротация клиентских сертификатов Kubelet
|
kind |
severity |
ID |
|
HostSecurity |
Medium |
host-security.rotate-certs-not-false |
Описание
Включите ротацию клиентских сертификатов kubelet.
Параметр --rotate-certificates запускает ротацию клиентских сертификатов kubelet, создавая новые CSR по мере истечения срока действия существующих учетных данных.
Эта автоматическая периодическая ротация гарантирует отсутствие простоев из-за просроченных сертификатов и, таким образом, решает проблему доступности в триаде безопасности CIA.
Примечание: Эта рекомендация применяется только в том случае, если вы разрешаете kubelet получать сертификаты с сервера API.
Если сертификаты kubelet поступают от внешнего инструмента (например, Vault), вам необходимо настроить ротацию самостоятельно.
Примечание: Эта функция также требует, чтобы шлюз RotateKubeletClientCertificate был включен (включен по умолчанию начиная с Kubernetes v1.7)
Рекомендации
Для проведения аудита вручную:
Выполните следующую команду на каждом узле:
ps -ef | grep kubelet
Убедитесь, что аргумент RotateKubeletServerCertificate отсутствует или установлен в значение true.
Если аргумент RotateKubeletServerCertificate отсутствует, убедитесь, что есть файл конфигурации Kubelet, указанный параметром --config, и этот файл не содержит RotateKubeletServerCertificate: false.
Исправление:
Если используется файл конфигурации Kubelet, отредактируйте файл, чтобы добавить строку rotateCertificates: true или удалите ее полностью, чтобы использовать значение по умолчанию.
Если используются аргументы командной строки, отредактируйте файл службы kubelet /etc/kubernetes/kubelet.conf на каждом рабочем узле и удалите аргумент --rotate-certificates=false из переменной KUBELET_CERTIFICATE_ARGS или установите --rotate-certificates=true.
В зависимости от вашей системы перезапустите службу kubelet.
Например:
systemctl daemon-reload
systemctl restart kubelet.service