首页/数据/数据工程与 ETL 速查/Kafka 安全:SSL 与 SASL 要点
Kafka64 条

Kafka 安全:SSL 与 SASL 要点

生产集群建议同时启用传输加密与认证:TLS 保护链路、SASL 校验客户端身份、ACL 控制主题级权限;三者可以组合为 SASL_SSL。

Kafka 安全的三层机制

Kafka 的安全能力分三层:传输加密(SSL/TLS)保护链路不被窃听篡改,认证(SASL)确认客户端身份,授权(ACL)决定这个身份能对哪些主题、消费组和集群操作做些什么。生产中通常组合使用,即把 listeners 配置为 SASL_SSL。启用建议分步走:先开认证,再按客户端逐步收紧 ACL,一次性全部拒绝会让尚未改造的业务直接中断。

基本信息

加密SSL/TLS:服务端配 keystore,客户端配 truststore
认证SASL 机制:SCRAM、GSSAPI、PLAIN(PLAIN 仅限内层已加密)
授权ACL 控制主题、消费组与集群级操作权限
常见组合listeners=SASL_SSL://0.0.0.0:9093

典型使用场景

  • 公网或跨机房访问的集群:传输加密是必备项
  • 多租户集群:用 ACL 把主题权限收敛到具体应用账号
  • 合规审计:需要明确谁在什么时间读写过哪些主题
  • 凭据轮换:SCRAM 账号定期改密,配合客户端滚动更新
  • 分级迁移:先启用认证观察一段时间,再逐步引入 ACL 规则

服务端与客户端配置片段

服务端与客户端配置片段
# 服务端 server.properties
listeners=SASL_SSL://0.0.0.0:9093
sasl.enabled.mechanisms=SCRAM-SHA-512
ssl.keystore.location=/etc/kafka/ssl/kafka.keystore.jks
ssl.keystore.password=******
ssl.truststore.location=/etc/kafka/ssl/kafka.truststore.jks

# 客户端
security.protocol=SASL_SSL
sasl.mechanism=SCRAM-SHA-512
sasl.jaas.config=org.apache.kafka.common.security.scram.ScramLoginModule required \
  username="app-order" password="******";

机制与不做的后果

层次解决的问题不做的后果
TLS 加密链路窃听与篡改凭据与业务数据可被明文嗅探
SASL 认证客户端身份是否可信任何能连上端口的人都能读写
ACL 授权操作权限最小化合法账号可越权访问全部主题
配额 quota租户间带宽与请求隔离单租户可打满集群资源
开启认证与授权是分步迁移过程:先启用认证,再按客户端逐个启用 ACL,最后才收紧默认策略,一次性全部拒绝会把尚未改造的客户端直接挡在门外。
凭据写进配置文件时要配合文件权限与密钥管理,禁止提交到代码仓库;轮换密码也要留足客户端滚动更新的窗口,避免换密瞬间大面积连接失败。

易错点

  • 只启用 SASL 认证不配 ACL,等于认证通过的人可读写全部主题,安全收益有限
  • 默认策略收紧后忘记给内部主题放行,消费组位移无法提交,业务表现为重复消费
  • 凭据写进代码仓库或命令行参数,泄露后可直接用于读写生产数据
  • 证书过期未纳入监控,TLS 握手失败会让整条链路的客户端在同一时刻集体掉线

数据来源与参考

  • Apache Kafka 官方文档:Security(SSL、SASL、Authorization)
​‌‌​​‌​​​‌‌​‌‌‌‌​‌‌​​​‌‌​‌‌‌​​‌‌​​‌​‌‌‌​​‌‌‌​​​‌​‌‌​‌​​‌​‌‌‌​​​‌​‌‌​‌​​‌​‌‌​​​‌‌​‌‌‌​‌​​​‌‌​‌‌‌‌​​‌​‌‌‌​​‌‌​​​‌‌​‌‌​‌‌‌‌​‌‌​‌‌​‌