Можете ли вы создать принципалы Kerberos, где имя хоста является гибким? (Докер)
Я специально пытаюсь сделать это с помощью Apache Storm (1.0.2), но это относится к любому сервису, защищенному с помощью Kerberos. Я пытаюсь запустить защищенный кластер Storm в Docker. Существует множество готовых образов Docker для Storm, и они прекрасно работают без защиты. Я использую https://github.com/Baqend/docker-storm. У меня также есть безопасный запуск Storm на виртуальных машинах RHEL.
Однако я понимаю, что Kerberos связывает имена хостов с принципалами, поэтому, если я делаю сервис foobar доступным для клиентов, мне нужно создать принципал foobar/hostname@REALM
, Тогда клиентская служба может подключиться к hostname
с основной foobar
Керберос будет искать foobar/hostname@REALM
в его базе данных найдите, что он там (потому что мы создали принципала с точно таким именем), и все будет работать.
В моем случае это описано здесь: https://docs.hortonworks.com/HDPDocuments/HDP2/HDP-2.3.0/bk_installing_manually_book/content/configure_kerberos_for_storm.html. Нимб аутентифицируется как storm/<nimbus host>@REALM
и супервизоры и внешние клиенты аутентифицируются как storm/REALM
, Все работает.
Но вот в 2017 году у нас есть контейнеры и имена хостов уже не статичны. Итак, как бы я Kerberize сервис, который работает в центре обработки данных Docker (или Kubernetes, и т. Д.)? Я должен прикрепить неизвестное имя хоста для проверки подлинности сервера. Я полагаю, что мог бы создать принципал для всех возможных имен хостов и динамически выбрать правильный при запуске в зависимости от того, где находится контейнер, но это глупо.
Я неправильно понимаю, как работает Kerberos? Есть ли здесь решение, которого я не вижу? Я вижу в Интернете несколько примеров людей, которые запускают Storm в Docker, но я не могу себе представить, что ни у кого нет безопасности кластеров.
1 ответ
Я не знаю Apache Storm или Docker, но основываясь на предыдущих работах с JBOSS в кластере, в котором входящий клиент мог подключаться к любому из возможного числа различных хостов, вы просто назначали бы виртуальное имя для всего Пул на балансировщик нагрузки и Kerberize службы в соответствии с виртуальным именем вместо отдельного имени хоста на уровне хоста. Поэтому, если вы делаете foobar службы доступным для клиентов, вам нужно создать субъект- службу (SPN) foobar/virtualhostname@REALM в вашем каталоге, чтобы керберизовать службу. Это имя SPN назначается учетной записи пользователя (не учетной записи компьютера), чтобы обеспечить гибкость работы с любой службой Kerberized, которая использует это имя SPN. Если вы используете Active Directory, вы должны создать таблицу ключей с именем участника-службы внутри нее и разместить таблицу ключей на каждом хосте, на котором выполняется экземпляр службы Kerberized foobar/virtualhostname@REALM.