跳转至

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 的规则,包括前缀匹配或者 *
    • --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: 可选的值:
      • Read
      • Write
      • Create
      • Alter
      • Describe
      • ClusterAction
      • DescribeConfigs
      • AlterConfigs
      • IdempotentWrite
      • All
  • Convenience
    • --producer: Write, Describe, Create on topic
    • --consumer: Read, Describe on topic and Read on consumer-group
    • --idempotent: 和 --producer 一起使用,表示 producer 可以幂等写

示例

  1. 允许 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
    
  2. 允许除 从 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
    
  3. 从 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 *
    
    bin/kafka-acls.sh \
        --authorizer-properties zookeeper.connect=localhost:2181 \
        --add \
        --allow-principal User:Peter \
        --allow-host 198.51.200.1 \
        --producer \
        --topic=*
    
  4. 允许 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
    
  5. 移除添加的第 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
    
  6. 移除添加的第 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
    
  7. 可以根据 resource 列出关联的 acl 规则列表,比如列出 topic Test-topic 相关联的 acl 规则

    bin/kafka-acls.sh \
    --authorizer-properties zookeeper.connect=localhost:2181 \
    --list \
    --topic Test-topic
    
  8. 可以用 * 表示所有 resource,比如列出所有 topic 的 acl 规则

    bin/kafka-acls.sh \
    --authorizer-properties zookeeper.connect=localhost:2181 \
    --list \
    --topic *
    
  9. 如果想看特定 resource 关联的所有记录,包括前缀匹配和 *,可以使用 match

    bin/kafka-acls.sh \
    --authorizer-properties zookeeper.connect=localhost:2181 \
    --list \
    --topic Test-topic \
    --resource-pattern-type match
    
  10. --producer 选项可以方便的代表生产消息需要的操作

    bin/kafka-acls.sh \
    --authorizer-properties zookeeper.connect=localhost:2181 \
    --add \
    --allow-principal User:Bob \
    --producer \
    --topic *
    
  11. --consumer 选项可以方便的代表消费消息需要的操作,并且要与 --group 搭配使用

    bin/kafka-acls.sh \
    --authorizer-properties zookeeper.connect=localhost:2181 \
    --add \
    --allow-principal User:Bob \
    --consumer \
    --topic * \
    --group *
    
  12. 给用户 Bob 增加 幂等写 权限

    kafka-acls.sh \
    --authorizer-properties zookeeper.connect=loalhost:2181 \
    --add \
    --allow-principal User:Bob \
    --operation IdempotentWrite
    --cluster
    
    Adding ACLs for resource `ResourcePattern(resourceType=CLUSTER, name=kafka-cluster, patternType=LITERAL)`:
         (principal=User:Bob, host=*, operation=IDEMPOTENT_WRITE, permissionType=ALLOW)
    
    Current ACLs for resource `ResourcePattern(resourceType=CLUSTER, name=kafka-cluster, patternType=LITERAL)`:
         (principal=User:Bob, host=*, operation=IDEMPOTENT_WRITE, permissionType=ALLOW)
    

    上述命令也替换成使用 --bootstrap-server 的方式:

    kafka-acls.sh \
    --bootstrap-server ${BOOTSTRAP_SERVER} \
    --add \
    --allow-principal User:* \
    --operation IdempotentWrite \
    --cluster
    
    kafka-acls.sh \
        --bootstrap-server ${BOOTSTRAP_SERVER} \
        --add \
        --allow-principal User:alice \
        --operation IdempotentWrite \
        --cluster  --command-config /usr/local/ams-worker/conf/kafka.properties
    
  13. 给用户 alice 增加事务Id transaction_id 的写权限:

    kafka-acls.sh \
        --bootstrap-server ${BOOTSTRAP_SERVER} \
        --add \
        --resource-pattern-type LITERAL \
        --transactional-id transaction_id \
        --allow-principal User:alice \
        --operation Write
    
    `--resource-pattern-type LITERAL --transactional-id=*` 表示所有事务Id
    
    kafka-acls.sh \
        --bootstrap-server ${BOOTSTRAP_SERVER} \
        --add \
        --resource-pattern-type LITERAL \
        --transactional-id=* \
        --allow-principal User:alice \
        --operation Write
    
  14. 给用户 alice 增加事务Id transaction_id 的描述权限:

    kafka-acls.sh \
        --bootstrap-server ${BOOTSTRAP_SERVER} \
        --add \
        --resource-pattern-type LITERAL \
        --transactional-id transaction_id \
        --allow-principal User:alice \
        --operation Describe
    
  15. 删除用户 alice 对事务Id transaction_id 的描述权限:

    kafka-acls.sh \
        --bootstrap-server ${BOOTSTRAP_SERVER} \
        --remove \
        --resource-pattern-type LITERAL \
        --transactional-id transaction_id \
        --allow-principal User:alice \
        --operation Describe