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 message
Copy 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 message
Copy 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.properties
Copy 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_1
Copy 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 --list
Copy 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 --list
Copy to Clipboard Copied! Toggle word wrap Toggle overflow a_consumer_group_1
consumer 组返回。获取集群配置详情。
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-default
Copy 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 1
Copy 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 3
Copy 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 1
Copy 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 1
Copy 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 1
Copy 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 --list
Copy 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 3
Copy 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 5
Copy 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_b
Copy 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_a
Copy 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_a
Copy 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.properties
Copy 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-default
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 本例的集群配置为空。