🔐 第 15 章 · Kafka 安全与多租户可视化

三个交互工具:① 鉴权机制选择决策树 ② ACL 五元组建模 ③ Quota 限速动画。

① 鉴权机制选择决策树

点击你的场景,系统会推荐最合适的鉴权机制。

🏢 内部基础设施互联(Broker↔Broker、Connect↔Broker,零信任内网)
🏘️ 跨业务团队多租户(每团队一个账号、需要动态增删用户)
🏛️ 已有 Kerberos / Hadoop 生态(接入现有 SSO)
☁️ 云原生 / 统一 IAM(Keycloak、Okta、Auth0、Confluent Cloud)
🧪 本地开发 / 测试集群(不在意安全、追求易用)
🌐 跨公网 / 跨数据中心(特别提示:必须加密!)

② ACL 五元组建模工具

填入资源 / 操作 / 用户,自动生成 kafka-acls.sh 命令。

字段取值
Permission
Principal
Resource Type
Resource Name
Pattern Type
Operation
Host

生成的命令

点击「生成命令」按钮…

等价 Allow/Deny 评估流程

1️⃣ super.users? → No
2️⃣ matching Deny? → No
3️⃣ matching Allow? → Yes ✅ ALLOW
4️⃣ default? → (skip)

③ Quota 限速动画

设置一个 producer_byte_rate 限额,观察超过的请求如何被 Broker throttle。

当前速率:
0 MB/s    throttle_time_ms0
🟢 绿色 = 正常请求即时返回;🟡 黄色 = 被 throttle 的请求,broker 故意延迟响应。 SDK 看到 throttle_time_ms 后会 sleep 这段时间,自然把速率压回阈值。

④ 安全协议矩阵速查

协议加密鉴权典型用途
PLAINTEXT本地开发
SSL✅ TLS✅ 客户端证书(mTLS)内部基础设施
SASL_PLAINTEXT✅ SASL⚠ 仅同一信任域内网
SASL_SSL✅ TLS✅ SASL⭐ 生产标配

⑤ 五种鉴权机制对比卡片

🔐 mTLS(SSL 双向)

凭证:X.509 客户端证书

动态增删用户:需要 CA 重签 / 吊销

难度:★★★★ PKI 体系门槛高

选我:Broker↔Broker、Connect↔Broker

🔑 SASL/SCRAM-SHA-256(推荐)

凭证:用户名 + 盐 + 多轮哈希挑战

动态增删:✅ 通过 kafka-configs.sh 立即生效

难度:★★ 配置简单

选我:99% 的多租户生产场景

📜 SASL/PLAIN(仅测试)

凭证:用户名 + 明文密码

动态增删:❌ 改 JAAS 必须重启 broker

难度:★ 最简单

选我:本地开发 / 演示

🏛️ SASL/GSSAPI(Kerberos)

凭证:Kerberos Ticket(KDC 颁发)

动态增删:✅ KDC 管理

难度:★★★★★ 极复杂

选我:已有 AD / Hadoop 生态

☁️ SASL/OAUTHBEARER

凭证:OAuth 2.0 Bearer Token

动态增删:✅ IDP 管理

难度:★★★ 需要 IDP

选我:云原生 / Confluent Cloud

🚫 何时绝对不能用

SASL_PLAINTEXT 走公网

❌ SuperUser 给业务账号

allow.everyone.if.no.acl.found=true

ssl.client.auth=none 还自称 mTLS

⑥ 多租户最小权限范式(8 步)

#步骤关键命令
1分层隔离:集群 / 团队 / 应用命名规范 + 平台工单
2Topic 命名前缀强约束<env>.<team>.<domain>.<event>
3每团队 1 SCRAM 用户kafka-configs.sh ... add-config 'SCRAM-SHA-256=[...]'
4PREFIXED ACL 一次到位--topic 'prod.team-order.' --resource-pattern-type PREFIXED
5跨团队消费走工单B Owner 审批 → 加一条 Read ACL
6Quota 默认兜底--entity-type users --entity-default
7SuperUser 仅 Operatorsuper.users=User:kafka-ops
8审计日志 90 天log4j.logger.kafka.authorizer.logger=DEBUG

💡 落地脚本见 15_security/code/scram_user_setup.shacl_examples.sh