kafka topic acl授权

来源:互联网 发布:qt mysql数据库 编辑:程序博客网 时间:2024/06/04 23:17

在前一篇,kafka启用认证(http://blog.csdn.net/zhoudetiankong/article/details/78229416)的基础上,来说明kafka topic的acl权限。

1.修改server.properties

authorizer.class.name = kafka.security.auth.SimpleAclAuthorizer#设置超级用户super.users=User:admin

allow.everyone.if.no.acl.found参数,默认是false。如果一个资源R没有任何acl设置,那么默认是除了超级用户之外,其他用户都不可见。设置为true可以改变这个情况。

2.授权方法

Principal P is [Allowed/Denied] Operation O From Host H On Resource R

需要说明的是,Principal是根据之前的kafka认证中的主体,比如我上篇使用的是SASL/PLAIN,则acl授权体系中 Principal=PLAIN中的用户名。我刚开始打算单独使用kafka acl而不启用kafka authentication,结果是Principal并不是我想象中的linux用户名,而是基于kafka authentication体系中的用户名,这样才能生效。另外,可以通过重写principal.builder.class参数的类,来实现单独使用acl。

以上一篇中的例子来说明,plain中配置了两个用户,admin和alice。
现在授权给aclie用户topic:test的生产者和消费者的权限,没有限定ip。

授权用户alice在任何ip上有topic:test的生产者权限

./kafka-acls.sh --authorizer-properties zookeeper.connect=localhost:2181 --add --allow-principal User:alice   --producer  --topic test

授权用户alice在任何ip上有topic:test的消费者权限,并且group是任意名字

./kafka-acls.sh --authorizer-properties zookeeper.connect=localhost:2181 --add --allow-principal User:alice   --consumer  --group=*  --topic test

查看kafka集群所有的acl授权信息

./kafka-acls.sh --authorizer-properties zookeeper.connect=localhost:2181 --list

具体授权使用方法可以查看官网:
http://kafka.apache.org/0102/documentation.html#security_authz_examples

另外需要注意的是,由于acl信息存储在zookeeper中,所以在没有启用zookeeper权限体系的情况下,任何用户理论上都可以执行/kafka-acls.sh。