Kafka 在 CentOS 上的安全认证机制
一、核心机制总览
- SASL 认证框架:Kafka 通过 SASL 提供多种身份验证方式,覆盖 Client↔Broker、Broker↔Broker 以及 Broker↔Zookeeper 的认证链路。常见机制包括:
- SASL/GSSAPI(Kerberos):企业级统一认证,适合多系统联动与强安全场景。
- SASL/SCRAM-SHA-256 / SCRAM-SHA-512:基于挑战-响应的口令认证,支持动态增删用户,运维友好。
- SASL/PLAIN:账号密码明文传输(需配合 TLS 加密),实现简单,常用于内网或测试。
- 信道加密(SSL/TLS):为客户端与 Broker、Broker 与 Broker 之间的链路提供传输层加密,通常与 SASL 组合为 SASL_SSL,也可单独使用 SSL(不建议生产环境明文传输)。
- 授权与访问控制(ACL):在认证通过后,使用 ACL 控制用户对 Topic/Group/Cluster 等资源的 读/写/创建/删除 权限,支持按用户或主体进行细粒度授权。
二、常见机制与适用场景
| 机制 |
协议组合 |
主要特点 |
典型场景 |
| SASL/GSSAPI(Kerberos) |
SASL_PLAINTEXT / SASL_SSL |
企业统一认证、票据机制、强安全 |
多系统集成、合规要求高 |
| SASL/SCRAM-SHA-256/512 |
SASL_PLAINTEXT / SASL_SSL |
口令存储安全、支持动态用户管理 |
内网/跨机房、运维可控 |
| SASL/PLAIN |
SASL_PLAINTEXT / SASL_SSL |
配置简单、明文口令(必须配 TLS) |
快速上线、测试环境 |
| SSL/TLS |
SSL / SASL_SSL |
传输加密、证书校验 |
公网/跨域访问、合规加密 |
| ACL |
与 SASL/SSL 组合 |
细粒度授权、主体/资源/操作 |
生产权限治理 |
| 以上机制在 CentOS 上的配置方式与其他 Linux 发行版一致,差异主要在系统服务管理与防火墙命令层面。 |
|
|
|
三、快速配置示例 SCRAM-SHA-512 + SASL_SSL(生产常用)
- 生成 SCRAM 用户(示例创建 admin)
- 命令:bin/kafka-configs.sh --bootstrap-server broker:9092 --alter --add-config ‘SCRAM-SHA-512=[password=]’ --entity-type users --entity-name admin
- 服务端配置 server.properties(关键项)
- listeners=SASL_SSL://:9093
- advertised.listeners=SASL_SSL://:9093
- security.inter.broker.protocol=SASL_SSL
- sasl.enabled.mechanisms=SCRAM-SHA-512
- sasl.mechanism.inter.broker.protocol=SCRAM-SHA-512
- inter.broker.listener.name=SASL_SSL
- ssl.keystore.location=/path/to/kafka.server.keystore.jks
- ssl.keystore.password=
- ssl.key.password=
- ssl.truststore.location=/path/to/kafka.server.truststore.jks
- ssl.truststore.password=
- ssl.client.auth=required
- ssl.enabled.protocols=TLSv1.2,TLSv1.3
- 服务端 JAAS(示例)
- KafkaServer {
org.apache.kafka.common.security.scram.ScramLoginModule required
username=“admin” password=“”;
};
- 客户端连接示例(producer/consumer 或脚本)
- security.protocol=SASL_SSL
- sasl.mechanism=SCRAM-SHA-512
- sasl.jaas.config=org.apache.kafka.common.security.scram.ScramLoginModule required username=“” password=“”;
- 说明
- 若使用 PLAIN,将机制改为 SASL/PLAIN 并在 JAAS 中使用 PlainLoginModule;务必配合 TLS 使用。
- 若使用 GSSAPI(Kerberos),需部署 KDC,并在 server.properties 中设置 sasl.mechanism.inter.broker.protocol=GSSAPI、security.inter.broker.protocol=SASL_PLAINTEXT 或 SASL_SSL,同时准备 JAAS 与 krb5.conf。
四、授权与网络加固要点
- 启用 ACL(在 server.properties)
- authorizer.class.name=kafka.security.authorizer.AclAuthorizer
- allow.everyone.if.no.acl.found=false
- super.users=User:(如 Kerberos 则为 User:kafka/your-host@REALM)
- 常用 ACL 管理示例
- 给用户授予主题写权限:bin/kafka-acls.sh --bootstrap-server broker:9092 --add --allow-principal User: --operation Write --topic
- 查看 ACL:bin/kafka-acls.sh --bootstrap-server broker:9092 --list --topic
- 网络与端口
- 开放端口(firewalld):firewall-cmd --permanent --add-port=9093/tcp && firewall-cmd --reload
- 建议仅暴露 SASL_SSL 端口(如 9093),并限制来源网段。