MIT Kerberos

Kerberos — сетевой протокол аутентификации, который обеспечивает механизм взаимной аутентификации клиента и сервера перед установлением связи между ними.

SASL — фреймворк для аутентификации и безопасности данных, используемый в интернет-протоколах.

Основные понятия, используемые в Kerberos:

  • Принципал (principal) — уникальное имя для клиента, которому разрешается аутентификация в Kerberos.

  • Тикет (ticket) — временные данные, выдаваемые клиенту для аутентификации на сервере, на котором располагается необходимый сервис.

  • Область (realm) — сеть, используемая Kerberos, состоящая из серверов KDC и множества клиентов.

  • Key Distribution Center (KDC) — сервис, выдающий тикеты Kerberos.

Настройка Key Distribution Center

ПРИМЕЧАНИЕ
  • Key Distribution Center может быть установлен на любом хосте, который имеет доступ к хосту с установленным ADCM (возможность подключения по FQDN).

  • Key Distribution Center допускается также установить на одном хосте с ADCM.

Для установки Key Distribution Center на выбранном хосте выполните команду:

$ sudo yum install -y krb5-server

В результате выводится сообщение:

Complete!

Настройка файлов конфигурации

ПРИМЕЧАНИЕ
  • Примеры команд для работы с конфигурационными файлами приведены с использованием текстового редактора vim, который необходимо предустановить на данный хост.

  • Возможно использование других текстовых редакторов.

  1. Необходимо настроить конфигурационный файл 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.
  2. Далее необходимо отредактировать файл kadm5.acl для предоставления административного доступа к домену Kerberos.

    Введите команду для открытия файла:

    $ sudo vim /var/kerberos/krb5kdc/kadm5.acl

    Отредактируйте открывшийся файл следущим образом:

    */admin@ADS-KAFKA.LOCAL  *

    В примере, приведенном выше, настроено так, что любой принципал /admin в области ADS-KAFKA.LOCAL имеет все административные привилегии, кроме извлечения ключей.

    ПРИМЕЧАНИЕ
    Полное описание значений тегов для разделов данного файла приведено по ссылке kadm5_acl.
  3. Далее необходимо отредактировать файл конфигурации домена 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.
  4. Создайте базу данных принципалов 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.
  5. Создайте пользователя 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.
  6. Рестартуйте сервисы 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 для сервисов
Сервис Путь к 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

Kafka-Manager

/etc/kafka-manager/conf/jaas.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:

  1. Переведите в активное состояние переключатель Show advanced.

  2. Откройте шаблон, внесите изменения и сохраните, нажав 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.

  3. Сохраните конфигурацию, нажав Save.

    Настройка JAAS template
    Настройка JAAS template
  4. Перезагрузите сервисы, для которых был настроен jaas.conf. Для этого примените действие Restart, нажав на иконку actions default dark actions default light в столбце Actions.

ПРИМЕЧАНИЕ
В случае, когда перед включением Manage Kerberos шаблон JAAS template не изменен, после включения керберизации на хостах для каждого сервиса по умолчанию создаются файлы jaas.conf, содержащие данные, приведенные в шаблоне.

Запуск MIT Kerberos KDC на кластере ADS в интерфейсе ADCM

  1. Инициируйте включение Kerberos для выбранного кластера. Для этого примените действие Manage Kerberos, нажав на иконку actions default dark actions default light в столбце Actions.

    Включение Kerberos в кластере ADS
    Включение Kerberos в кластере ADS
  2. Включите переключатель Existing MIT KDC в открывшемся окне.

    Включение Existing MIT KDC
    Включение Existing MIT KDC
    ПРИМЕЧАНИЕ
    Включение Existing MIT KDC можно совместить c опцией Custom kerberization settings.
  3. Переведите в активное состояние переключатель Show advanced.

  4. Установите конфигурационные параметры кластера ADS для MIT Kerberos KDC в соответствии с ранее введенными значениями и нажмите Run.

    Включение Kerberos в кластере ADS
    Настройка конфигурации кластера ADS для MIT Kerberos KDC
  5. Подтвердите действие в открывшемся окне.

    Включение Kerberos в кластере ADS
    Подтверждение действия
  6. Дождитесь завершения включения Kerberos. Проанализируйте и исправьте ошибки в случае их возникновения.

    Процесс запуска Kerberos
    Процесс запуска Kerberos
ПРИМЕЧАНИЕ
Аутентификация по протоколу Kerberos после запуска Manage Kerberos в сервисе Kafka осуществляется в соответствии со статьей Использование MIT Kerberos в Kafka.
Нашли ошибку? Выделите текст и нажмите Ctrl+Enter чтобы сообщить о ней