Kafka 的认证(Authentication )用于验证 客户端 / Broker / 组件身份是否合法 ,是 Kafka 安全体系(Security)的第一层,通常与 授权(Authorization / ACL) 配合使用。
Kafka 当前支持 4 大类认证机制 ,基于 SASL + SSL/TLS 架构组合实现。
一、Kafka 安全架构整体模型
Kafka 安全由三层组成:
Client
│
▼
[ Authentication ] ← 认证:你是谁
│
▼
[ Encryption ] ← 加密:通信是否安全
│
▼
[ Authorization ] ← 权限:你能做什么
对应技术:
| 安全层 | Kafka 技术 |
|---|---|
| 认证 | SASL / SSL |
| 加密 | SSL/TLS |
| 授权 | ACL |
二、Kafka 支持的认证方式总览
Kafka 支持以下认证协议:
| 类型 | 认证方式 | 是否推荐 | 典型场景 |
|---|---|---|---|
| SSL | SSL 双向认证 | ⭐⭐⭐⭐ | 高安全生产 |
| SASL | PLAIN | ⭐⭐ | 内网简单认证 |
| SASL | SCRAM-SHA | ⭐⭐⭐⭐⭐ | 主流生产推荐 |
| SASL | GSSAPI(Kerberos) | ⭐⭐⭐ | 大企业 AD |
| SASL | OAUTHBEARER | ⭐⭐⭐⭐ | 云原生 / IAM |
三、SSL 认证(TLS 双向认证)
1️⃣ 原理
基于证书认证:
Client ←→ Broker
双向 TLS 握手
双方验证:
-
CA 签发证书
-
公钥/私钥匹配
2️⃣ 特点
✅ 强安全
✅ 无密码传输
✅ 自动加密通信
❌ 证书管理复杂
3️⃣ 工作流程
1. Client 提供证书
2. Broker 验证 CA
3. Broker 提供证书
4. Client 验证
5. 建立 TLS 通道
4️⃣ 配置示例
server.properties
listeners=SSL://:9093
ssl.keystore.location=/kafka/server.keystore.jks
ssl.keystore.password=123456
ssl.truststore.location=/kafka/server.truststore.jks
ssl.truststore.password=123456
ssl.client.auth=required
5️⃣ 适用场景
✔ 金融系统
✔ 跨公网通信
✔ 强合规环境
四、SASL 认证体系
SASL = Simple Authentication and Security Layer
Kafka 实际最常用认证框架。
结构:
SASL
├── PLAIN
├── SCRAM
├── GSSAPI
└── OAUTHBEARER
五、SASL/PLAIN
1️⃣ 原理
用户名 + 密码认证:
username + password
2️⃣ 配置方式
Broker
listeners=SASL_PLAINTEXT://:9092
sasl.enabled.mechanisms=PLAIN
JAAS:
KafkaServer {
org.apache.kafka.common.security.plain.PlainLoginModule required
username="admin"
password="admin-secret"
user_admin="admin-secret";
};
3️⃣ 特点
✅ 简单
✅ 易部署
❌ 明文密码(必须配 SSL)
⚠️ 生产建议
不要单独使用:
SASL_PLAINTEXT ❌
SASL_SSL ✅
六、SASL/SCRAM(⭐⭐⭐⭐⭐ 推荐)
当前 Kafka 最主流认证方式。
1️⃣ SCRAM 是什么
SCRAM =
Salted Challenge Response Authentication Mechanism
特点:
-
不传输密码
-
哈希挑战认证
-
防重放攻击
支持:
SCRAM-SHA-256
SCRAM-SHA-512(推荐)
2️⃣ 认证流程(简化)
Client → username
Broker → salt + challenge
Client → hash(password)
Broker → verify
密码永远不会直接发送。
3️⃣ 创建用户
kafka-configs.sh \
--bootstrap-server localhost:9092 \
--alter \
--add-config 'SCRAM-SHA-512=[password=123456]' \
--entity-type users \
--entity-name appuser
4️⃣ Broker 配置
listeners=SASL_SSL://:9093
sasl.enabled.mechanisms=SCRAM-SHA-512
sasl.mechanism.inter.broker.protocol=SCRAM-SHA-512
5️⃣ 客户端配置
security.protocol=SASL_SSL
sasl.mechanism=SCRAM-SHA-512
sasl.jaas.config=org.apache.kafka.common.security.scram.ScramLoginModule required \
username="appuser" \
password="123456";
6️⃣ 优势
✅ 密码不落网
✅ 支持动态用户
✅ 安全性高
✅ 运维成本低
👉 Kafka 官方生产首选
七、SASL/GSSAPI(Kerberos)
企业级认证方案。
特点
-
基于 Kerberos Ticket
-
与 AD 集成
-
单点登录(SSO)
工作流程
Client → KDC → Ticket
Client → Kafka (带 Ticket)
Kafka 验证
优点
✅ 无密码
✅ 集中身份管理
缺点
❌ 部署复杂
❌ 维护成本高
适合
-
银行
-
政企
-
Hadoop 生态
八、SASL/OAUTHBEARER(云原生)
现代 Kafka(3.x+)重点方向。
原理
使用 OAuth2 Token:
JWT Token → Kafka
支持:
-
Keycloak
-
Okta
-
AWS IAM
-
Azure AD
优势
✅ 与 IAM 集成
✅ 短期 Token
✅ 零信任架构
使用场景
-
Kubernetes
-
云 Kafka
-
微服务平台
九、认证方式安全性对比
| 方式 | 安全性 | 运维难度 | 推荐指数 |
|---|---|---|---|
| SSL | ⭐⭐⭐⭐⭐ | ⭐⭐⭐⭐ | ⭐⭐⭐⭐ |
| SASL/PLAIN | ⭐⭐ | ⭐ | ⭐ |
| SASL/SCRAM | ⭐⭐⭐⭐⭐ | ⭐⭐ | ⭐⭐⭐⭐⭐ |
| Kerberos | ⭐⭐⭐⭐⭐ | ⭐⭐⭐⭐⭐ | ⭐⭐⭐ |
| OAuth | ⭐⭐⭐⭐⭐ | ⭐⭐⭐ | ⭐⭐⭐⭐ |
十、Kafka Listener 与认证关系(核心)
Kafka 认证绑定在 Listener 上。
示例:
listeners=
PLAINTEXT://:9092,
SASL_SSL://:9093,
SSL://:9094
不同端口 → 不同认证方式。
十一、生产最佳实践(2026)
⭐ 推荐架构
Client
│
SASL_SSL (SCRAM)
│
Kafka Broker
│
ACL 授权
推荐组合
| 项目 | 推荐 |
|---|---|
| 认证 | SCRAM-SHA-512 |
| 加密 | TLS |
| 协议 | SASL_SSL |
| 授权 | ACL |
十二、常见错误(90% 人踩坑)
❌ 1. inter.broker 未配置
sasl.mechanism.inter.broker.protocol
必须设置。
❌ 2. 忘记设置 listener 映射
listener.security.protocol.map
❌ 3. Controller 未认证(KRaft)
KRaft 需要:
CONTROLLER listener 也必须配置 SASL
十三、一句话选型指南
| 环境 | 推荐 |
|---|---|
| 本地测试 | PLAINTEXT |
| 内网 | SASL_SSL + SCRAM |
| 企业 AD | Kerberos |
| 云原生 | OAuth |
| 高安全 | SSL + SCRAM |
如果你愿意,我可以继续给你 Kafka 4.x(KRaft 模式)认证的专家级实战部分,包括:
✅ KRaft 三角色认证拓扑(Broker / Controller / Client)
✅ SASL_SSL + SCRAM 完整生产配置模板
✅ 多 Listener 安全隔离架构
✅ ACL + Principal 设计规范
✅ 认证故障排查流程(90%问题定位图)
直接告诉我 👍。