MIT Kerberos
Kerberos — сетевой протокол аутентификации, который обеспечивает механизм взаимной аутентификации клиента и сервера перед установлением связи между ними.
SASL — фреймворк для аутентификации и безопасности данных, используемый в интернет-протоколах.
Основные понятия, используемые в Kerberos:
-
Принципал (principal) — уникальное имя для клиента, которому разрешается аутентификация в Kerberos.
-
Тикет (ticket) — временные данные, выдаваемые клиенту для аутентификации на сервере, на котором располагается необходимый сервис.
-
Область (realm) — сеть, используемая Kerberos, состоящая из серверов KDC и множества клиентов.
-
Key Distribution Center (KDC) — сервис, выдающий тикеты Kerberos.
Настройка Key Distribution Center
ПРИМЕЧАНИЕ
|
Для установки Key Distribution Center на выбранном хосте выполните команду:
$ sudo yum install -y krb5-server
В результате выводится сообщение:
Complete!
Настройка файлов конфигурации
ПРИМЕЧАНИЕ
|
-
Необходимо настроить конфигурационный файл kdc.conf. В нем отображается имя области, в которой проводится аутентификация, и пути к файлам конфигурации.
Введите команду для открытия файла:
$ sudo vim /var/kerberos/krb5kdc/kdc.conf
Отредактируйте открывшийся файл следущим образом:
[kdcdefaults] kdc_ports = 88 kdc_tcp_ports = 88 default_realm = ADS-KAFKA.LOCAL [realms] ADS-KAFKA.LOCAL = { acl_file = /var/kerberos/krb5kdc/kadm5.acl dict_file = /usr/share/dict/words admin_keytab = /var/kerberos/krb5kdc/kadm5.keytab supported_enctypes = aes256-cts:normal aes128-cts:normal des3-hmac-sha1:normal arcfour-hmac:normal camellia256-cts:normal camellia128-cts:normal des-hmac-sha1:normal des-cbc-md5:normal des-cbc-crc:normal }
В данном файле заполняются разделы, описанные ниже:
[kdcdefaults]
В разделе указываются значения по умолчанию для тегов, которые будут использоваться, если раздел[realms]
не содержит значения для этого тега.Тег Описание тега kdc_ports
UDP-порт для подключения к KDC
kdc_tcp_ports
TCP-порт для подключения к KDC
default_realm
Область, назначенная пользователем для проведения аутентификации
[realms]
Каждый подраздел в разделе — имя области Kerberos. Значение тегов подраздела определяют параметры KDC для этой конкретной области.Тег Описание тега acl_file
Расположение файла списка управления доступом, который kadmind использует для определения того, каким принципалам какие разрешения даны в базе данных Kerberos
admin_keytab
Расположение файла keytab, который службы администрирования kadmind4 и v5passwdd используют для аутентификации в базе данных
dict_file
Расположение файла словаря, содержащего строки, которые нельзя использовать в качестве паролей. Файл должен содержать по одной строке на строку без дополнительных пробелов. Если ничего не указано или если принципалу не назначена политика, проверки паролей по словарю выполняться не будут
supported_enctypes
Определяет комбинации типов шифрования ключей/солей по умолчанию для принципалов для этой области. Все участники, созданные с помощью kadmin, будут иметь ключи этих типов
ПРИМЕЧАНИЕПолное описание значений тегов для данного файла приведено по ссылке kdc.conf. -
Далее необходимо отредактировать файл kadm5.acl для предоставления административного доступа к домену Kerberos.
Введите команду для открытия файла:
$ sudo vim /var/kerberos/krb5kdc/kadm5.acl
Отредактируйте открывшийся файл следущим образом:
*/admin@ADS-KAFKA.LOCAL *
В примере, приведенном выше, настроено так, что любой принципал
/admin
в областиADS-KAFKA.LOCAL
имеет все административные привилегии, кроме извлечения ключей.ПРИМЕЧАНИЕПолное описание значений тегов для разделов данного файла приведено по ссылке kadm5_acl. -
Далее необходимо отредактировать файл конфигурации домена Kerberos krb5.conf.
Введите команду для открытия файла:
$ sudo vim /etc/krb5.conf
Отредактируйте открывшийся файл следущим образом:
[logging] default = FILE:/var/log/krb5libs.log kdc = FILE:/var/log/krb5kdc.log admin_server = FILE:/var/log/kadmind.log [libdefaults] default_realm = ADS-KAFKA.LOCAL kdc_timesync = 1 ticket_lifetime = 24h [realms] ADS-KAFKA.LOCAL = { admin_server = sov-test-5.ru-central1.internal kdc = sov-test-5.ru-central1.internal }
В данном файле заполняются разделы, описанные ниже:
[logging]
Раздел указывает, как ведутся журналы.Тег Описание тега default
Путь к файлу, где находится журнал при отсутствии других явных указаний
kdc
Путь к файлу, где находится журнал для KDC
admin_server
Путь к файлу, где находится журнал для административного сервера
[libdefaults]
В разделе описываются параметры, используемые библиотекой Kerberos V5.Тег Описание тега default_realm
Идентифицирует область Kerberos по умолчанию для клиента. Если это значение не задано, то при вызове таких программ, как kinit, необходимо указать область для каждого принципала Kerberos
kdc_timesync
Допустимые значения для этого отношения:
1
или0
. Если оно не равно нулю, клиентские машины будут вычислять разницу между своим временем и временем, возвращенным KDC в отметках времени в тикетах, и использовать это значение для исправления неточных системных часов при запросеticket_lifetime
Устанавливает время жизни по умолчанию для первоначальных запросов тикетов
[realms]
Каждый подраздел в разделе — имя области Kerberos. Значение тегов подраздела определяют параметры для этой конкретной области.Тег Описание тега ADS-KAFKA.LOCAL
Область, назначенная пользователем для проведения аутентификации
admin_server
Идентифицирует хост, на котором работает сервер администрирования. Как правило, это главный сервер Kerberos. Этому тегу должно быть присвоено значение для связи с сервером kadmind для данной области
kdc
Имя или адрес хоста, на котором запущен KDC для этой области. Может быть включен необязательный номер порта, отделенный от имени хоста двоеточием
ПРИМЕЧАНИЕПолное описание значений тегов для областей данного файла приведено по ссылке krb5_conf. -
Создайте базу данных принципалов Kerberos для домена области
ADS-KAFKA.LOCAL
при помощи утилиты kdb5_util.Введите команду:
$ sudo /usr/sbin/kdb5_util create -s -r ADS-KAFKA.LOCAL -P P@ssw0rd
В результате выводится сообщение о созданной базе данных для области
ADS-KAFKA.LOCAL
:Loading random data Initializing database '/var/kerberos/krb5kdc/principal' for realm 'ADS-KAFKA.LOCAL', master key name 'K/M@ADS-KAFKA.LOCAL'
ПРИМЕЧАНИЕПолное описание функций утилиты kdb5_util и применяемых опций приведены по ссылке kdb5_util. -
Создайте пользователя
admin
при помощи интерфейса командной строки kadmin.local.Введите команду:
$ sudo kadmin.local -q "add_principal -pw P@ssw0rd admin/admin"
В результате выводится сообщение:
Principal "admin/admin@ADS-KAFKA.LOCAL" created.
ПРИМЕЧАНИЕПолное описание функций интерфейса командной строки kadmin_local и применяемых опций приведены по ссылке kadmin_local. -
Рестартуйте сервисы Kerberos и KDC.
Поочередно введите команды:
$ sudo systemctl restart krb5kdc $ sudo systemctl restart kadmin
Проверьте статус запущенных сервисов, выполнив команды:
$ sudo systemctl status krb5kdc $ sudo systemctl status kadmin
Настройка пользовательского jaas.conf
Перед запуском Manage Kerberos может быть выполнена настройка пользовательского файла jaas.conf для указания пользовательских данных подключения клиентов других сервисов к текущему сервису (пути к keytab-файлам, параметр useTicketCache
и другие).
В таблице ниже приведен список сервисов, для которых доступна настройка пользовательского файла jaas.conf, и пути хранения файла для каждого сервиса.
Сервис | Путь к jaas.conf |
---|---|
Kafka |
/etc/kafka/conf/kafka-jaas.conf |
Kafka Connect |
/etc/kafka-connect/jaas_config.conf |
Kafka REST Proxy |
/etc/kafka-rest/jaas_config.conf |
Schema-Registry |
/etc/schema-registry/jaas_config.conf |
ksqlDB |
/etc/ksqldb/jaas_config.conf |
Kafka REST Proxy |
/etc/kafka-rest/jaas_config.conf |
NiFi |
/etc/nifi/conf/nifi-jaas.conf |
Настройка пользовательского файла jaas.conf выполняется при помощи специального шаблона JAAS template на странице конфигурационных параметров сервиса. Настройка может быть выполнена как для отдельного сервиса, так и для группы хостов, на которых установлен сервис.
Для настройки jaas.conf:
-
Переведите в активное состояние переключатель Show advanced.
-
Откройте шаблон, внесите изменения и сохраните, нажав Apply.
Для настройки пользовательских данных при включении аутентификации по протоколу Kerberos заполняются только те блоки шаблона JAAS template, в которых описана конфигурация для модуля Krb5LoginModule.
Ниже приведен пример шаблона JAAS-файла для сервиса Kafka и краткое описание заполняемых блоков.
JAAS-файл для Kafka{% if cluster.config.kerberos_client and cluster.config.kerberos_client.enable_kerberos %} Client { com.sun.security.auth.module.Krb5LoginModule required useKeyTab=true storeKey=true useTicketCache=false keyTab="{{ cluster.config.kerberos_client.keytab_dir }}/kafka.service.keytab" principal="kafka/{{ ansible_fqdn }}@{{ cluster.config.kerberos_client.realm }}"; }; KafkaClient { com.sun.security.auth.module.Krb5LoginModule required useKeyTab=true storeKey=true useTicketCache=false keyTab="{{ cluster.config.kerberos_client.keytab_dir }}/kafka.service.keytab" principal="kafka/{{ ansible_fqdn }}@{{ cluster.config.kerberos_client.realm }}"; }; KafkaServer { com.sun.security.auth.module.Krb5LoginModule required useKeyTab=true storeKey=true useTicketCache=false serviceName="kafka" keyTab="{{ cluster.config.kerberos_client.keytab_dir }}/kafka.service.keytab" principal="kafka/{{ ansible_fqdn }}@{{ cluster.config.kerberos_client.realm }}"; }; {%- elif cluster.config.sasl_plain_auth_default_config is not none %} {%- set credential = cluster.config.sasl_plain_auth_default_config.sasl_plain_users_data %} KafkaServer { org.apache.kafka.common.security.plain.PlainLoginModule required username="kafka" password="{{ credential['kafka'] }}" {% for user, password in credential.items() %} user_{{ user }}="{{ password }}"{% if loop.index != loop | length %} {% endif %} {% endfor %}; }; {% endif %}
-
Client
— описаны параметры конфигурации для подключения к брокерам Kafka других сервисов (например, Zookeeper). -
KafkaClient
— описаны параметры конфигурации для подключения к брокерам Kafka внешних приложений: производителей (producer) и потребителей (consumer). -
KafkaServer
— описаны параметры конфигурации для связи между брокерами Kafka.
-
-
Сохраните конфигурацию, нажав Save.
Настройка JAAS template -
Перезагрузите сервисы, для которых был настроен jaas.conf. Для этого примените действие Restart, нажав на иконку
в столбце Actions.
ПРИМЕЧАНИЕ
В случае, когда перед включением Manage Kerberos шаблон JAAS template не изменен, после включения керберизации на хостах для каждого сервиса по умолчанию создаются файлы jaas.conf, содержащие данные, приведенные в шаблоне.
|
Запуск MIT Kerberos KDC на кластере ADS в интерфейсе ADCM
-
Инициируйте включение Kerberos для выбранного кластера. Для этого примените действие Manage Kerberos, нажав на иконку
в столбце Actions.
Включение Kerberos в кластере ADS -
Включите переключатель Existing MIT KDC в открывшемся окне.
Включение Existing MIT KDCПРИМЕЧАНИЕВключение Existing MIT KDC можно совместить c опцией Custom kerberization settings. -
Переведите в активное состояние переключатель Show advanced.
-
Установите конфигурационные параметры кластера ADS для MIT Kerberos KDC в соответствии с ранее введенными значениями и нажмите Run.
Настройка конфигурации кластера ADS для MIT Kerberos KDC -
Подтвердите действие в открывшемся окне.
Подтверждение действия -
Дождитесь завершения включения Kerberos. Проанализируйте и исправьте ошибки в случае их возникновения.
Процесс запуска Kerberos
ПРИМЕЧАНИЕ
Аутентификация по протоколу Kerberos после запуска Manage Kerberos в сервисе Kafka осуществляется в соответствии со статьей Использование MIT Kerberos в Kafka.
|