在kafka kraft模式启动时使用的 JAAS 配置示例

📅 2026/7/6 3:18:08
在kafka kraft模式启动时使用的 JAAS 配置示例
一、创建 JAAS 配置文件‌文件路径‌config/kafka_server_jaas.confKafkaServer { org.apache.kafka.common.security.plain.PlainLoginModule required usernameadmin passwordadmin-secret user_log_agentgzagent#wn1WEE01 user_log_servergzserver#wn1WEE02; };‌关键说明‌username/passwordBroker 节点之间通信的管理员账户KRaft 模式下 Controller 与 Broker 通信也需要。user_用户名客户端连接时使用的账户前缀必须是user_后接用户名。‌分号;不能少‌否则认证失败。密码中的#是合法字符无需转义。二、修改config/kraft/server.properties# Broker 基础配置 node.id1 controller.quorum.voters1localhost:9093 process.rolesbroker,controller listenersSASL_PLAINTEXT://localhost:9092,CONTROLLER://localhost:9093 advertised.listenersSASL_PLAINTEXT://localhost:9092 inter.broker.listener.nameSASL_PLAINTEXT controller.listener.namesCONTROLLER listener.security.protocol.mapCONTROLLER:PLAINTEXT,SASL_PLAINTEXT:SASL_PLAINTEXT # SASL 认证配置 sasl.enabled.mechanismsPLAIN sasl.mechanism.inter.broker.protocolPLAIN # 授权配置配合 ACL 使用 authorizer.class.namekafka.security.authorizer.AclAuthorizer allow.everyone.if.no.acl.foundfalse super.usersUser:admin # 日志目录 log.dirs/tmp/kraft-combined-logs三、修改启动脚本加载 JAAS 文件‌文件‌bin/kafka-server-start.sh在文件开头export KAFKA_HEAP_OPTS附近添加# 加载 JAAS 配置文件 export KAFKA_OPTS-Djava.security.auth.login.config/path/to/kafka/config/kafka_server_jaas.conf请将/path/to/kafka/替换为你的实际安装路径。四、格式化存储并启动# 加载 JAAS 配置文件 export KAFKA_OPTS-Djava.security.auth.login.config/path/to/kafka/config/kafka_server_jaas.conf五、创建用户并分配 ACL服务启动后使用kafka-configs.sh动态创建用户并设置 SCRAM 密码推荐 SCRAM比 PLAIN 更安全# 创建用户 log_agent写权限 bin/kafka-configs.sh --bootstrap-server localhost:9092 \ --alter \ --add-config SCRAM-SHA-512[passwordgzagent#wn1WEE01] \ --entity-type users \ --entity-name log_agent # 创建用户 log_server读权限 bin/kafka-configs.sh --bootstrap-server localhost:9092 \ --alter \ --add-config SCRAM-SHA-512[passwordgzserver#wn1WEE02] \ --entity-type users \ --entity-name log_server⚠️ 如果使用 ‌PLAIN 机制‌如上方 JAAS 配置则用户信息已经在kafka_server_jaas.conf中定义‌无需再执行kafka-configs.sh创建‌直接用user_log_agent/user_log_server连接即可。但 PLAIN 密码以明文传输‌生产环境强烈建议改用 SCRAM-SHA-512‌。六、分配 ACL 权限# 允许 log_agent 向 Topic 写入 bin/kafka-acls.sh --bootstrap-server localhost:9092 \ --add \ --allow-principal User:log_agent \ --operation Write \ --topic my-private-topic # 允许 log_server 从 Topic 读取 bin/kafka-acls.sh --bootstrap-server localhost:9092 \ --add \ --allow-principal User:log_server \ --operation Read \ --topic my-private-topic \ --group log-server-group七、客户端连接配置生产者 / 消费者生产者log_agentProperties props new Properties(); props.put(bootstrap.servers, localhost:9092); props.put(security.protocol, SASL_PLAINTEXT); // KRaft 单机可用 PLAINTEXT生产建议 SASL_SSL props.put(sasl.mechanism, PLAIN); // 或 SCRAM-SHA-512 props.put(sasl.jaas.config, org.apache.kafka.common.security.plain.PlainLoginModule required username\log_agent\ password\gzagent#wn1WEE01\;);消费者log_serverProperties props new Properties(); props.put(bootstrap.servers, localhost:9092); props.put(security.protocol, SASL_PLAINTEXT); props.put(sasl.mechanism, PLAIN); props.put(sasl.jaas.config, org.apache.kafka.common.security.plain.PlainLoginModule required username\log_server\ password\gzserver#wn1WEE02\;); props.put(group.id, log-server-group);方案对比总结机制JAAS 中定义kafka-configs.sh 创建安全性推荐场景‌SASL/PLAIN‌✅ 在kafka_server_jaas.conf中❌ 不需要低密码明文传输开发/测试‌SASL/SCRAM-SHA-512‌❌ 不需要✅ 动态创建高密码不传输‌生产环境‌‌你的需求是 KRaft 启动配置所以直接用上面的kafka_server_jaas.conf PLAIN 机制即可快速跑通。如需生产级安全建议将sasl.enabled.mechanisms改为SCRAM-SHA-512并用kafka-configs.sh创建用户。附件一Kafka客户端四类常用的安全协议PLAINTEXT SSL SASL_PLAINTEXT SASL_SSL安全协议类型传输加密能力身份认证能力核心特点典型适用场景安全等级PLAINTEXT❌ 无任何加密所有数据明文传输❌ 无身份校验连通网络即可访问配置最简单、性能损耗几乎为0完全无安全防护完全隔离的内网开发测试环境禁止在生产/公网使用极低SSL✅ 基于TLS/SSL全程加密传输防窃听、防篡改❌ 仅做传输层加密不提供账号类身份校验只保障数据传输链路安全不做访问者身份管控仅需要加密传输数据不需要额外用户权限管控的集群中等SASL_PLAINTEXT❌ 数据和认证信息均明文传输✅ 通过SASL框架校验用户名密码拦截未授权访问实现了基础的用户权限管控但账号密码存在被窃听风险封闭内网环境中快速实现基础访问控制不对外暴露中高SASL_SSL✅ 全程TLS加密所有传输数据密文传输✅ 同时支持SASL账号密码身份校验兼顾身份认证和传输加密彻底避免数据泄露、账号盗用风险生产环境集群、公网暴露的集群是生产级标准安全配置最高附件二kafka的几种sasl.mechanism对比Kafka 官方支持的主流 SASL 认证机制核心差异集中在密码传输方式、存储形态、安全性、运维成本等维度以下是完整对比表格SASL 机制密码传输形态服务端密码存储依赖外部组件安全等级核心特点典型适用场景PLAIN明文传输明文存储在 JAAS 配置文件中无完全内置实现低配置最简单开发调试零门槛但账号密码全程明文暴露极易被窃听仅用于完全隔离的内网开发测试环境禁止生产使用SCRAM-SHA-256 / SCRAM-SHA-512传输随机挑战值密码本身不直接传输加盐哈希值存储在 Kafka 内部 Topic 中无明文密码留存无完全内置实现高兼顾安全性和易用性支持动态增删改用户无需重启集群是 Kafka 生产环境的主流标准方案绝大多数自建生产集群不需要额外引入外部认证服务的场景GSSAPI (Kerberos)基于 Ticket 票据完成身份校验全程不传递密码密码存储在独立的 Kerberos KDC 服务端必须部署 Kerberos 域控服务极高企业级强认证方案支持全集群统一身份管控安全性拉满但运维复杂度极高大型金融、政企等已有成熟 Kerberos 体系的企业级生产集群OAUTHBEARER基于 JWT 令牌完成认证不传递原始密码无本地密码存储依赖外部授权服务校验令牌有效性必须对接 OAuth2 授权服务高支持动态令牌、细粒度权限、单点登录适配云原生生态云托管 Kafka 集群、需要对接统一 OAuth 身份体系的云原生场景LDAP需额外扩展自定义实现原生不直接支持密码存储在外部 LDAP 服务端必须对接 LDAP 目录服务中高复用企业已有的账号体系无需在 Kafka 侧重复维护用户已有统一 LDAP 账号管理的企业实现账号打通的场景