4.4 命令行工具
kafka-acls.sh
详细参数
- Action:
--add: 增加 acl 规则--remove: 删除 acl 规则--list
- Configuration:
--authorizer: authorizer 的类名,默认kafka.security.authorizer.AclAuthorizer--authorizer-properties: key-val pairs 用来初始 authorizer。对于默认的 authorizer,需要传zookeeper.connect=--bootstrap-server: kafka 服务地址,与authorizer相关的配置只需要保留一个--command-config: 可与--bootstrap-server一起使用,指定一个包含配置的 property 文件,用来初始Admin Client--resource-pattern-type [pattern-type]- add acls:
LITERAL: 完全匹配,但是可以用*代表所有PREFIXED: 前缀匹配
- list or remove acls:
ANY:MATCH: 表示所有会影响到 resource 的规则,包括前缀匹配或者*
- add acls:
--zk-tls-config-file
- ResourcePattern
--cluster--topic [topic-name]--group [group-name]--transactional-id [transactional-id]--delegation-token [delegation-token]
- Principal
--allow-principal--deny-principal--principal
- Host
--allow-host--deny-host
- Operation
--operation: 可选的值:- All
- Read
- Write
- Create
- Delete
- Alter
- Describe
- ClusterAction
- DescribeConfigs
- AlterConfigs
- IdempotentWrite
- CreateTokens
- DescribeTokens
- Convenience
--producer: Write, Describe, Create on topic--consumer: Read, Describe on topic and Read on consumer-group--idempotent: 和--producer一起使用,表示 producer 可以幂等写
示例
添加权限
-
允许 User:Bob 或者 User:Alice 从 IP 198.51.100.0 或者 198.51.100.1 读写 Test-topic
bin/kafka-acls.sh \ --authorizer-properties zookeeper.connect=localhost:2181 \ --add \ --allow-principal User:Bob --allow-principal User:Alice \ --allow-host 198.51.100.0 --allow-host 198.51.100.1 \ --operation Read --operation Write \ --topic Test-topic -
允许除 从 IP 198.51.100.3 访问的 User:BadBob 外的所有用户读 Test-topic
bin/kafka-acls.sh \ --authorizer-properties zookeeper.connect=localhost:2181 \ --add \ --allow-principal User:* --allow-host '*' \ --deny-principal User:BadBob --deny-host 198.51.100.3 \ --operation Read \ --topic Test-topic -
从 IP 198.51.200.0 访问的 User:Peter 允许向任何 topic 生产消息
bin/kafka-acls.sh \ --authorizer-properties zookeeper.connect=localhost:2181 \ --add \ --allow-principal User:Peter \ --allow-host 198.51.200.1 \ --producer \ --topic '*' -
允许 User:Jane 向任何以 Test- 开头的 topic 生产消息
bin/kafka-acls.sh \ --authorizer-properties zookeeper.connect=localhost:2181 \ --add \ --allow-principal User:Jane \ --producer \ --topic Test- \ --resource-pattern-type prefixed
移除权限
-
移除添加的第 1 条 acl 规则
bin/kafka-acls.sh \ --authorizer-properties zookeeper.connect=localhost:2181 \ --remove \ --allow-principal User:Bob --allow-principal User:Alice \ --allow-host 198.51.100.0 --allow-host 198.51.100.1 \ --operation Read --operation Write \ --topic Test-topic -
移除添加的第 4 条 acl 规则(topic 前缀匹配)
bin/kafka-acls.sh \ --authorizer-properties zookeeper.connect=localhost:2181 \ --remove \ --allow-principal User:Jane \ --producer \ --topic Test- \ --resource-pattern-type Prefixed
获取关联权限
-
可以根据 resource 列出关联的 acl 规则列表,比如列出 topic Test-topic 相关联的 acl 规则
bin/kafka-acls.sh \ --authorizer-properties zookeeper.connect=localhost:2181 \ --list \ --topic Test-topic -
可以用
*表示所有 resource,比如列出所有 topic 的 acl 规则bin/kafka-acls.sh \ --authorizer-properties zookeeper.connect=localhost:2181 \ --list \ --topic '*' -
如果想看特定 resource 关联的所有记录,包括前缀匹配和
*,可以使用matchbin/kafka-acls.sh \ --authorizer-properties zookeeper.connect=localhost:2181 \ --list \ --topic Test-topic \ --resource-pattern-type match
按场景快速添加权限
-
--producer选项可以方便的代表生产消息需要的操作bin/kafka-acls.sh \ --bootstrap-server ${BOOTSTRAP_SERVER} \ --add \ --allow-principal User:Bob \ --producer \ --topic '*' -
--consumer选项可以方便的代表消费消息需要的操作,并且要与--group搭配使用bin/kafka-acls.sh \ --bootstrap-server ${BOOTSTRAP_SERVER} \ --add \ --allow-principal User:Bob \ --consumer \ --topic '*' \ --group '*' -
给用户 Bob 增加 幂等写 权限
kafka-acls.sh \ --authorizer-properties zookeeper.connect=loalhost:2181 \ --add \ --allow-principal User:Bob \ --operation IdempotentWrite --cluster上述命令也替换成使用
--bootstrap-server的方式:kafka-acls.sh \ --bootstrap-server ${BOOTSTRAP_SERVER} \ --add \ --allow-principal User:* \ --operation IdempotentWrite \ --cluster -
给用户 alice 增加事务Id
transaction_id的写权限:kafka-acls.sh \ --bootstrap-server ${BOOTSTRAP_SERVER} \ --add \ --allow-principal User:alice \ --operation Write --transactional-id transaction_id \ --resource-pattern-type LITERAL \--resource-pattern-type LITERAL --transactional-id '*'表示所有事务Idkafka-acls.sh \ --bootstrap-server ${BOOTSTRAP_SERVER} \ --add \ --allow-principal User:alice \ --operation Write --transactional-id '*' \ --resource-pattern-type LITERAL \ -
给用户增加 describe_configs 权限
kafka-acls.sh \ --bootstrap-server ${BOOTSTRAP_SERVER} \ --add \ --allow-principal User:alice \ --operation DescribeConfigs \ --topic '*' \ --resource-pattern-type LITERAL \ --command-config /usr/local/kafka-worker/conf/kafka.properties -
给用户增加 describe cluster 权限
kafka-acls.sh \ --bootstrap-server ${BOOTSTRAP_SERVER} \ --add \ --allow-principal User:alice \ --operation Describe \ --cluster \ --command-config /usr/local/kafka-worker/conf/kafka.properties
在 Linux 命令行中,命令中的
*通常会被 Shell 展开为匹配到的文件列表,然后再把这些文件名作为参数传给命令,通过'*'可以避免 Shell 预展开