4.5.4.4. 使用 CLI Kafka 客户端会话检查对 Kafka 的授权访问权限
利用交互式 CLI 会话,检查通过红帽单点登录域应用的授权规则。使用 Kafka 的示例制作者和消费者客户端应用检查,以创建具有不同访问权限级别的用户和服务帐户的主题。
使用 team-a-client 和 team-b-client 客户端检查授权规则。使用 alice admin 用户对 Kafka 执行额外的管理任务。
本例中使用的 AMQ Streams Kafka 镜像包含 Kafka 制作者和使用者二进制文件。
先决条件
- zookeeper 和 Kafka 在 OpenShift 集群中运行,以便能够发送和接收消息。
交互式 CLI Kafka 客户端会话 已启动。
设置客户端和管理员用户配置
使用
team-a-client客户端的身份验证属性准备 Kafka 配置文件。Copy to Clipboard Copied! Toggle word wrap Toggle overflow 使用 SASL OAUTHBEARER 机制。这种机制需要客户端 ID 和客户端 secret,这意味着客户端首先连接到红帽单点登录服务器来获取访问令牌。然后,客户端连接到 Kafka 代理并使用访问令牌进行身份验证。
使用
team-b-client客户端的身份验证属性准备 Kafka 配置文件。Copy to Clipboard Copied! Toggle word wrap Toggle overflow 通过使用
curl并执行密码授权身份验证来获取刷新令牌,从而对 admin 用户alice进行身份验证。Copy to Clipboard Copied! Toggle word wrap Toggle overflow 刷新令牌是一个离线令牌,寿命很长,且不会过期。
使用 admin 用户
alice的身份验证属性准备 Kafka 配置文件。Copy to Clipboard Copied! Toggle word wrap Toggle overflow kafka-cli公共客户端用于sasl。由于它是公共客户端,因此不需要机密。客户端使用上一步中验证的刷新令牌进行身份验证。刷新令牌在后台请求访问令牌,然后发送到 Kafka 代理进行身份验证。.jaas.config 中的 oauth.client.id
生成具有授权访问权限的消息
使用 team-a-client 配置检查您可以向以 a_ 或 开头的主题生成消息。
x_
写入到
主题 my主题。bin/kafka-console-producer.sh --broker-list my-cluster-kafka-bootstrap:9093 --topic my-topic \ --producer.config=/tmp/team-a-client.properties First message
bin/kafka-console-producer.sh --broker-list my-cluster-kafka-bootstrap:9093 --topic my-topic \ --producer.config=/tmp/team-a-client.properties First messageCopy to Clipboard Copied! Toggle word wrap Toggle overflow 此请求
返回未授权访问主题:[my-topic]错误。team-a-client具有开发团队A角色,允许它对以a_开头的主题执行任何受支持的操作,但只能写入x_开头的主题。名为my-topic的主题都不匹配这些规则。写入主题
a_messages。bin/kafka-console-producer.sh --broker-list my-cluster-kafka-bootstrap:9093 --topic a_messages \ --producer.config /tmp/team-a-client.properties First message Second message
bin/kafka-console-producer.sh --broker-list my-cluster-kafka-bootstrap:9093 --topic a_messages \ --producer.config /tmp/team-a-client.properties First message Second messageCopy to Clipboard Copied! Toggle word wrap Toggle overflow 成功生成消息到 Kafka。
- 按 CTRL+C 退出 CLI 应用。
-
检查 Kafka 容器日志中请求的
Authorization GRANTED的调试日志。
oc logs my-cluster-kafka-0 -f -n $NS
oc logs my-cluster-kafka-0 -f -n $NS
使用具有授权访问权限的信息
使用 team-a-client 配置来使用来自主题 a_messages 的消息。
从主题
a_messages获取消息.bin/kafka-console-consumer.sh --bootstrap-server my-cluster-kafka-bootstrap:9093 --topic a_messages \ --from-beginning --consumer.config /tmp/team-a-client.properties
bin/kafka-console-consumer.sh --bootstrap-server my-cluster-kafka-bootstrap:9093 --topic a_messages \ --from-beginning --consumer.config /tmp/team-a-client.propertiesCopy to Clipboard Copied! Toggle word wrap Toggle overflow 请求返回一个错误,因为
team-a-client的Dev 团队 A角色仅有权访问名称以a_开头的消费者组。更新
team-a-client属性,以指定允许使用的自定义使用者组。bin/kafka-console-consumer.sh --bootstrap-server my-cluster-kafka-bootstrap:9093 --topic a_messages \ --from-beginning --consumer.config /tmp/team-a-client.properties --group a_consumer_group_1
bin/kafka-console-consumer.sh --bootstrap-server my-cluster-kafka-bootstrap:9093 --topic a_messages \ --from-beginning --consumer.config /tmp/team-a-client.properties --group a_consumer_group_1Copy to Clipboard Copied! Toggle word wrap Toggle overflow 使用者从
a_messages主题接收所有消息。
使用授权访问权限管理 Kafka
team-a-client 是一个没有集群级别访问权限的帐户,但可以用于一些管理操作。
列出主题.
bin/kafka-topics.sh --bootstrap-server my-cluster-kafka-bootstrap:9093 --command-config /tmp/team-a-client.properties --list
bin/kafka-topics.sh --bootstrap-server my-cluster-kafka-bootstrap:9093 --command-config /tmp/team-a-client.properties --listCopy to Clipboard Copied! Toggle word wrap Toggle overflow a_messages主题返回。列出消费者组。
bin/kafka-consumer-groups.sh --bootstrap-server my-cluster-kafka-bootstrap:9093 --command-config /tmp/team-a-client.properties --list
bin/kafka-consumer-groups.sh --bootstrap-server my-cluster-kafka-bootstrap:9093 --command-config /tmp/team-a-client.properties --listCopy to Clipboard Copied! Toggle word wrap Toggle overflow a_consumer_group_1consumer 组返回。获取集群配置详情。
bin/kafka-configs.sh --bootstrap-server my-cluster-kafka-bootstrap:9093 --command-config /tmp/team-a-client.properties \ --entity-type brokers --describe --entity-default
bin/kafka-configs.sh --bootstrap-server my-cluster-kafka-bootstrap:9093 --command-config /tmp/team-a-client.properties \ --entity-type brokers --describe --entity-defaultCopy to Clipboard Copied! Toggle word wrap Toggle overflow 请求返回一个错误,因为操作需要
team-a-client没有集群级别权限。
使用具有不同权限的客户端
使用 team-b-client 配置向以 b_ 开头的主题生成消息。
写入主题
a_messages。bin/kafka-console-producer.sh --broker-list my-cluster-kafka-bootstrap:9093 --topic a_messages \ --producer.config /tmp/team-b-client.properties Message 1
bin/kafka-console-producer.sh --broker-list my-cluster-kafka-bootstrap:9093 --topic a_messages \ --producer.config /tmp/team-b-client.properties Message 1Copy to Clipboard Copied! Toggle word wrap Toggle overflow 此请求将
返回未授权访问主题:[a_messages]错误。写入到主题
b_messages。bin/kafka-console-producer.sh --broker-list my-cluster-kafka-bootstrap:9093 --topic b_messages \ --producer.config /tmp/team-b-client.properties Message 1 Message 2 Message 3
bin/kafka-console-producer.sh --broker-list my-cluster-kafka-bootstrap:9093 --topic b_messages \ --producer.config /tmp/team-b-client.properties Message 1 Message 2 Message 3Copy to Clipboard Copied! Toggle word wrap Toggle overflow 成功生成消息到 Kafka。
写入主题
x_messages。bin/kafka-console-producer.sh --broker-list my-cluster-kafka-bootstrap:9093 --topic x_messages \ --producer.config /tmp/team-b-client.properties Message 1
bin/kafka-console-producer.sh --broker-list my-cluster-kafka-bootstrap:9093 --topic x_messages \ --producer.config /tmp/team-b-client.properties Message 1Copy to Clipboard Copied! Toggle word wrap Toggle overflow 未授权访问主题:[x_messages]错误返回,team-b-client只能从主题x_messages中读取。使用
team-a-client写入主题x_messages。bin/kafka-console-producer.sh --broker-list my-cluster-kafka-bootstrap:9093 --topic x_messages \ --producer.config /tmp/team-a-client.properties Message 1
bin/kafka-console-producer.sh --broker-list my-cluster-kafka-bootstrap:9093 --topic x_messages \ --producer.config /tmp/team-a-client.properties Message 1Copy to Clipboard Copied! Toggle word wrap Toggle overflow 此请求
返回未授权访问主题:[x_messages]错误。team-a-client可以写入x_messages主题,但是如果主题尚不存在,则无权创建该主题。在team-a-client可以写入x_messages主题之前,管理员 高级用户 必须使用正确的配置创建它,如分区和副本的数量。
使用授权 admin 用户管理 Kafka
使用 admin 用户 alice 管理 Kafka。Alice 完全有权管理任何 Kafka 集群中的所有内容。
创建
x_messages主题,作为alice。bin/kafka-topics.sh --bootstrap-server my-cluster-kafka-bootstrap:9093 --command-config /tmp/alice.properties \ --topic x_messages --create --replication-factor 1 --partitions 1
bin/kafka-topics.sh --bootstrap-server my-cluster-kafka-bootstrap:9093 --command-config /tmp/alice.properties \ --topic x_messages --create --replication-factor 1 --partitions 1Copy to Clipboard Copied! Toggle word wrap Toggle overflow 主题创建成功。
将所有主题列为
alice.bin/kafka-topics.sh --bootstrap-server my-cluster-kafka-bootstrap:9093 --command-config /tmp/alice.properties --list bin/kafka-topics.sh --bootstrap-server my-cluster-kafka-bootstrap:9093 --command-config /tmp/team-a-client.properties --list bin/kafka-topics.sh --bootstrap-server my-cluster-kafka-bootstrap:9093 --command-config /tmp/team-b-client.properties --list
bin/kafka-topics.sh --bootstrap-server my-cluster-kafka-bootstrap:9093 --command-config /tmp/alice.properties --list bin/kafka-topics.sh --bootstrap-server my-cluster-kafka-bootstrap:9093 --command-config /tmp/team-a-client.properties --list bin/kafka-topics.sh --bootstrap-server my-cluster-kafka-bootstrap:9093 --command-config /tmp/team-b-client.properties --listCopy to Clipboard Copied! Toggle word wrap Toggle overflow admin 用户
alice可以列出所有主题,而team-a-client和team-b-client只能列出他们有权访问的主题。Dev 团队 A和Dev 团队 B角色均对以x_开头的主题具有权限,但它们无法看到其他团队的主题,因为它们没有描述它们的权限。使用
team-a-client生成到x_messages主题的信息:bin/kafka-console-producer.sh --broker-list my-cluster-kafka-bootstrap:9093 --topic x_messages \ --producer.config /tmp/team-a-client.properties Message 1 Message 2 Message 3
bin/kafka-console-producer.sh --broker-list my-cluster-kafka-bootstrap:9093 --topic x_messages \ --producer.config /tmp/team-a-client.properties Message 1 Message 2 Message 3Copy to Clipboard Copied! Toggle word wrap Toggle overflow 当
alice创建x_messages主题时,会成功生成消息到 Kafka。使用
team-b-client生成消息到x_messages主题。bin/kafka-console-producer.sh --broker-list my-cluster-kafka-bootstrap:9093 --topic x_messages \ --producer.config /tmp/team-b-client.properties Message 4 Message 5
bin/kafka-console-producer.sh --broker-list my-cluster-kafka-bootstrap:9093 --topic x_messages \ --producer.config /tmp/team-b-client.properties Message 4 Message 5Copy to Clipboard Copied! Toggle word wrap Toggle overflow 此请求
返回未授权访问主题:[x_messages]错误。使用
team-b-client使用来自x_messages主题的信息:bin/kafka-console-consumer.sh --bootstrap-server my-cluster-kafka-bootstrap:9093 --topic x_messages \ --from-beginning --consumer.config /tmp/team-b-client.properties --group x_consumer_group_b
bin/kafka-console-consumer.sh --bootstrap-server my-cluster-kafka-bootstrap:9093 --topic x_messages \ --from-beginning --consumer.config /tmp/team-b-client.properties --group x_consumer_group_bCopy to Clipboard Copied! Toggle word wrap Toggle overflow 使用者从
x_messages主题接收所有消息。使用
team-a-client使用来自x_messages主题的消息。bin/kafka-console-consumer.sh --bootstrap-server my-cluster-kafka-bootstrap:9093 --topic x_messages \ --from-beginning --consumer.config /tmp/team-a-client.properties --group x_consumer_group_a
bin/kafka-console-consumer.sh --bootstrap-server my-cluster-kafka-bootstrap:9093 --topic x_messages \ --from-beginning --consumer.config /tmp/team-a-client.properties --group x_consumer_group_aCopy to Clipboard Copied! Toggle word wrap Toggle overflow 此请求
返回未授权访问主题:[x_messages]错误。使用
team-a-client使用来自以a_开头的消费者组的消息。bin/kafka-console-consumer.sh --bootstrap-server my-cluster-kafka-bootstrap:9093 --topic x_messages \ --from-beginning --consumer.config /tmp/team-a-client.properties --group a_consumer_group_a
bin/kafka-console-consumer.sh --bootstrap-server my-cluster-kafka-bootstrap:9093 --topic x_messages \ --from-beginning --consumer.config /tmp/team-a-client.properties --group a_consumer_group_aCopy to Clipboard Copied! Toggle word wrap Toggle overflow 此请求
返回未授权访问主题:[x_messages]错误。Dev 团队 A 对以x_开头的主题没有读取访问权限。使用
alice生成指向x_messages主题的消息。bin/kafka-console-consumer.sh --bootstrap-server my-cluster-kafka-bootstrap:9093 --topic x_messages \ --from-beginning --consumer.config /tmp/alice.properties
bin/kafka-console-consumer.sh --bootstrap-server my-cluster-kafka-bootstrap:9093 --topic x_messages \ --from-beginning --consumer.config /tmp/alice.propertiesCopy to Clipboard Copied! Toggle word wrap Toggle overflow 成功生成消息到 Kafka。
Alice可以从任何主题读取或写入。使用
alice读取集群配置。bin/kafka-configs.sh --bootstrap-server my-cluster-kafka-bootstrap:9093 --command-config /tmp/alice.properties \ --entity-type brokers --describe --entity-default
bin/kafka-configs.sh --bootstrap-server my-cluster-kafka-bootstrap:9093 --command-config /tmp/alice.properties \ --entity-type brokers --describe --entity-defaultCopy to Clipboard Copied! Toggle word wrap Toggle overflow 本例的集群配置为空。