kafka topic acl授权
在前一篇,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。