Поделиться через


Руководство по настройке политик Apache Kafka в HDInsight с корпоративным пакетом безопасности

Сведения о настройке политик Apache Ranger для кластеров Apache Kafka с Корпоративным пакетом безопасности (ESP). Кластеры ESP подключены к домену, благодаря чему пользователи могут проходить аутентификацию с учетными данными домена. В этом руководстве вы создадите две политики Ranger для ограничения доступа к разделам sales и marketingspend.

В этом руководстве описано следующее:

  • Создание пользователей домена.
  • Создание политик Ranger.
  • Создание разделов в кластере Kafka.
  • Проверка политик Ranger.

Необходимые условия

Кластер HDInsight Kafka с корпоративным пакетом безопасности.

Подключение к пользовательскому интерфейсу администратора Apache Ranger

  1. В браузере подключитесь к пользовательскому интерфейсу администратора Ranger с помощью URL-адреса https://ClusterName.azurehdinsight.net/Ranger/. Не забудьте изменить ClusterName на имя вашего кластера Kafka. Учетные данные Ranger не совпадают с учетными данными кластера Hadoop. Чтобы браузеры не использовали кэшированные учетные данные Hadoop, подключитесь к пользовательскому интерфейсу администратора Ranger в новом окне браузера в режиме InPrivate.

  2. Войдите с помощью учетных данных администратора Microsoft Entra. Учетные данные администратора Microsoft Entra не совпадают с учетными данными кластера HDInsight или учетными данными узла SSH для linux HDInsight.

    Снимок экрана: пользовательский интерфейс администратора Apache Ranger в HDInsight.

Создание пользователей домена

Сведения о создании sales_user и marketing_user пользователей домена см. в статье "Создание кластера HDInsight с корпоративным пакетом безопасности". В рабочем сценарии пользователи домена приходят из клиента Идентификатора Microsoft Entra.

Создание политики Ranger

Создайте политику Ranger для пользователей sales_user и marketing_user.

  1. Откройте пользовательский интерфейс администратора Ranger.

  2. В разделе Kafka выберите <ClusterName>_kafka. Может быть указана одна предварительно настроенная политика.

  3. Щелкните Добавить новую политику, а затем введите следующие значения.

    Параметр Предлагаемое значение
    Имя политики Политика продаж HDInsight*
    Раздел sales*
    Выбор пользователя sales_user1
    Разрешения публикация, использование, создание

    Имя раздела может содержать следующие подстановочные знаки:

    • * обозначает ноль или более вхождений символов.
    • ? означает один символ.

    Снимок экрана: пользовательский интерфейс создания политики администрирования Apache Ranger 1.

    Подождите несколько минут, чтобы Ranger синхронизировался с идентификатором Microsoft Entra, если пользователь домена не заполняется автоматически для выбора пользователя.

  4. Щелкните Добавить, чтобы сохранить политику.

  5. Щелкните Добавить новую политику, а затем введите следующие значения.

    Параметр Предлагаемое значение
    Имя политики Маркетинговая политика HDInsight
    Раздел marketingspend
    Выбор пользователя marketing_user1
    Разрешения публикация, использование, создание

    Снимок экрана: пользовательский интерфейс создания политики администратора Apache Ranger 2.

  6. Щелкните Добавить, чтобы сохранить политику.

Создание разделов в кластере Kafka с ESP

