kafka Acl认证

添加Acl

  • 创建用户用于测试Acl授权
bin/kafka-configs.sh --zookeeper  localhost:2181/kafka --alter --add-config 'SCRAM-SHA-256=[iterations=8192,password=testacl],SCRAM-SHA-512=[password=testacl]' --entity-type users --entity-name testacl

添加acl

要添加一个acl “允许用户Bob和Alice从IP 198.51.100.0和IP 198.51.100.1对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
  • 默认情况下,所有的用户在没有一个显示的对资源操作acl授权的, 都是拒绝访问的。在极少的情况下,使用到acl允许访问所有的资源,并希望排除一些情况(用户),我们可以使用 --deny-principal 和 --deny-host来拒绝访问。例如,如果我们想让所有用户读取Test-topic,只拒绝IP为198.51.100.3的User:BadBob,我们可以使用下面的命令:
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
  • 拒绝用户BadBob读取操作
bin/kafka-acls.sh --authorizer-properties zookeeper.connect=localhost:2181 --add --allow-principal User:* --allow-host * --deny-principal User:BadBob --operation Read --topic Test-topic
  • 注意,' '--allow-host ' '和' ' deny-host ' '只支持IP地址(不支持主机名)。上面的示例通过指定——topic [topic-name]作为资源模式选项向主题添加acl。类似地,用户可以通过指定--cluster向集群添加acl,通过指定--group [group name]向消费者组添加acl。您可以在任何类型的资源上添加acl,例如,假设您想允许Peter从IP 198.51.200.0生产消息到任何topic,您可以使用通配符资源“”来实现这一点
    值得注意的是在使用
    代表所有资源的时候要用 双引号括起来, 即"*"
bin/kafka-acls.sh --authorizer-properties zookeeper.connect=localhost:2181 --add --allow-principal User:Peter --allow-host 198.51.200.1 --producer --topic "*"
  • 您可以在前缀资源模式上添加acl,例如,假设您想允许用户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

删除acl

  • 删除和添加是一样的,--add换成--remove选项,要删除第一个例子中添加的,可以使用下面的命令:
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
  • 如果您想删除添加到上述前缀资源模式的acl,我们可以使用以下选项执行CLI:
bin/kafka-acls.sh --authorizer-properties zookeeper.connect=localhost:2181 --remove --allow-principal User:Jane --producer --topic Test- --resource-pattern-type Prefixed
  • 我们可以通过--list选项列出所有资源的ACL。假设要列出Test-topic,我们可以用下面的选项执行CLI所有的ACL:
bin/kafka-acls.sh --authorizer-properties zookeeper.connect=localhost:2181 --list --topic Test-topic
  • 不一定能够显式地查询与Test-topic匹配的前缀资源模式上的acl,因为这些模式的名称可能不知道。我们可以使用“—resource-pattern-type match”列出所有影响测试主题的acl,例如。
bin/kafka-acls.sh --authorizer-properties zookeeper.connect=localhost:2181 --list --topic Test-topic --resource-pattern-type match

这将在所有匹配的文字、通配符和前缀资源模式上列出acl。

  • 添加或删除作为生产者或消费者的用户
    acl管理最常见的用例是添加/删除作为生产者或消费者的主体,因此我们添加了方便选项来处理这些情况。为了添加User:Bob作为Test-topic的生产者,我们可以执行以下命令:
bin/kafka-acls.sh --authorizer-properties zookeeper.connect=localhost:2181 --add --allow-principal User:Bob --producer --topic Test-topic
  • 跟上面相似,允许Alice作为消费组为 group -1的topic名称为Test-topic的消费者,我们只需通过--consumer选项:
bin/kafka-acls.sh --authorizer-properties zookeeper.connect=localhost:2181 --add --allow-principal User:Bob --consumer --topic Test-topic --group Group-1
  • 注意,对于consumer选项,我们还必须指定consumer组。为了从生产者或消费者角色中删除主体,我们只需要传递——remove选项。

AdminClient API based acl management

  • 对ClusterResource具有Alter权限的用户可以使用AdminClient API进行ACL管理。sh脚本支持AdminClient API来管理acl,而无需直接与zookeeper/authorizer交互。以上所有示例都可以通过使用--bootstrap-server选项执行
  • 首先创建具有集群资源alter权限的用户acl
bin/kafka-acls.sh --authorizer-properties zookeeper.connect=localhost:2181 --add  --allow-principal User:acl  --cluster --operation Alter
  • 创建配置用于AdminClient API 脚本的时候指定
vi /tmp/adminclient-configs.conf
security.protocol=SASL_PLAINTEXT
sasl.mechanism=SCRAM-SHA-512
sasl.jaas.config=org.apache.kafka.common.security.scram.ScramLoginModule required username="acl" password="acl";
  • 指定--bootstrap-server进行授权如下
bin/kafka-acls.sh --bootstrap-server localhost:9092 --command-config /tmp/adminclient-configs.conf --add --allow-principal User:Bob --producer --topic Test-topic
bin/kafka-acls.sh --bootstrap-server localhost:9092 --command-config /tmp/adminclient-configs.conf --add --allow-principal User:Bob --consumer --topic Test-topic --group Group-1
bin/kafka-acls.sh --bootstrap-server localhost:9092 --command-config /tmp/adminclient-configs.conf --list --topic Test-topic

-注意事项
代表All Resource的 * 要用 双引号括起来, 即"*"
添加producer权限时会添加Cluster的Create权限
注意所有的All Resource权限。对其的添加或修改会影响所有用户

你可能感兴趣的:(kafka Acl认证)