温馨提示×

Kafka权限如何设置

小樊
34
2026-08-06 19:07:28
栏目: 大数据

Kafka 的权限控制主要依赖 ACL(Access Control Lists)SASL(认证) 的组合。下面按 从基础到常见生产配置 给你一个完整说明。


一、Kafka 权限体系总览

Kafka 权限控制分为三层:

  1. 认证(Authentication)
    确认“你是谁”

    • SASL/PLAIN
    • SASL/SCRAM
    • SASL/GSSAPI(Kerberos)
    • mTLS(SSL)
  2. 授权(Authorization)
    确认“你能干什么”

    • Kafka ACL(基于 Resource + Operation + Principal
  3. 网络/加密(可选但推荐)

    • SSL/TLS

二、开启 Kafka 权限控制(核心配置)

1️⃣ 启用 ACL 授权

server.properties 中:

authorizer.class.name=kafka.security.authorizer.AclAuthorizer
allow.everyone.if.no.acl.found=false

⚠️ 生产环境一定要设为 false


三、认证方式设置(常见)

方式一:SASL/SCRAM(推荐)

1. 配置 Kafka Server

server.properties

listeners=SASL_PLAINTEXT://:9092
security.inter.broker.protocol=SASL_PLAINTEXT
sasl.mechanism.inter.broker.protocol=SCRAM-SHA-256
sasl.enabled.mechanisms=SCRAM-SHA-256

JAAS 文件(如 kafka_server_jaas.conf):

KafkaServer {
  org.apache.kafka.common.security.scram.ScramLoginModule required
  username="admin"
  password="admin-secret";
};

启动 Kafka 时指定:

export KAFKA_OPTS="-Djava.security.auth.login.config=/path/kafka_server_jaas.conf"

方式二:SASL/PLAIN(简单但不适合大规模)

sasl.enabled.mechanisms=PLAIN

四、ACL 权限设置(重点)

ACL 基本命令

kafka-acls.sh \
  --bootstrap-server localhost:9092 \
  --add \
  --allow-principal User:producer1 \
  --operation Write \
  --topic test-topic

五、常见权限场景示例

✅ 1. 生产者权限

kafka-acls.sh \
  --bootstrap-server localhost:9092 \
  --add \
  --allow-principal User:producer1 \
  --operation Write \
  --topic test-topic

✅ 2. 消费者权限

kafka-acls.sh \
  --bootstrap-server localhost:9092 \
  --add \
  --allow-principal User:consumer1 \
  --operation Read \
  --topic test-topic \
  --group test-group

✅ 3. 创建 Topic 权限

kafka-acls.sh \
  --bootstrap-server localhost:9092 \
  --add \
  --allow-principal User:admin \
  --operation Create \
  --cluster

✅ 4. 超级用户(管理员)

super.users=User:admin

六、ACL 资源类型说明

资源类型 示例
Topic --topic test
Group --group test-group
Cluster --cluster
TransactionalId --transactional-id

七、查看 / 删除 ACL

查看 ACL

kafka-acls.sh \
  --bootstrap-server localhost:9092 \
  --list

删除 ACL

kafka-acls.sh \
  --bootstrap-server localhost:9092 \
  --remove \
  --allow-principal User:producer1 \
  --operation Write \
  --topic test-topic

八、Kafka + SSL(推荐生产)

listeners=SSL://:9093
ssl.keystore.location=/path/kafka.server.keystore.jks
ssl.truststore.location=/path/kafka.server.truststore.jks
ssl.client.auth=required

九、典型生产权限模型

角色 权限
Admin Cluster + All
Producer Write + Describe
Consumer Read + Describe + Group
Connector 读写 + 创建

十、常见坑

❌ 忘记给 Describe 权限
❌ 消费者没给 Group 权限
allow.everyone.if.no.acl.found=true(等于没权限控制)
❌ 认证和授权只配一个


十一、总结一句话

Kafka 权限 = SASL 认证 + ACL 授权 +(SSL 加密)


如果你愿意,我可以:

  • ✅ 给你一个 完整可运行的 Docker 示例
  • ✅ 按 CDH / Kafka 3.x / Strimzi 分别说明
  • ✅ 帮你设计 企业级权限模型

你现在用的是 哪个 Kafka 版本 + 部署方式

0