发布时间:2025-06-24 19:24:19 作者:北方职教升学中心 阅读量:554
认证与鉴权的关系
先回顾一下 listener 的作用。鉴权等概念。认证与鉴权之间的关系
安全协议决定了服务端和客户端之间的认证(Authentication)协议,而鉴权(Authorization)基本独立于认证,只校验通过认证的主体对请求中涉及的资源是否有操作权限。ResourceName 为 “*”,且 PatternType 为 LITERAL 时表示匹配任意名称;如果 ResourceName 为 “*”,PatternType 为 PREFIXED,表示匹配前缀名称为“*”的资源。
阶段三:下线旧协议
node.id=1# 保持不变controller.quorum.voters=1@localhost:9193,2@localhost:9195,3@localhost:9197# 下线旧 listenerlisteners=BROKER_SASL://:9192,CONTROLLER_SASL://:9193# 保持不变inter.broker.listener.name=BROKER_SASL# 下线旧地址advertised.listeners=BROKER_SASL://localhost:9192# 下线旧 listenercontroller.listener.names=CONTROLLER_SASL# authorizationauthorizer.class.name=org.apache.kafka.metadata.authorizer.StandardAuthorizer# allow.everyone.if.no.acl.found=truesuper.users=User:automq# 保持不变sasl.enabled.mechanisms=SCRAM-SHA-256,PLAIN,SCRAM-SHA-512sasl.mechanism.inter.broker.protocol=PLAINsasl.mechanism.controller.protocol=PLAINlistener.name.broker_sasl.plain.sasl.jaas.config=org.apache.kafka.common.security.plain.PlainLoginModule required \username="automq"\password="automq-secret"\user_automq="automq-secret";listener.name.controller_sasl.plain.sasl.jaas.config=org.apache.kafka.common.security.plain.PlainLoginModule required \username="automq"\password="automq-secret"\user_automq="automq-secret";# 保持不变listener.name.broker_sasl.scram-sha-256.sasl.jaas.config=org.apache.kafka.common.security.scram.ScramLoginModule required;listener.name.controller_sasl.scram-sha-256.sasl.jaas.config=org.apache.kafka.common.security.scram.ScramLoginModule required;listener.name.broker_sasl.scram-sha-512.sasl.jaas.config=org.apache.kafka.common.security.scram.ScramLoginModule required;listener.name.controller_sasl.scram-sha-512.sasl.jaas.config=org.apache.kafka.common.security.scram.ScramLoginModule required;# 保持不变listener.security.protocol.map=CONTROLLER:PLAINTEXT,PLAINTEXT:PLAINTEXT,SSL:SSL,SASL_PLAINTEXT:SASL_PLAINTEXT,SASL_SSL:SASL_SSL,BROKER_SASL:SASL_PLAINTEXT,CONTROLLER_SASL:SASL_PLAINTEXT
至此,旧协议下线,所有通信基于 SASL_PLAINTEXT 协议。
我们在此前的文章《AutoMQ SASL 安全身份认证配置教程》[1]介绍过 Apache Kafka (以下简称 Kafka)服务端和客户端的 SASL 认证协议配置,并在《AutoMQ SSL 安全协议配置教程》[2]详细介绍了如何利用 SSL(TLS) 实现 Kafka 或 AutoMQ 的安全通信。外网访问 broker 时的通信安全协议;
我们可以将 listener name 跟安全协议进行映射,举例来说,Kafka 支持以下安全协议:
我们可以设置 client 与 broker 之间使用 SASL_SSL 协议保证加密性,而集群节点之间使用 SASL_PLAINTEXT 减少 CPU 加密解密的消耗:
listeners=EXTERNAL://:9092,BROKER://10.0.0.2:9094advertised.listeners=EXTERNAL://broker1.example.com:9092,BROKER://broker1.local:9094listener.security.protocol.map=EXTERNAL:SASL_SSL,BROKER:SASL_PLAINTEXT inter.broker.listener.name=BROKER
下图展示了 Listener、
总结
本文概述了 Kafka 中的认证协议和鉴权策略。
本阶段结束以后,需要通知业务方重新配置基于 SASL_PLAINTEXT 配置客户端。三台节点均为 controller + broker 的混部节点。在认证通过后,Kafka 会生成一个认证主体,供上层进行细粒度的鉴权。Kraft 模式下可以填写官方提供的 “org.apache.kafka.metadata.authorizer.StandardAuthorizer”,基于 ACL(access control list)规则认证;
super.users:设置超级用户,默认为空。
注意,本文默认 Kafka 集群是以 Kraft 模式工作的。最后介绍了如何对一个运行中的 Kafka 集群中进行认证协议升级以及开启鉴权。
需要注意的是,Kafka 提供了默认的 SASL/PLAIN 实现,需要在每个节点配置中显示声明账密信息。当 client 通过认证协议完成认证后,broker 侧会将该 KafkaPrincipal 对象塞入 RequestContext,并向上传递,以供后续鉴权。作为 Kafka 生态的忠实拥护者,我们也会持续致力于传播 Kafka 技术,欢迎关注我们。
参考文献
[1] https://www.automq.com/blog/automq-sasl-security-authentication-configuration-guide
[2] https://www.automq.com/blog/automq-ssl-security-protocol-configuration-tutorial
[3] https://developer.confluent.io/courses/security/authentication-basics/
[4] https://smallstep.com/hello-mtls/doc/server/kafka
[5] https://web.mit.edu/kerberos/