Чтобы создать разделы salesevents и marketingspend выполните следующие действия.

  1. Используйте следующую команду, чтобы открыть подключение Secure Shell (SSH) к кластеру:

    ssh DOMAINADMIN@CLUSTERNAME-ssh.azurehdinsight.net
    

    Замените DOMAINADMIN пользователя администратора для кластера, настроенного во время создания кластера. Замените CLUSTERNAME именем кластера. При появлении запроса введите пароль для учетной записи администратора. Дополнительные сведения об использовании SSH с HDInsight см. в статье Подключение к HDInsight (Hadoop) с помощью SSH.

  2. Чтобы сохранить имя кластера в переменной и установить служебную программу синтаксического анализа JSON (jq), используйте следующие команды. При появлении запроса введите имя кластера Kafka.

    sudo apt -y install jq
    read -p 'Enter your Kafka cluster name:' CLUSTERNAME
    
  3. Чтобы получить узлы брокера Kafka, используйте следующие команды. При появлении запроса введите пароль для учетной записи администратора кластера.

    export KAFKABROKERS=`curl -sS -u admin -G https://$CLUSTERNAME.azurehdinsight.net/api/v1/clusters/$CLUSTERNAME/services/KAFKA/components/KAFKA_BROKER | jq -r '["\(.host_components[].HostRoles.host_name):9092"] | join(",")' | cut -d',' -f1,2`; \
    

    Прежде чем продолжить, может потребоваться настроить среду разработки, если вы еще не сделали этого. Вам нужны такие компоненты, как Java JDK, Apache Maven и клиент SSH с безопасным копированием (SCP). Дополнительные сведения см . в инструкциях по настройке.

  4. Скачайте примеры присоединенного к домену производителя и потребителя Apache Kafka.

  5. Выполните шаги 2 и 3 в разделе "Сборка" и "Развернуть пример " в руководстве. Используйте API-интерфейсы производителя и потребителя Apache Kafka.

    Примечание.

    В этом руководстве описаноDomainJoined-Producer-Consumer, как использовать kafka-producer-consumer.jar проект. Не используйте его в Producer-Consumer проекте, который предназначен для сценариев, не присоединенных к домену.

  6. Выполните следующие команды:

    java -jar -Djava.security.auth.login.config=/usr/hdp/current/kafka-broker/conf/kafka_client_jaas.conf kafka-producer-consumer.jar create salesevents $KAFKABROKERS
    java -jar -Djava.security.auth.login.config=/usr/hdp/current/kafka-broker/conf/kafka_client_jaas.conf kafka-producer-consumer.jar create marketingspend $KAFKABROKERS
    

Тестирование политик Ranger

На основе настроенных политик Ranger sales_user может создавать и использовать раздел, но не раздел salesevents marketingspend. И наоборот, marketing_user могут создавать и использовать раздел marketingspend , но не раздел salesevents.

  1. Откройте новое подключение SSH к кластеру. Выполните следующую команду, чтобы войти от имени пользователя sales_user1.

    ssh sales_user1@CLUSTERNAME-ssh.azurehdinsight.net
    
  2. Используйте имена брокера из предыдущего раздела, чтобы настроить следующую переменную среды.

    export KAFKABROKERS=<brokerlist>:9092
    

    Пример: export KAFKABROKERS=<brokername1>.contoso.com:9092,<brokername2>.contoso.com:9092

  3. Выполните шаг 3 в разделе "Сборка и развертывание примера " в руководстве. Используйте API-интерфейсы производителя и потребителя Apache Kafka, чтобы убедиться, что kafka-producer-consumer.jar они также доступны для sales_user.

    Примечание.

    В этом руководстве описано, как использовать kafka-producer-consumer.jar проект DomainJoined-Producer-Consumer. Не используйте его в проекте "Производитель-потребитель", который предназначен для сценариев, не присоединенных к домену.

  4. Убедитесь, что sales_user1 может создаваться в раздел salesevents , выполнив следующую команду:

    java -jar -Djava.security.auth.login.config=/usr/hdp/current/kafka-broker/conf/kafka_client_jaas.conf kafka-producer-consumer.jar producer salesevents $KAFKABROKERS
    
  5. Выполните следующую команду, чтобы использовать из раздела salesevents:

    java -jar -Djava.security.auth.login.config=/usr/hdp/current/kafka-broker/conf/kafka_client_jaas.conf kafka-producer-consumer.jar consumer salesevents $KAFKABROKERS
    

    Убедитесь, что вы можете читать сообщения.

  6. Убедитесь, что sales_user1 не удается создать в разделе marketingspend , выполнив следующую команду в том же окне SSH:

    java -jar -Djava.security.auth.login.config=/usr/hdp/current/kafka-broker/conf/kafka_client_jaas.conf kafka-producer-consumer.jar producer marketingspend $KAFKABROKERS
    

    Происходит ошибка авторизации, ее можно игнорировать.

  7. Обратите внимание, что marketing_user1 не удается использовать из раздела salesevents.

    Повторите предыдущие шаги 1–3, но на этот раз как marketing_user1.

    Выполните следующую команду, чтобы использовать из раздела salesevents:

    java -jar -Djava.security.auth.login.config=/usr/hdp/current/kafka-broker/conf/kafka_client_jaas.conf kafka-producer-consumer.jar consumer salesevents $KAFKABROKERS
    

    Предыдущие сообщения не будут отображаться.

  8. Просмотрите события доступа к ресурсам аудита из интерфейса Ranger.

    Снимок экрана: события доступа к политике пользовательского интерфейса Ranger.

