Почему Kubernetes на rhel9 приводит к несогласованным FIPS-политикам в запущенном контейнере

Вопрос или проблема

Контейнер ubi9, построенный с включенным FIPS и криптополитикой FIPS:NO-ENFORCE-EMS (или любой другой), не пройдет проверку как fips-mode-setup --check, так и update-crypto-policy --check.

FROM redhat/ubi9:9.5

RUN fips-mode-setup --enable
# RUN fips-mode-setup --check      ЭТА ПРОВЕРКА ПРОВАЛИТСЯ, ЕСЛИ СОБРАНО НА НЕ-FIPS СИСТЕМЕ
RUN update-crypto-policies --set FIPS:NO-ENFORCE-EMS && update-crypto-policies
RUN update-crypto-policies --check

Теперь запустите это на RHEL9 с включенным FIPS и криптополитикой FIPS:NO-ENFORCE-EMS, и кластером Kubernetes, установленным с помощью kubespray, Kubernetes 1.31.1.

По всей видимости, реализация на RHEL9 предпринимает шаги для выражения политик хоста в контейнере. Запустите контейнер следующим образом:

$ kubectl run -it --rm '--restart=Never' ubi9fips-9-5 '--image=myrepohost.com/myrepo/ubi9fips:9.5' '--overrides={"spec": {"imagePullSecrets": [{"name": "my-pull-secret"}]}}' -- bash

[root@ubi9fips-9-5 /]# fips-mode-setup --check
Installation of FIPS modules is not completed.
FIPS mode is enabled.
Inconsistent state detected.
[root@ubi9fips-9-5 /]# cat /proc/sys/crypto-policies/fips_mode
1
[root@ubi9fips-9-5 /]# update-crypto-policies --check
The configured policy does NOT match the generated policy
[root@ubi9fips-9-5 /]# cat /etc/crypto-policies/config 
FIPS
[root@ubi9fips-9-5 /]# cat /etc/crypto-policies/state/current 
FIPS:NO-ENFORCE-EMS
[root@ubi9fips-9-5 /]# echo 'FIPS:NO-ENFORCE-EMS' > /etc/crypto-policies/config
[root@ubi9fips-9-5 /]# update-crypto-policies --check
The configured policy does NOT match the generated policy
[root@ubi9fips-9-5 /]# update-crypto-policies 
Setting system policy to FIPS:NO-ENFORCE-EMS
Note: System-wide crypto policies are applied on application start-up.
It is recommended to restart the system for the change of policies
to fully take place.
[root@ubi9fips-9-5 /]# update-crypto-policies --check
The configured policy matches the generated policy

Обратите внимание, что на системе RHEL9 с включенным FIPS и криптополитикой FIPS:NO-ENFORCE-EMS, построенное изображение должно быть согласовано. На системе RHEL9 что-то монтирует криптополитики и состояние FIPS (/etc/crypto-policies/config, /etc/crypto-policies/back-ends и /proc/sys) в контейнер, но таким образом, что процессы в userland могут неправильно понимать состояние FIPS и криптополитик.

Какие изменения необходимо внести, чтобы состояние FIPS корректно отображалось для приложений userland. Это все возникает, потому что Java-приложения, похоже, не предлагают EMS, И, похоже, терпят неудачу, когда EMS не согласуется (даже если узел хоста находится в состоянии FIPS:NO-ENFORCE-EMS). (См. https://stackoverflow.com/q/79465049/500902)

Ответ или решение

Вопрос о том, почему Kubernetes на RHEL9 приводит к неконсистентным FIPS-политикам в работающих контейнерах, требует детального изучения как теоретических аспектов, так и предоставленного примера.

Теория

FIPS (Federal Information Processing Standards) — это стандарты информационной безопасности, разработанные правительством США, которые определяют криптографические модули. Выполнение этих стандартов является обязательным для компьютерных систем, обрабатывающих конфиденциальную информацию. RHEL9 предлагает полную поддержку FIPS, и когда включен FIPS-режим, любые отклонения от него могут привести к неожиданному поведению приложений, что очевидно в приведённой вами ситуации с UBI9-контейнером.

Криптополитики, такие как FIPS:NO-ENFORCE-EMS, позволяют гибкость в настройке криптографической среды, обеспечивая повышенную безопасность без полного ограничения возможностей. Как показано в примере, несмотря на установку этих политик, возникает проблема с неконсистентностью между конфигурацией хоста и контейнера, что приводит к сбоям.

Пример

В предоставленном вами сценарии UBI9-контейнер строится на основе образа RHEL9 с включенным FIPS и установленной криптополитикой FIPS:NO-ENFORCE-EMS. Однако при использовании команды в Kubernetes контейнер оказывается в состоянии, где результаты проверок FIPS и криптополитик указывают на несоответствие между ожидаемой и фактической конфигурацией:

  1. После запуска fips-mode-setup --check система выявляет некорректную интеграцию с FIPS-модулями.
  2. Аналогично, update-crypto-policies --check указывает на несоответствие между текуще установленной и сгенерированной политикой.

Такая ситуация, скорее всего, связана с тем, что контейнер наследует FIPS-состояние и политики с хоста, но изоляция контейнера, характерная для Kubernetes, приводит к проблемам в пользовательских приложениях, которые неправильно интерпретируют эти настройки.

Применение

Для обеспечения корректного состояния FIPS и криптополитик в контейнерах, работающих на Kubernetes в среде RHEL9, необходимо предпринять следующие шаги:

  1. Явное Управление Политиками: Убедитесь, что криптополитики и FIPS-состояние правильно управляются в момент создания контейнера. Это значит, что нужно сознательно применять и проверять политики непосредственно в Dockerfile или через скрипты, запускаемые при старте контейнера.

  2. Изучение Механизма Наследования: Поскольку контейнеры могут наследовать состояние хоста (как в случае с /etc/crypto-policies/config и /proc/sys), целесообразно явно указывать необходимые маппинги для предотвращения конфликтов. Это может требовать использования ConfigMaps и других средств Kubernetes для управления конфигурацией.

  3. Тестирование и Отладка: Проводите тщательное тестирование и отладку, обеспечивая, что контейнеры запускаются со строго фиксированными политиками, которые соответствуют требованиям FIPS, не полагаясь на состояние хоста.

  4. Продвинутые Настройки Kubernetes: Используйте Kubernetes Secrets и другиe средства управления конфигурацией для безопасного и согласованного распределения необходимых учётных данных и политик по всем узлам и контейнерам.

  5. Понимание Ограничений Java: Если ваши приложения на Java не предлагают EMS, проанализируйте требования используемых библиотек и обновите их до версий, поддерживающих необходимые криптографические методы, в сети FIPS:NO-ENFORCE-EMS.

Таким образом, эффективное управление состоянием FIPS и криптополитиками в контейнерах Kubernetes на RHEL9 требует не только понимания наследуемых хостовых настроек, но и активных мер по обеспечению их согласованности на уровне контейнеров.

Оцените материал
Добавить комментарий

Капча загружается...