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


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

Узнайте, как настроить политики Apache Ranger для кластеров Apache Kafka с пакетом Enterprise Security Package (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_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 [email protected]
    

    Замените 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.

    Примечание.

    Для этого руководства используйте kafka-producer-consumer.jar в рамках проекта DomainJoined-Producer-Consumer. Не используйте тот, который находится в 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 [email protected]
    
  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 имеет ограничение срока действия. Для длительного сеанса используйте ключтаб вместо обновления кэша билетов вручную.

Чтобы использовать keytab в длительном сеансе без kinit:

  1. Создайте новый файл keytab для вашего пользователя домена:

    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. Замените java.security.auth.login.config на /home/sshuser/kafka_client_jaas.conf и создайте или потребляйте тему с помощью консоли или 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, предназначенным для сценариев, не присоединенных к домену.

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