温馨提示×

Kafka配置中的认证与授权

小樊
44
2025-12-27 22:07:58
栏目: 大数据

Kafka 认证与授权配置要点

一 核心概念与范围

  • 认证用于确认客户端、Broker 以及 ZooKeeper 的身份,常见机制包括 SASL/PLAIN、SASL/SCRAM-SHA-256/512、SASL/GSSAPI(Kerberos)、mTLS(TLS 客户端证书) 以及 OAuth 2.0 Bearer
  • 授权在认证通过后控制对资源的访问,Kafka 提供 ACL(Access Control Lists) 以及可扩展的 OAuth 2.0 授权OPA 等模式。
  • 建议生产环境同时启用 加密(TLS)认证/授权,避免明文传输与越权访问。

二 监听器与认证配置

  • 按监听器为不同入口启用认证,区分内部/外部访问,并为每个监听器设置唯一 nameport。未显式配置 authentication 的监听器将不验证客户端。
  • 常见监听器与认证组合如下:
监听器类型 典型场景 认证机制 关键配置要点
内部 PLAIN 集群内微服务 SCRAM-SHA-512 listeners 中 type=internal、tls=true、authentication.type=scram-sha-512
内部 TLS 集群内服务 mTLS tls=true、authentication.type=tls;客户端需提供证书
外部 LoadBalancer/NodePort/Ingress/Route 公网或跨网络 mTLS 或 SCRAM 对外暴露端口与协议,强制 TLS;凭据通过 Secret 分发
  • 示例(Kafka 资源片段,SCRAM 与 mTLS 并存):
apiVersion: kafka.strimzi.io/v1beta2
kind: Kafka
metadata:
  name: my-cluster
spec:
  kafka:
    listeners:
      - name: plain
        port: 9092
        type: internal
        tls: true
        authentication:
          type: scram-sha-512
      - name: tls
        port: 9093
        type: internal
        tls: true
        authentication:
          type: tls
      - name: external
        port: 9094
        type: loadbalancer
        tls: true
        authentication:
          type: tls
  • 重要说明:
    • mTLS 同时完成服务器与客户端双向认证;SCRAM 为密码挑战-响应机制,可与或不与 TLS 共用(生产建议始终启用 TLS)。
    • 使用 User Operator 管理用户时必须为监听器配置认证;为 mTLS 用户,用户名通常为 CN=… 的证书主体(完整主体亦可作为用户名)。

三 授权模型与超级用户

  • Kafka 资源 中通过 authorization.type 启用授权,支持 simple(ACL)OAuth 2.0OPA自定义。启用后授权会作用于所有已启用的监听器。
  • 通过 superUsers 指定绕过 ACL 的超级用户列表;对 mTLS 用户,主体以 CN= 前缀的通用名称表示(也可用完整证书主题)。
  • 示例(启用简单 ACL 并配置超级用户):
apiVersion: kafka.strimzi.io/v1beta2
kind: Kafka
metadata:
  name: my-cluster
spec:
  kafka:
    authorization:
      type: simple
      superUsers:
        - CN=client_1
        - user_2
        - CN=client_3
        - CN=client_4,OU=my_ou,O=my_org,L=my_location,ST=my_state,C=US
  • 提示:为运维与紧急处置保留少量高权限账户,日常业务遵循最小权限原则。

四 快速上手示例 SASL/SCRAM + ACL(非容器)

  • 服务端配置 server.properties
    • 启用监听器与机制:
      listeners=SASL_SSL://0.0.0.0:9093
      security.inter.broker.protocol=SASL_SSL
      sasl.enabled.mechanisms=SCRAM-SHA-512
      sasl.mechanism.inter.broker.protocol=SCRAM-SHA-512
    • 启用 ACL 与超级用户:
      authorizer.class.name=kafka.security.auth.SimpleAclAuthorizer
      super.users=User:admin
    • JAAS 配置(kafka_server_jaas.conf):
      KafkaServer {
      org.apache.kafka.common.security.scram.ScramLoginModule required
      username=“admin” password=“admin-secret”
      user_admin=“admin-secret”
      user_producer=“producer-secret”
      user_consumer=“consumer-secret”;
      };
    • 启动参数:在 kafka-server-start.sh 中加入
      export KAFKA_OPTS=“-Djava.security.auth.login.config=/path/to/kafka_server_jaas.conf”
  • 创建 SCRAM 用户(示例)
    bin/kafka-configs.sh --zookeeper localhost:2181 --alter
    –entity-type users --entity-name producer
    –add-config ‘SCRAM-SHA-512=[iterations=8192,password=producer-secret]’
    bin/kafka-configs.sh --zookeeper localhost:2181 --alter
    –entity-type users --entity-name consumer
    –add-config ‘SCRAM-SHA-512=[iterations=8192,password=consumer-secret]’
  • 配置客户端(示例)
    • producer.properties/consumer.properties:
      security.protocol=SASL_SSL
      sasl.mechanism=SCRAM-SHA-512
      sasl.jaas.config=org.apache.kafka.common.security.scram.ScramLoginModule required
      username=“producer” password=“producer-secret”;
  • 配置 ACL(示例)
    • 允许 producer 写主题、consumer 读主题与消费组:
      bin/kafka-acls.sh --bootstrap-server localhost:9093 --add
      –allow-principal User:producer --operation Write --topic test_topic
      bin/kafka-acls.sh --bootstrap-server localhost:9093 --add
      –allow-principal User:consumer --operation Read --topic test_topic --group ‘*’

五 生产实践与运维建议

  • 加密与认证:对外与对内统一使用 TLS;凭据优先用 SCRAMmTLS,避免 SASL/PLAIN 在明文中传输密码。
  • 授权治理:遵循最小权限;按 Topic/Group/Cluster/TransactionalID 精细化授权;定期审计与清理过期 ACL。
  • 高可用与容灾:为 Broker 间通信KRaft 元数据通信 配置强认证;跨机房/公网访问强制 mTLS
  • 网络与隔离:结合 NetworkPolicy/安全组 限制来源 IP 与命名空间访问,仅暴露必要端口(如 9093/9094)。
  • 凭据与轮换:SCRAM 凭据支持在线滚动更新;mTLS 证书设置合理有效期并自动化轮换;密钥集中托管与审计。
  • 监控与告警:关注 认证失败率、ACL 拒绝率、TLS 握手失败 等指标,异常时快速阻断来源。

0