温馨提示×

centos kafka权限如何管理

小樊
41
2025-12-23 11:55:59
栏目: 智能运维

CentOS 上 Kafka 权限管理实操指南

一 核心概念与总体思路

  • 权限管理包含三层:
    1. 认证 Authentication:确认客户端/ Broker / Zookeeper 的身份,常用机制有 SASL/PLAIN、SASL/SCRAM、SASL/GSSAPI(Kerberos)
    2. 授权 Authorization:基于 ACL 控制主体(Principal,如 User:alice)对资源(如 Topic、Group、Cluster)的操作(如 Read、Write、Create、Delete、Describe、Alter);
    3. 信道加密 Encryption:通过 SSL/TLS 加密传输(可与 SASL 组合为 SASL_SSL)。
  • 常见取舍:SASL/PLAIN 简单但不支持动态增删用户;SASL/SCRAM 支持运行时新增/修改用户凭据;内网可先用 SASL_PLAINTEXT,生产建议启用 SASL_SSL

二 快速落地 SASL_SCRAM + ACL(推荐)

  • 适用场景:需要运行时增删用户、细粒度 ACL 控制。
  • 步骤
    1. 在 Zookeeper 上创建 SCRAM 用户(Kafka 2.2+ 推荐用 SCRAM 动态管理用户)
      • 创建管理员:
        bin/kafka-configs.sh --zookeeper localhost:2181 --alter --add-config ‘SCRAM-SHA-256=[password=admin-secret],SCRAM-SHA-512=[password=admin-secret]’ --entity-type users --entity-name admin
      • 创建业务用户:
        bin/kafka-configs.sh --zookeeper localhost:2181 --alter --add-config ‘SCRAM-SHA-256=[password=producer-sec],SCRAM-SHA-512=[password=producer-sec]’ --entity-type users --entity-name producer
        bin/kafka-configs.sh --zookeeper localhost:2181 --alter --add-config ‘SCRAM-SHA-256=[password=consumer-sec],SCRAM-SHA-512=[password=consumer-sec]’ --entity-type users --entity-name consumer
      • 查看用户:
        bin/kafka-configs.sh --zookeeper localhost:2181 --describe --entity-type users
    2. 配置 Broker 启用 SASL/SCRAM 与 ACL(server.properties)
      listeners=SASL_PLAINTEXT://0.0.0.0:9092
      advertised.listeners=SASL_PLAINTEXT://:9092
      security.inter.broker.protocol=SASL_PLAINTEXT
      sasl.mechanism.inter.broker.protocol=SCRAM-SHA-256
      sasl.enabled.mechanisms=SCRAM-SHA-256
      authorizer.class.name=kafka.security.authorizer.AclAuthorizer
      allow.everyone.if.no.acl.found=false
      super.users=User:admin
    3. 配置 Broker JAAS(kafka_server_jaas.conf)
      KafkaServer {
      org.apache.kafka.common.security.scram.ScramLoginModule required
      username=“admin” password=“admin-secret”;
      };
      启动前导出:export KAFKA_OPTS=“-Djava.security.auth.login.config=/path/kafka_server_jaas.conf”
    4. 客户端最小配置(示例)
      • 生产者 producer.properties:
        security.protocol=SASL_PLAINTEXT
        sasl.mechanism=SCRAM-SHA-256
        sasl.jaas.config=org.apache.kafka.common.security.scram.ScramLoginModule required username=“producer” password=“producer-sec”;
      • 消费者 consumer.properties:
        security.protocol=SASL_PLAINTEXT
        sasl.mechanism=SCRAM-SHA-256
        sasl.jaas.config=org.apache.kafka.common.security.scram.ScramLoginModule required username=“consumer” password=“consumer-sec”;
        group.id=test-consumer-group
    5. 使用 kafka-acls.sh 配置 ACL(注意消费者需给消费组授权)
      • 授予写权限:
        bin/kafka-acls.sh --authorizer-properties zookeeper.connect=localhost:2181 \ –add --allow-principal User:producer --operation Write --topic csdn01
      • 授予读权限(含消费组):
        bin/kafka-acls.sh --authorizer-properties zookeeper.connect=localhost:2181 \ –add --allow-principal User:consumer --operation Read --topic csdn01 --group test-consumer-group
      • 查看 ACL:
        bin/kafka-acls.sh --authorizer-properties zookeeper.connect=localhost:2181 \ –list --topic csdn01
    6. 验证
      • 未授权用户(如 User:no_acl)生产/消费应报 “Not authorized …”
      • 授权用户(producer/consumer)可正常生产/消费
        以上流程覆盖了 SCRAM 动态用户、Broker 端 SASL/ACL 配置与 ACL 授权命令要点。

