1. 认证配置(Authentication)
认证是确保Kafka broker与客户端、broker之间身份合法性的基础。Debian环境下常用以下方式:
kafka_server_jaas.conf
),内容示例:KafkaServer { org.apache.kafka.common.security.plain.PlainLoginModule required username="admin" password="admin-secret"; };
。然后在server.properties
中启用:listeners=SASL_PLAINTEXT://:9092
、security.inter.broker.protocol=SASL_PLAINTEXT
、sasl.mechanism.inter.broker.protocol=PLAIN
、sasl.enabled.mechanisms=PLAIN
、sasl.jaas.config=/path/to/kafka_server_jaas.conf
。kafka-configs
命令创建用户凭证:kafka-configs --zookeeper localhost:2181 --alter --add-config 'SCRAM-SHA-256=[iterations=8192,password=admin]' --entity-type users --entity-name admin
。配置server.properties
时,将sasl.mechanism.inter.broker.protocol
设为SCRAM-SHA-256
,客户端需指定对应的security.protocol
(如SASL_SSL
)和mechanism
。2. 加密传输(Encryption in Transit)
通过SSL/TLS加密broker与客户端、broker之间的通信,防止数据泄露:
keytool
命令,示例:keytool -genkey -alias kafka -keystore kafka.server.keystore.jks -validity 3650 -keyalg RSA
(生成Keystore),keytool -export -alias kafka -file kafka.server.crt -keystore kafka.server.keystore.jks
(导出证书),keytool -import -alias kafka -file kafka.server.crt -keystore kafka.server.truststore.jks
(将证书导入Truststore)。server.properties
:设置listeners=SSL://:9093
、security.inter.broker.protocol=SSL
、ssl.keystore.location=/path/to/kafka.server.keystore.jks
、ssl.keystore.password=your_password
、ssl.truststore.location=/path/to/kafka.server.truststore.jks
、ssl.truststore.password=your_password
。客户端需对应配置security.protocol=SSL
及信任库路径。3. 授权管理(Authorization)
通过访问控制列表(ACL)实现细粒度的资源访问控制,限制用户对topic、消费组等资源的操作权限:
server.properties
中设置authorizer.class.name=kafka.security.auth.SimpleAclAuthorizer
、allow.everyone.if.no.acl.found=false
(无ACL时拒绝访问)、super.users=User:admin
(定义超级用户,可管理所有资源)。kafka-acls.sh
命令,示例:kafka-acls.sh --authorizer-properties zookeeper.connect=localhost:2181 --add --allow-principal User:writer --operation Read,Write --topic test_topic
(允许writer
用户对test_topic
进行读写操作)。4. 操作系统级安全
限制Kafka进程的权限,减少攻击面:
sudo groupadd kafka
、sudo useradd -g kafka kafka
。sudo chown -R kafka:kafka /path/to/kafka
(确保Kafka进程仅能访问自身目录)。ufw
或iptables
开放必要端口(如SSL端口9093、SASL端口9092),示例:sudo ufw allow 9093/tcp
、sudo ufw enable
。5. 审计与监控
记录安全相关操作,便于追踪异常行为:
server.properties
中设置audit.log.enable=true
、audit.log.dir=/path/to/audit/log
(指定审计日志目录),记录用户操作(如创建topic、发送消息)和时间戳。