跳转至

4.1 开启权限控制

开启权限控制

Kafka 提供了权限控制的接口(kafka.security.authorizer.Authorizer),并且提供了默认的实现,用 zookeeper 存储 acl 规则(默认存储路径 /kafka-acl)。

通过 authorizer.class.name 指定 Authorizer 后,kafka broker 启动时会初始化该类,并在处理 api 请求时通过该类判断权限:

# 2.4 版本之前
# authorizer.class.name=kafka.security.auth.SimpleAclAuthorizer

# 2.4 版本之后建议使用这个
authorizer.class.name=kafka.security.authorizer.AclAuthorizer

为了方便自定义 Authorizer,2.4 之后接口由原来的 scala 定义的 kafka.security.authorizer.Authorizer 变为 java 定义的 org.apache.kafka.server.authorizer.Authorizer

Authorizer 默认和 kafka 使用同一个 zookeeper 服务,也可以单独配置:

authorizer.zookeeper.url=
authorizer.zookeeper.connection.timeout.ms=
authorizer.zookeeper.session.timeout.ms=
authorizer.zookeeper.max.in.flight.requests=

其他相关配置

默认情况下,如果资源 R 没有关联的 acl 规则,那么除了 super users 外的任何用户都不能访问 R。

如果想改变这种行为,可以设置:

allow.everyone.if.no.acl.found=true

super users 可以通过 super.users 定义:

super.users=User:Bob;User:Alice

设置 allow.everyone.if.no.acl.found=true 在生产环境是不推荐的,会带来 2 个问题:

  1. 对于没有关联 acl 规则的资源,相当于对所有用户开放
  2. 将一个资源关联 acl 规则后,之前访问这个资源的用户将失去访问权限