Руководство по настройке политик Apache Kafka в HDInsight с корпоративным пакетом безопасности
Сведения о настройке политик Apache Ranger для кластеров Apache Kafka с Корпоративным пакетом безопасности (ESP). Кластеры ESP подключены к домену, благодаря чему пользователи могут проходить аутентификацию с учетными данными домена. В этом руководстве вы создадите две политики Ranger для ограничения доступа к разделам sales
и marketingspend
.
В этом руководстве описано следующее:
- Создание пользователей домена.
- Создание политик Ranger.
- Создание разделов в кластере Kafka.
- Проверка политик Ranger.
Предварительные требования
Кластер HDInsight Kafka с корпоративным пакетом безопасности.
Подключение к пользовательскому интерфейсу администратора Apache Ranger
В браузере подключитесь к пользовательскому интерфейсу администратора Ranger с помощью URL-адреса
https://ClusterName.azurehdinsight.net/Ranger/
. Не забудьте изменитьClusterName
на имя вашего кластера Kafka. Учетные данные Ranger не совпадают с учетными данными кластера Hadoop. Чтобы браузеры не использовали кэшированные учетные данные Hadoop, подключитесь к пользовательскому интерфейсу администратора Ranger в новом окне браузера в режиме InPrivate.Войдите с помощью учетных данных администратора Microsoft Entra. Учетные данные администратора Microsoft Entra не совпадают с учетными данными кластера HDInsight или учетными данными узла SSH для linux HDInsight.
Создание пользователей домена
Сведения о создании sales_user и marketing_user пользователей домена см. в статье "Создание кластера HDInsight с корпоративным пакетом безопасности". В рабочем сценарии пользователи домена приходят из клиента Идентификатора Microsoft Entra.
Создание политики Ranger
Создайте политику Ranger для пользователей sales_user и marketing_user.
Откройте пользовательский интерфейс администратора Ranger.
В разделе Kafka выберите <ClusterName>_kafka. Может быть указана одна предварительно настроенная политика.
Щелкните Добавить новую политику, а затем введите следующие значения.
Параметр Предлагаемое значение Имя политики Политика продаж HDInsight* Раздел sales* Выбор пользователя sales_user1 Разрешения публикация, использование, создание Имя раздела может содержать следующие подстановочные знаки:
*
обозначает ноль или более вхождений символов.?
означает один символ.
Подождите несколько минут, чтобы Ranger синхронизировался с идентификатором Microsoft Entra, если пользователь домена не заполняется автоматически для выбора пользователя.
Щелкните Добавить, чтобы сохранить политику.
Щелкните Добавить новую политику, а затем введите следующие значения.
Параметр Предлагаемое значение Имя политики Маркетинговая политика HDInsight Раздел marketingspend
Выбор пользователя marketing_user1 Разрешения публикация, использование, создание Щелкните Добавить, чтобы сохранить политику.
Создание разделов в кластере Kafka с ESP
Чтобы создать разделы salesevents
и marketingspend
выполните следующие действия.
Используйте следующую команду, чтобы открыть подключение Secure Shell (SSH) к кластеру:
ssh DOMAINADMIN@CLUSTERNAME-ssh.azurehdinsight.net
Замените
DOMAINADMIN
пользователя администратора для кластера, настроенного во время создания кластера. ЗаменитеCLUSTERNAME
именем кластера. При появлении запроса введите пароль для учетной записи администратора. Дополнительные сведения об использованииSSH
с HDInsight см. в статье Подключение к HDInsight (Hadoop) с помощью SSH.Чтобы сохранить имя кластера в переменной и установить служебную программу синтаксического анализа JSON (
jq
), используйте следующие команды. При появлении запроса введите имя кластера Kafka.sudo apt -y install jq read -p 'Enter your Kafka cluster name:' CLUSTERNAME
Чтобы получить узлы брокера 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). Дополнительные сведения см . в инструкциях по настройке.
Скачайте примеры присоединенного к домену производителя и потребителя Apache Kafka.
Выполните шаги 2 и 3 в разделе "Сборка" и "Развернуть пример " в руководстве. Используйте API-интерфейсы производителя и потребителя Apache Kafka.
Примечание.
В этом руководстве описано
DomainJoined-Producer-Consumer
, как использоватьkafka-producer-consumer.jar
проект. Не используйте его вProducer-Consumer
проекте, который предназначен для сценариев, не присоединенных к домену.Выполните следующие команды:
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
.
Откройте новое подключение SSH к кластеру. Выполните следующую команду, чтобы войти от имени пользователя sales_user1.
ssh sales_user1@CLUSTERNAME-ssh.azurehdinsight.net
Используйте имена брокера из предыдущего раздела, чтобы настроить следующую переменную среды.
export KAFKABROKERS=<brokerlist>:9092
Пример:
export KAFKABROKERS=<brokername1>.contoso.com:9092,<brokername2>.contoso.com:9092
Выполните шаг 3 в разделе "Сборка и развертывание примера " в руководстве. Используйте API-интерфейсы производителя и потребителя Apache Kafka, чтобы убедиться, что
kafka-producer-consumer.jar
они также доступны для sales_user.Примечание.
В этом руководстве описано, как использовать
kafka-producer-consumer.jar
проект DomainJoined-Producer-Consumer. Не используйте его в проекте "Производитель-потребитель", который предназначен для сценариев, не присоединенных к домену.Убедитесь, что 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
Выполните следующую команду, чтобы использовать из раздела
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
Убедитесь, что вы можете читать сообщения.
Убедитесь, что 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
Происходит ошибка авторизации, ее можно игнорировать.
Обратите внимание, что 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
Предыдущие сообщения не будут отображаться.
Просмотрите события доступа к ресурсам аудита из интерфейса Ranger.
Создание и использование разделов в ESP Kafka с помощью консоли
Примечание.
Использовать команды консоли для создания разделов нельзя. Вместо этого необходимо использовать код Java, показанный в предыдущем разделе. См. раздел Создание разделов в кластере Kafka с ESP.
Для создания и использования разделов в ESP Kafka с помощью консоли выполните следующие действия.
Используйте
kinit
с именем пользователя. Введите пароль, когда появится запрос.kinit sales_user1
Задайте переменные среды.
export KAFKA_OPTS="-Djava.security.auth.login.config=/usr/hdp/current/kafka-broker/conf/kafka_client_jaas.conf" export KAFKABROKERS=<brokerlist>:9092
Создание сообщений в раздел
salesevents
:/usr/hdp/current/kafka-broker/bin/kafka-console-producer.sh --topic salesevents --broker-list $KAFKABROKERS --producer-property security.protocol=SASL_PLAINTEXT
Использование сообщений из раздела
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
:
Создайте новый ключ для пользователя домена:
ktutil addent -password -p <user@domain> -k 1 -e RC4-HMAC wkt /tmp/<user>.keytab q
Создайте
/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>"; };
/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:
- Войдите на портал Azure.
- В поле поиска в верхней части введите HDInsight.
- В разделе "Службы" выберите кластеры HDInsight.
- В списке кластеров HDInsight, который отобразится, выберите ... рядом с кластером, созданным при работе с этим учебником.
- Выберите Удалить>Да.
Устранение неполадок
Если kafka-producer-consumer.jar
кластер, присоединенный к домену, не работает, убедитесь, что вы используете kafka-producer-consumer.jar
в DomainJoined-Producer-Consumer
проекте. Не используйте его в Producer-Consumer
проекте, который предназначен для сценариев, не присоединенных к домену.