Debian环境下Kafka安全配置实践
以下清单面向 Debian 11/12,覆盖 认证、加密、授权、网络隔离与运维 的关键步骤,可直接用于生产前的安全加固与验收。
一 环境与前置准备
- 安装基础组件:更新系统并安装 OpenJDK 11、keytool 与 UFW(防火墙)。
- 准备 Kafka 发行包:建议选择稳定版本(如 3.5.x),解压至 /opt/kafka,创建专用系统用户(如 kafka:kafka),将配置与证书目录置于 /etc/kafka/ssl,并调整目录权限与属主,避免使用 root 运行。
- 目录与权限示例:
- 配置:/etc/kafka/server.properties
- JAAS:/etc/kafka/kafka_server_jaas.conf
- 证书:/etc/kafka/ssl/(仅 kafka 用户可读)
- 基础防火墙:仅开放必要端口(如 9093 用于 SASL_SSL,若使用 ZooKeeper 则 2181)。
二 传输加密 SSL TLS
- 生成密钥与证书(Broker 端):
- 创建 Keystore(生产请将 CN 设为实际主机名或域名):
- keytool -genkey -alias kafka -keystore /etc/kafka/ssl/kafka.keystore.jks -keyalg RSA -validity 365 -storepass keystore_password -keypass key_password -dname “CN=localhost, OU=IT, O=YourCompany, L=City, ST=State, C=US”
- 导出证书:
- keytool -export -alias kafka -file /etc/kafka/ssl/kafka.crt -keystore /etc/kafka/ssl/kafka.keystore.jks -storepass keystore_password
- 创建并导入 Truststore(客户端与 Broker 互信):
- keytool -import -alias kafka -file /etc/kafka/ssl/kafka.crt -keystore /etc/kafka/ssl/kafka.truststore.jks -storepass truststore_password -noprompt
- Broker 配置 server.properties(仅列出关键项):
- listeners=SASL_SSL://0.0.0.0:9093
- security.inter.broker.protocol=SASL_SSL
- ssl.keystore.location=/etc/kafka/ssl/kafka.keystore.jks
- ssl.keystore.password=keystore_password
- ssl.key.password=key_password
- ssl.truststore.location=/etc/kafka/ssl/kafka.truststore.jks
- ssl.truststore.password=truststore_password
- ssl.enabled.protocols=TLSv1.2,TLSv1.3
- ssl.cipher.suites=TLS_AES_128_GCM_SHA256,TLS_AES_256_GCM_SHA384
- 说明:若仅做传输加密(不做认证),可将 listeners 设为 SSL://… 并相应调整 inter.broker.protocol;生产强烈建议与 SASL 组合使用。
三 身份认证 SASL
- 选择机制:优先 SCRAM-SHA-256/512(密码哈希加盐,优于明文 PLAIN);如与现有系统集成可选 OAUTHBEARER;不建议在生产使用 PLAIN 除非强制启用 TLS。
- JAAS 配置(/etc/kafka/kafka_server_jaas.conf):
- SCRAM 示例:
- KafkaServer {
- org.apache.kafka.common.security.scram.ScramLoginModule required
- username=“admin”
- password=“securepassword”
- user_admin=“securepassword”;
- };
- Broker 启用 SASL(server.properties):
- listeners=SASL_SSL://0.0.0.0:9093
- security.inter.broker.protocol=SASL_SSL
- sasl.mechanism.inter.broker.protocol=SCRAM-SHA-256
- sasl.enabled.mechanisms=SCRAM-SHA-256
- sasl.jaas.config=/etc/kafka/kafka_server_jaas.conf
- 环境变量(/etc/kafka/kafka-env.sh):export KAFKA_OPTS=“-Djava.security.auth.login.config=/etc/kafka/kafka_server_jaas.conf”
- 动态创建用户(SCRAM,无需重启):
- kafka-configs.sh --bootstrap-server localhost:9093 --alter --add-config ‘SCRAM-SHA-256=[password=]’ --entity-type users --entity-name user1
- 客户端最小配置(client.properties):
- security.protocol=SASL_SSL
- sasl.mechanism=SCRAM-SHA-256
- sasl.jaas.config=org.apache.kafka.common.security.scram.ScramLoginModule required username=“user1” password=“”;
- ssl.truststore.location=/etc/kafka/ssl/kafka.truststore.jks
- ssl.truststore.password=truststore_password
- 补充:
- 若使用 SASL/PLAIN,务必与 TLS 同时使用,避免明文口令泄露。
- 若使用 OAUTHBEARER,需提供令牌与回调处理,默认实现仅用于非生产验证。
四 授权与最小权限 ACL
- 启用 ACL(server.properties):
- authorizer.class.name=kafka.security.authorizer.AclAuthorizer
- allow.everyone.if.no.acl.found=false
- super.users=User:admin
- 常用 ACL 示例(按需在命令中替换主体与资源):
- 管理员全权(主题/组/集群):
- /opt/kafka/bin/kafka-acls.sh --authorizer-properties zookeeper.connect=localhost:2181
–add --allow-principal User:admin --operation All --topic my_topic --group ‘*’ --cluster
- 生产者写主题:
- /opt/kafka/bin/kafka-acls.sh --authorizer-properties zookeeper.connect=localhost:2181
–add --allow-principal User:producer1 --operation Write --topic orders
- 消费者组读主题:
- /opt/kafka/bin/kafka-acls.sh --authorizer-properties zookeeper.connect=localhost:2181
–add --allow-principal User:consumer1 --operation Read --topic logs --group consumers
- 查看 ACL:
- /opt/kafka/bin/kafka-acls.sh --authorizer-properties zookeeper.connect=localhost:2181 --list --topic orders
- 提示:ACL 资源包含 Topic/Group/Cluster,操作含 Read/Write/Create/Delete/Describe/Alter 等,遵循最小权限原则。
五 网络安全与运维加固
- 防火墙与监听地址:
- UFW 仅放行 9093/tcp(SASL_SSL),如用 ZooKeeper 再放行 2181/tcp;生产建议监听具体 主机名/IP 而非 0.0.0.0,减少暴露面。
- 示例:sudo ufw allow 9093/tcp;sudo ufw enable;sudo ufw status verbose
- 服务与进程隔离:
- 使用 systemd 以 kafka 用户运行,限制文件权限与端口绑定能力;日志目录与证书目录仅对 kafka 可读。
- 证书与凭据治理:
- Keystore/Truststore 口令使用强口令并集中保管;定期轮换证书;对外部系统使用 最小权限 的专用账号与 ACL。
- 监控与审计:
- 持续审计 /var/log/kafka/server.log 与 controller.log,关注认证失败、ACL 拒绝、异常连接与重启事件;对生产变更采用变更单与回滚预案。
- 升级与补丁:
- 及时更新 Debian 安全补丁、Java、Kafka 版本,修复已知漏洞;变更前在测试环境验证安全配置与业务兼容性。