CentOS下Kafka权限管理指南
在CentOS环境中,Kafka的权限管理需通过**认证(Authentication)确认用户身份,再通过授权(Authorization)**控制其对资源的操作权限。以下是具体实施步骤:
权限管理需先确保客户端与服务端身份可信,Kafka常用SASL/SCRAM(推荐)或SASL/PLAIN认证。
修改服务端配置(server.properties)
指定认证协议、机制及JAAS配置文件路径,示例如下:
# 认证协议(客户端与服务端通信协议)
security.protocol=SASL_PLAINTEXT # 生产环境建议用SASL_SSL(需额外配置SSL加密)
# 支持的认证机制(服务端需包含客户端使用的机制)
sasl.enabled.mechanisms=SCRAM-SHA-256
# Broker间通信协议(集群内部同步需与security.protocol一致)
security.inter.broker.protocol=SASL_PLAINTEXT
# 指定JAAS配置文件路径(需提前创建)
sasl.jaas.config=/usr/local/kafka/config/kafka_server_jaas.conf
# 授权机制(使用ACL)
authorizer.class.name=kafka.security.auth.SimpleAclAuthorizer
# 禁止未配置ACL的用户访问(生产环境必须为false)
allow.everyone.if.no.acl.found=false
# 定义超级用户(不受ACL限制,需与JAAS文件中的用户一致)
super.users=User:admin
创建JAAS配置文件(kafka_server_jaas.conf)
用于存储Broker认证的用户凭据(如admin、producer、consumer),示例如下:
KafkaServer {
org.apache.kafka.common.security.scram.ScramLoginModule required
username="admin"
password="admin-secret"
user_admin="admin-secret" # admin用户的SCRAM密码
user_producer="producer-secret" # producer用户的SCRAM密码
user_consumer="consumer-secret"; # consumer用户的SCRAM密码
};
加载JAAS配置到Kafka启动脚本
编辑kafka-server-start.sh,在启动命令前添加JAAS配置路径:
export KAFKA_OPTS="-Djava.security.auth.login.config=/usr/local/kafka/config/kafka_server_jaas.conf"
重启Kafka服务
使配置生效:
systemctl restart kafka
ACL(访问控制列表)用于定义用户/用户组对Kafka资源(主题、分区、消费者组等)的操作权限(读、写、创建、删除等)。
Kafka提供kafka-acls.sh脚本管理ACL,常用操作包括添加、删除、列出权限。
producer授予my-topic主题的写权限(用于生产消息):kafka-acls.sh --authorizer-properties zookeeper.connect=localhost:2181 \
--add --allow --principal User:producer --operation Write --topic my-topic
给用户consumer授予my-topic主题的读权限及对应消费者组的读权限(用于消费消息):kafka-acls.sh --authorizer-properties zookeeper.connect=localhost:2181 \
--add --allow --principal User:consumer --operation Read --topic my-topic \
--group consumer-group
developers授予dev-topic主题的读写权限:kafka-acls.sh --authorizer-properties zookeeper.connect=localhost:2181 \
--add --allow --principal Group:developers --operation Read --operation Write --topic dev-topic
admin)无需ACL规则即可访问所有资源,但需在server.properties中预先定义(见上文)。若需撤销权限,可使用--remove参数,示例如下:
# 撤销用户consumer对my-topic的读权限
kafka-acls.sh --authorizer-properties zookeeper.connect=localhost:2181 \
--remove --allow --principal User:consumer --operation Read --topic my-topic
列出指定主题的所有权限规则:
kafka-acls.sh --authorizer-properties zookeeper.connect=localhost:2181 \
--list --topic my-topic
输出示例:
Current ACLs for resource `Topic:my-topic`:
User:producer has Allow permission for operations: Write from hosts: *
User:consumer has Allow permission for operations: Read from hosts: * (group: consumer-group)
security.protocol=SASL_SSL,并设置信任库、密钥库路径)。Read权限,生产者仅需Write权限),避免过度授权。kafka-acls.sh --list定期检查ACL规则,及时删除不必要的权限。server.properties、kafka_server_jaas.conf等关键配置文件,防止配置丢失。通过以上步骤,可在CentOS环境下实现Kafka的权限管理,确保集群数据的安全性。