三 使用 SASL_PLAIN + ACL(简单但不支持动态用户)

  • 适用场景:用户规模小、变更不频繁。
  • 要点
    • server.properties 启用:
      listeners=SASL_PLAINTEXT://0.0.0.0:9092
      security.inter.broker.protocol=SASL_PLAINTEXT
      sasl.mechanism.inter.broker.protocol=PLAIN
      sasl.enabled.mechanisms=PLAIN
      authorizer.class.name=kafka.security.authorizer.AclAuthorizer
      allow.everyone.if.no.acl.found=false
      super.users=User:admin
    • JAAS 配置(kafka_server_jaas.conf):
      KafkaServer {
      org.apache.kafka.common.security.plain.PlainLoginModule required
      username=“admin” password=“admin-secret
      user_admin=“admin-secret
      user_wyk_reader=“wyk_reader_pwd
      user_wyk_writer=“wyk_writer_pwd”;
      };
      启动前导出:export KAFKA_OPTS=“-Djava.security.auth.login.config=/path/kafka_server_jaas.conf”
    • 客户端 JAAS(KafkaClient 段)配置对应用户名/密码;ACL 授权命令与 SCRAM 相同(如 Read/Write/Describe 等)。
    • 注意:SASL/PLAIN 的用户凭据写死在 JAAS,无法在不重启的情况下新增用户

四 常见授权命令与排错要点

  • 常用 ACL 命令模板
    • 主题读:
      bin/kafka-acls.sh --authorizer-properties zookeeper.connect=ZK:2181 \ –add --allow-principal User:alice --operation Read --topic t1 --group g1
    • 主题写:
      bin/kafka-acls.sh --authorizer-properties zookeeper.connect=ZK:2181 \ –add --allow-principal User:bob --operation Write --topic t1
    • 集群管理(创建/删除 Topic 等):
      bin/kafka-acls.sh --authorizer-properties zookeeper.connect=ZK:2181 \ –add --allow-principal User:admin --operation Create --cluster
    • 查看:
      bin/kafka-acls.sh --authorizer-properties zookeeper.connect=ZK:2181 \ –list --topic t1
  • 排错要点
    • 未授权或 ACL 未命中时,常见报错为 Not authorized to access topics: [xxx];请核对 Principal、资源名、操作类型、消费组是否一致。
    • 消费者必须给 消费组(group.id) 授予 Read 权限,否则启动或拉取会失败。
    • 使用 SASL/PLAIN 时,新增用户需改 JAAS 并重启;使用 SCRAM 可直接用 kafka-configs.sh 动态增删用户。

五 系统层面安全与运维建议

  • 以非 root 运行 Kafka:
    groupadd kafka; useradd -m -r -g kafka kafka
    chown -R kafka:kafka /path/to/kafka
  • 目录与文件权限:确保 data、log、config 归属 kafka:kafka,避免权限越权。
  • 防火墙放行 Kafka 端口(如 9092):
    firewall-cmd --add-port=9092/tcp --permanent && firewall-cmd --reload
  • 生产建议启用 SASL_SSL(在 listeners 使用 SASL_SSL 并配置 keystore/truststore),以同时获得认证、授权与传输加密。

0