Linux Kafka配置中的权限管理怎么做
小樊
31
2025-12-23 00:06:49
Linux Kafka 权限管理实操指南
一 核心思路与准备
- 权限管理包含四个层面:
- 操作系统层:为 Kafka 创建专用系统用户与组,仅授予其数据/日志/配置目录的读写权限;
- 传输层:启用 SASL 认证(常用 SCRAM-SHA-256/512),必要时叠加 SSL/TLS 加密;
- 授权层:启用 ACL(推荐使用 SimpleAclAuthorizer),为 User:principal 授予最小权限;
- 运维层:以最小权限运行进程,限制监听端口来源,开启审计日志并定期轮换凭据。上述做法能覆盖身份鉴别、传输加密与细粒度访问控制三大安全目标。
二 操作系统与目录权限
- 创建专用用户与组(示例用户/组均为 kafka):
sudo groupadd kafka
sudo useradd -m -r -g kafka kafka
- 修正关键目录属主与权限(示例路径可按需替换):
sudo chown -R kafka:kafka /opt/kafka/data /opt/kafka/logs /opt/kafka/config
sudo chmod -R u=rwx,g=rx,o= /opt/kafka/data /opt/kafka/logs /opt/kafka/config
- 以专用用户启动服务:
sudo su - kafka -c “/opt/kafka/bin/kafka-server-start.sh /opt/kafka/config/server.properties”
说明:目录权限与最小权限运行可显著降低被提权与数据泄露风险。
三 启用 SASL 认证与授权
- 选择机制:生产环境优先 SASL/SCRAM;如需加密通道,叠加 SASL_SSL。以下给出 SCRAM 的最小可用配置。
- 创建 Broker 间通信与管理员凭据(在任一存活的 Zookeeper 节点执行,broker 启动前先创建管理员):
管理员(后续作为超级用户)
bin/kafka-configs.sh --zookeeper localhost:2181
–alter --add-config ‘SCRAM-SHA-256=[password=Admin@123],SCRAM-SHA-512=[password=Admin@123]’
–entity-type users --entity-name admin
客户端示例用户
bin/kafka-configs.sh --zookeeper localhost:2181
–alter --add-config ‘SCRAM-SHA-256=[iterations=8192,password=Prod@123]’
–entity-type users --entity-name producer
bin/kafka-configs.sh --zookeeper localhost:2181
–alter --add-config ‘SCRAM-SHA-256=[iterations=8192,password=Cons@123]’
–entity-type users --entity-name consumer
- 配置 Broker 的 server.properties(示例为纯 SASL_PLAINTEXT;如需加密,改为 SASL_SSL 并配置 keystore/truststore):
listeners=SASL_PLAINTEXT://0.0.0.0:9092
advertised.listeners=SASL_PLAINTEXT://:9092
security.inter.broker.protocol=SASL_PLAINTEXT
sasl.mechanism.inter.broker.protocol=SCRAM-SHA-256
sasl.enabled.mechanisms=SCRAM-SHA-256
authorizer.class.name=org.apache.kafka.common.security.auth.SimpleAclAuthorizer
allow.everyone.if.no.acl.found=false
super.users=User:admin
- 配置 JAAS(kafka_server_jaas.conf):
KafkaServer {
org.apache.kafka.common.security.scram.ScramLoginModule required
username=“admin”
password=“Admin@123”;
};
- 启动参数注入 JAAS(任选其一):
- 方式A:export KAFKA_OPTS=“-Djava.security.auth.login.config=/opt/kafka/config/kafka_server_jaas.conf”
- 方式B:在 kafka-server-start.sh 的 exec 前追加
-Djava.security.auth.login.config=/opt/kafka/config/kafka_server_jaas.conf
说明:SCRAM 凭证存储在 Zookeeper,支持动态增删改;broker 间通信用户需提前创建,避免启动失败。
四 配置 ACL 与客户端最小权限示例
- 常用 ACL 命令模板(–authorizer-properties 指向 Zookeeper;对主题/消费组/集群等资源授权):
生产者在主题级别写权限
bin/kafka-acls.sh --authorizer-properties zookeeper.connect=localhost:2181
–add --allow-principal User:producer --operation Write --operation Describe
–topic test-topic --producer
消费者组读取权限(含消费组 Describe 与读)
bin/kafka-acls.sh --authorizer-properties zookeeper.connect=localhost:2181
–add --allow-principal User:consumer --operation Read --operation Describe
–topic test-topic --group test-group
集群级管理权限(谨慎授予)
bin/kafka-acls.sh --authorizer-properties zookeeper.connect=localhost:2181
–add --allow-principal User:admin --operation ClusterAction --cluster
查看 ACL
bin/kafka-acls.sh --authorizer-properties zookeeper.connect=localhost:2181
–list --topic test-topic
说明:ACL 支持按 User:principal 授予 Read/Write/Describe/Create/Delete/ClusterAction 等操作,遵循最小权限原则,避免授予 allow.everyone 的隐式权限。
五 客户端配置与网络加固
- 客户端属性示例(producer.properties / consumer.properties):
security.protocol=SASL_PLAINTEXT
sasl.mechanism=SCRAM-SHA-256
sasl.jaas.config=org.apache.kafka.common.security.scram.ScramLoginModule required
username=“producer” password=“Prod@123”;
如需双向 TLS,改为 SASL_SSL 并配置 ssl.truststore.location / ssl.keystore.location 等参数。
- 网络与防火墙:仅开放 9092(或实际监听端口)至可信网段;如使用云环境,配合安全组白名单策略。
- 安全加固清单:
- 以 非 root 专用用户运行;
- 启用 SASL/SSL,定期轮换 SCRAM 密码;
- 仅授予必要 ACL,禁用默认放行;
- 开启并保护 审计日志,持续监控异常访问;
- 及时升级 Kafka 与依赖组件,定期安全评估与配置扫描。
说明:客户端凭据可通过 JAAS 文件或 sasl.jaas.config 内联提供;网络最小暴露面与持续监控是生产环境的必要措施。