Создание и использование разделов в ESP Kafka с помощью консоли

Примечание.

Использовать команды консоли для создания разделов нельзя. Вместо этого необходимо использовать код Java, показанный в предыдущем разделе. См. раздел Создание разделов в кластере Kafka с ESP.

Для создания и использования разделов в ESP Kafka с помощью консоли выполните следующие действия.

  1. Используйте kinit с именем пользователя. Введите пароль, когда появится запрос.

    kinit sales_user1
    
  2. Задайте переменные среды.

    export KAFKA_OPTS="-Djava.security.auth.login.config=/usr/hdp/current/kafka-broker/conf/kafka_client_jaas.conf"
    export KAFKABROKERS=<brokerlist>:9092
    
  3. Создание сообщений в раздел salesevents:

    /usr/hdp/current/kafka-broker/bin/kafka-console-producer.sh --topic salesevents --broker-list $KAFKABROKERS --producer-property security.protocol=SASL_PLAINTEXT
    
  4. Использование сообщений из раздела salesevents:

    /usr/hdp/current/kafka-broker/bin/kafka-console-consumer.sh --topic salesevents --from-beginning --bootstrap-server $KAFKABROKERS --consumer-property security.protocol=SASL_PLAINTEXT
    

Создание и использование тем для длительного сеанса в ESP Kafka

Кэш билетов Kerberos имеет ограничение срока действия. Для длительного сеанса используйте ключи вместо продления кэша билетов вручную.

Использование ключа в длительном сеансе без kinit:

  1. Создайте новый ключ для пользователя домена:

    ktutil
    addent -password -p <user@domain> -k 1 -e RC4-HMAC
    wkt /tmp/<user>.keytab
    q
    
    
  2. Создайте /home/sshuser/kafka_client_jaas.conf. В нем должны присутствовать следующие строки.

    KafkaClient {
     com.sun.security.auth.module.Krb5LoginModule required
     useKeyTab=true
     storeKey=true
     keyTab="/tmp/<user>.keytab"
     useTicketCache=false
     serviceName="kafka"
     principal="<user@domain>";
    };
    
  3. /home/sshuser/kafka_client_jaas.conf Замените и создайте и потребляйте java.security.auth.login.config раздел с помощью консоли или API:

    export KAFKABROKERS=<brokerlist>:9092
    
    # console tool
    export KAFKA_OPTS="-Djava.security.auth.login.config=/home/sshuser/kafka_client_jaas.conf"
    /usr/hdp/current/kafka-broker/bin/kafka-console-producer.sh --topic salesevents --broker-list $KAFKABROKERS --producer-property security.protocol=SASL_PLAINTEXT
    /usr/hdp/current/kafka-broker/bin/kafka-console-consumer.sh --topic salesevents --from-beginning --bootstrap-server $KAFKABROKERS --consumer-property security.protocol=SASL_PLAINTEXT
    
    # API
    java -jar -Djava.security.auth.login.config=/home/sshuser/kafka_client_jaas.conf kafka-producer-consumer.jar producer salesevents $KAFKABROKERS
    java -jar -Djava.security.auth.login.config=/home/sshuser/kafka_client_jaas.conf kafka-producer-consumer.jar consumer salesevents $KAFKABROKERS
    

Очистка ресурсов

Если вы не собираетесь продолжать использовать это приложение, удалите созданный кластер Kafka:

  1. Войдите на портал Azure.
  2. В поле поиска в верхней части введите HDInsight.
  3. В разделе "Службы" выберите кластеры HDInsight.
  4. В списке кластеров HDInsight, который отобразится, выберите ... рядом с кластером, созданным при работе с этим учебником.
  5. Выберите Удалить>Да.

Устранение неполадок

Если kafka-producer-consumer.jar кластер, присоединенный к домену, не работает, убедитесь, что вы используете kafka-producer-consumer.jar в DomainJoined-Producer-Consumer проекте. Не используйте его в Producer-Consumer проекте, который предназначен для сценариев, не присоединенных к домену.

Следующие шаги