了解如何为企业安全性套餐 (ESP) Apache Kafka 群集配置 Apache Ranger 策略。 将 ESP 群集连接到域,可允许用户使用域凭据进行身份验证。 本教程将创建两个 Ranger 策略来限制对
sales
和
marketingspend
主题的访问。
在本教程中,你将了解如何执行以下操作:
创建域用户
创建 Ranger 策略
创建 Kafka 群集中的主题
测试 Ranger 策略
具有企业安全性套餐的 HDInsight Kafka 群集
。
连接到 Apache Ranger 管理 UI
在浏览器中,使用 URL
https://ClusterName.azurehdinsight.net/Ranger/
连接到 Ranger 管理用户界面。 请记住将
ClusterName
更改为 Kafka 群集的名称。 Ranger 凭据与 Hadoop 集群凭据不同。 若要防止浏览器使用缓存的 Hadoop 凭据,请使用新的 InPrivate 浏览器窗口连接到 Ranger 管理 UI。
使用 Azure Active Directory (AD) 管理员凭据登录。 Azure AD 管理员凭据与 HDInsight 群集凭据或 Linux HDInsight 节点 SSH 凭据不同。
创建域用户
访问
使用企业安全性套餐创建 HDInsight 群集
,以了解如何创建 sales_user 和 marketing_user 域用户。 在生产方案中,域用户来自你的 Active Directory·租户。
创建 Ranger 策略
为 sales_user 和 marketing_user 创建 Ranger 策略。
打开“Ranger 管理 UI”。
选择“Kafka”下的“<ClusterName>_kafka”。 可以列出一个预先配置的策略。
选择“添加新策略”,并输入以下值:
ssh DOMAINADMIN@CLUSTERNAME-ssh.azurehdinsight.net
将 DOMAINADMIN
替换为在创建群集期间为你的群集配置的管理员用户,将 CLUSTERNAME
替换为你的群集的名称。 出现提示时,输入管理员用户帐户的密码。 有关在 HDInsight 中使用 SSH
的详细信息,请参阅在 HDInsight 中使用 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 以及包含 scp 的 SSH 客户端等组件。 有关详细信息,请参阅设置说明。
下载 Apache Kafka 域加入生成者使用者示例。
按照以下文章的生成并部署示例下的步骤 2 和步骤 3 进行操作:教程:使用 Apache Kafka 生成者和使用者 API
对于本教程,请使用“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 进行操作:教程:使用 Apache Kafka 生成者和使用者 API 来确保 kafka-producer-consumer.jar
也可供 sales_user 使用。
对于本教程,请使用“DomainJoined-Producer-Consumer”项目下的 kafka-producer-consumer.jar(而不是 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
验证你能够读取消息。
在同一 ssh 窗口中执行以下命令来验证 sales_user1 无法生成主题 marketingspend
:
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 UI 查看审核访问事件。
不能使用控制台命令来创建主题。 相反,必须使用上一部分中演示的 Java 代码。 有关详细信息,请参阅使用 ESP 创建 Kafka 群集中的主题。
若要使用控制台生成和使用 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 票证缓存存在过期限制。 对于长时间运行的会话,最好使用 keytab,而不是手动续订票证缓存。
若要无需 kinit
在长时间运行的会话中使用 keytab:
为域用户创建新的 keytabktutil
addent -password -p <user@domain> -k 1 -e RC4-HMAC
wkt /tmp/<user>.keytab
创建 /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>";
使用控制台或 API 将 java.security.auth.login.config
替换为 /home/sshuser/kafka_client_jaas.conf
和使用主题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 在已加入域的群集中不起作用,请确保使用“DomainJoined-Producer-Consumer”项目下的 kafka-producer-consumer.jar(而不是 Producer-Consumer 项目下的那个文件,它适用于非加入域方案)。
客户管理的密钥磁盘加密