You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何配置Kafka权限,限制消费者仅从SASL_PLAIN端口(9093)消费指定Topic?

限制Kafka消费者仅从SASL_PLAIN端口消费的配置方案

要实现仅允许消费者从9093(SASL_PLAIN)端口消费指定Topic,同时禁止从9092(Plaintext)端口消费,核心是利用Kafka ACL结合不同Listener的认证特性区分客户端来源,具体配置步骤如下:

1. 确保集群已启用ACL授权

首先确认你的Kafka broker配置文件中已经开启ACL功能,添加或修改以下配置项:

# 启用官方ACL授权器
authorizer.class.name=kafka.security.authorizer.AclAuthorizer
# 无匹配ACL规则时默认拒绝访问(关键配置,避免默认开放权限)
allow.everyone.if.no.acl.found=false
# 可选:指定超级用户(用于执行ACL管理命令的账号)
super.users=User:admin

修改完成后重启Kafka broker使配置生效。

2. 添加ACL规则区分不同端口的访问

由于9092是Plaintext协议,所有通过该端口连接的客户端会被识别为匿名身份(Principal为User:ANONYMOUS);而9093是SASL_PLAIN协议,客户端必须提供合法用户名密码,身份为对应的认证用户(例如User:consumer_user)。我们通过ACL权限控制实现需求:

步骤2.1 拒绝匿名用户对目标Topic的消费权限

执行以下kafka-acls.sh命令,拒绝匿名用户读取目标Topic(替换<your_topic>为实际Topic名称):

kafka-acls.sh --bootstrap-server <broker_host>:9093 \
  --command-config <path_to_sasl_config> \
  --add \
  --allow-principal User:ANONYMOUS \
  --deny \
  --operation READ \
  --operation DESCRIBE \
  --topic <your_topic>

注:这里使用9093端口执行命令,因为需要通过SASL认证端口连接集群(适配超级用户的SASL认证方式);DESCRIBE权限是消费者获取Topic元数据必需的,所以需要一并拒绝。

步骤2.2 允许认证用户对目标Topic的消费权限

接下来,允许合法消费者用户读取目标Topic(替换<consumer_username>为实际消费者用户名):

kafka-acls.sh --bootstrap-server <broker_host>:9093 \
  --command-config <path_to_sasl_config> \
  --add \
  --allow-principal User:<consumer_username> \
  --allow \
  --operation READ \
  --operation DESCRIBE \
  --topic <your_topic>

如果需要允许所有通过SASL认证的用户消费,可将--allow-principal改为--allow-principal User:*(表示所有认证用户)。

3. 验证配置效果

  • 尝试通过Plaintext协议(9092端口)连接集群消费该Topic,会收到Not authorized to access topics的权限错误。
  • 通过SASL_PLAIN协议(9093端口)并提供合法用户名密码连接,可正常消费数据。

原理说明

Kafka的Plaintext协议默认不做身份认证,所有客户端都会被标记为匿名用户;而SASL_PLAIN协议要求客户端提交身份凭证,Broker验证后赋予对应Principal身份。通过ACL分别控制匿名用户和认证用户的权限,就能实现仅允许安全端口的消费请求。

内容的提问来源于stack exchange,提问作者VinayKumar

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.25 06:48:16