ARTICLE DETAIL

资讯详情

深耕郑州网站建设与运营推广的一线实战洞察。

Rasa 测试环境搭建指南:Kafka SASL_SCRAM 认证(SHA-256/SHA-512,无 TLS)全流程详解

Rasa 测试环境搭建指南:Kafka SASL_SCRAM 认证(SHA-256/SHA-512,无 TLS)全流程详解 Rasa 测试环境搭建指南Kafka SASL_SCRAM 认证SHA-256/SHA-512无 TLS全流程详解【免费下载链接】rasa Open source machine learning framework to automate text- and voice-based conversations: NLU, dialogue management, connect to Slack, Facebook, and more - Create chatbots and voice assistants项目地址: https://gitcode.com/GitHub_Trending/ra/rasa导读本指南围绕 Rasa 开源仓库中test_environments/message_and_event_brokers/kafka/sasl_scram/no_tls/目录下的测试环境完整讲解如何用 Docker Compose 搭建一套要求客户端强制认证、但不启用 TLS 加密的 Kafka 测试环境。该环境同时提供 SHA-256 与 SHA-512 两套 SCRAM 算法实现用于验证 Rasa 对话系统在接入事件总线Event Broker时对 Kafka SASL 认证链路的兼容性。读完本文你将掌握 Zookeeper 与 Kafka 容器的最小启动顺序、SCRAM 用户如何在 Zookeeper 中创建、客户端如 Rasa应如何配置security_protocol与sasl_mechanism才能正确连接到此类受保护 Broker。一、这套测试环境解决什么问题在 Rasa 项目中Kafka 常被用作事件总线Event Broker用于在训练、推理或对话过程中发布跟踪器事件Tracker Events。当生产环境的 Kafka 集群要求客户端提供 SASL 凭据时Rasa 端必须使用匹配的security_protocol与sasl_mechanism才能建立连接。test_environments/message_and_event_brokers/kafka/目录下按安全等级划分了多种测试环境no_authentication/无认证的裸环境sasl_plain/SASL PLAIN 机制其下再分no_tls/与with_tls/后者又含ssl_all_conections/与ssl_localhost/两种证书作用域sasl_scram/SASL SCRAM 机制其下同样分no_tls/与with_tls/每套再按算法拆成scram_sha_256/与scram_sha_512/两个独立环境。本文聚焦的sasl_scram/no_tls/即其中“SCRAM 认证 明文传输”的组合Broker 要求客户端必须认证但传输链路不加密。它主要用于在隔离的测试环境里验证认证逻辑本身方便抓包与调试。二、两套环境一览端口、算法与命名test_environments/message_and_event_brokers/kafka/sasl_scram/no_tls/下包含两个等价但相互独立的子环境区别仅在 SCRAM 哈希算法与监听端口子目录SCRAM 算法Broker 监听端口容器名前缀scram_sha_256/SCRAM-SHA-2569096zookeeper-sasl-scram-sha-256-no-tls/kafka-broker-sasl-scram-sha-256-no-tlsscram_sha_512/SCRAM-SHA-5129097Zookeeper 为2187zookeeper-sasl-scram-sha-512-no-tls/kafka-broker-sasl-scram-sha-512-no-tls注意顶层README.md中提到“Kafka 将监听 9092 端口、URL 为 localhost:9092”这是对两套子环境的一般性描述实际每套子环境的具体端口以其各自README.md和docker-compose.yml为准SHA-256 用 9096、SHA-512 用 9097。由于两套环境端口、容器名、Zookeeper 客户端端口2186/2187均不冲突理论上可以同时启动。每套子环境包含 5 个文件README.md启动步骤说明docker-compose.ymlZookeeper 与 Kafka 两个服务的编排定义broker_jaas.confKafka Broker 侧的 JAAS 配置zookeeper_server_jaas.confZookeeper 服务端 JAAS 配置zookeeper_client_jaas.conf用于向 Zookeeper 创建 SCRAM 用户的客户端 JAAS 配置。三、启动顺序为什么 Zookeeper 必须先于 KafkaSCRAMSalted Challenge Response Authentication Mechanism的用户凭据存储在 Zookeeper 中Broker 启动时会去 Zookeeper 读取这些凭据用于后续的 SASL 握手。因此启动顺序必须是先启动 Zookeeper在 Zookeeper 中创建两个用户kafkabrokerKafka 向 Zookeeper 认证自身时使用client即kafkaclient客户端向 Kafka 认证时使用再启动 Kafka Broker。顶层 README 明确说明了这一点两个用户中一个由 Kafka 用于向 Zookeeper 认证另一个由客户端用于向 Kafka 认证。若顺序颠倒Broker 启动时会因无法在 Zookeeper 中找到自己的 SCRAM 凭据而失败。3.1 启动 Zookeeperdocker-compose up -d zookeeperZookeeper 容器的关键环境变量以scram_sha_256/为例见 docker-compose.ymlZOOKEEPER_CLIENT_PORT: 2186客户端端口与宿主机端口映射一致KAFKA_OPTS注入 JAAS 配置文件路径-Djava.security.auth.login.config/etc/kafka/secrets/zookeeper_server_jaas.conf并启用 Zookeeper 自身集群通信Quorum的 SASL 认证quorum.auth.enableSasl、quorum.auth.learnerRequireSasl、quorum.auth.serverRequireSasl均设为true要求 Zookeeper 节点之间Quorum 通信也走 SASLzookeeper.authProvider.1...SASLAuthenticationProvider与zookeeper.authProvider.2...DigestAuthenticationProvider同时启用 SASL 与 Digest 两种认证提供方requireClientAuthSchemesasl要求客户端必须使用 SASL 方案。卷挂载将宿主机上的两个 JAAS 文件分别映射进容器./zookeeper_server_jaas.conf:/etc/kafka/secrets/zookeeper_server_jaas.conf./zookeeper_client_jaas.conf:/etc/kafka/client/zookeeper_client_jaas.conf其中zookeeper_server_jaas.conf定义了 Zookeeper 服务端、Quorum 服务端与 Quorum Learner 三段上下文Server { org.apache.zookeeper.server.auth.DigestLoginModule required user_adminpassword; }; QuorumServer { org.apache.zookeeper.server.auth.DigestLoginModule required user_zookeeperpassword; }; QuorumLearner { org.apache.zookeeper.server.auth.DigestLoginModule required usernamezookeeper passwordpassword; };3.2 在 Zookeeper 中创建 SCRAM 用户进入 Zookeeper 容器用kafka-configs工具创建两个 SCRAM 用户。以 SHA-256 环境为例docker exec -it zookeeper-sasl-scram-sha-256-no-tls bash cd /etc/kafka/client KAFKA_OPTS-Djava.security.auth.login.configzookeeper_client_jaas.conf kafka-configs --zookeeper localhost:2186 --alter --add-config SCRAM-SHA-256[iterations4096,passwordpassword] --entity-type users --entity-name kafkabroker KAFKA_OPTS-Djava.security.auth.login.configzookeeper_client_jaas.conf kafka-configs --zookeeper localhost:2186 --alter --add-config SCRAM-SHA-256[iterations4096,passwordpassword] --entity-type users --entity-name client exitSHA-512 环境除端口2187与算法名SCRAM-SHA-512、容器名zookeeper-sasl-scram-sha-512不同外命令结构完全一致详见 scram_sha_512/README.mddocker exec -it zookeeper-sasl-scram-sha-512 bash cd /etc/kafka/client KAFKA_OPTS-Djava.security.auth.login.configzookeeper_client_jaas.conf kafka-configs --zookeeper localhost:2187 --alter --add-config SCRAM-SHA-512[iterations4096,passwordpassword] --entity-type users --entity-name kafkabroker KAFKA_OPTS-Djava.security.auth.login.configzookeeper_client_jaas.conf kafka-configs --zookeeper localhost:2187 --alter --add-config SCRAM-SHA-512[iterations4096,passwordpassword] --entity-type users --entity-name client exit几个关键点--entity-name kafkabroker创建的是Broker 自身的 SCRAM 凭据Broker 会用它向 Zookeeper 认证对应 broker_jaas.conf 中KafkaServer上下文的usernamekafkabroker--entity-name client创建的是客户端凭据密码为password与顶层 README 中连接凭据表一致iterations4096是 SCRAM 的 PBKDF2 迭代次数数值越大暴力破解成本越高但认证计算开销也越大zookeeper_client_jaas.conf内容如下它提供了向 Zookeeper 发起写操作时所需的admin/password凭据Client { org.apache.zookeeper.server.auth.DigestLoginModule required usernameadmin passwordpassword; };3.3 启动 Kafka Brokerdocker-compose up -d kafka-brokerBroker 容器SHA-256 版本的关键配置见 docker-compose.yml环境变量值含义KAFKA_ADVERTISED_LISTENERSSASL_PLAINTEXT://localhost:9096监听器使用 SASL 认证、明文传输暴露于 9096KAFKA_SASL_ENABLED_MECHANISMSSCRAM-SHA-256允许的 SASL 机制SHA-512 环境为SCRAM-SHA-512KAFKA_SECURITY_INTER_BROKER_PROTOCOLSASL_PLAINTEXTBroker 间通信同样要求 SASLKAFKA_SASL_MECHANISM_INTER_BROKER_PROTOCOLSCRAM-SHA-256Broker 间使用的具体机制KAFKA_SUPER_USERSUser:kafkabroker;User:kafkaclient两个用户均为超级用户绕过 ACL 限制KAFKA_ZOOKEEPER_SASL_ENABLEDtrueBroker 向 Zookeeper 的连接走 SASLKAFKA_ALLOW_EVERYONE_IF_NO_ACL_FOUNDfalse没有 ACL 记录时不允许任何人访问确保强制认证生效KAFKA_AUTO_CREATE_TOPICS_ENABLEtrue允许自动创建主题便于测试环境直接使用KAFKA_OPTS见下注入 Zookeeper SASL 客户端开关与 Broker JAAS 路径KAFKA_OPTS中-Dzookeeper.sasl.clienttrue与-Dzookeeper.sasl.clientconfigClient让 Broker 以 SASL 身份连接 Zookeeper而-Djava.security.auth.login.config/etc/kafka/secrets/conf/kafka_server_jaas.conf指向挂载进来的 broker_jaas.confKafkaServer { org.apache.kafka.common.security.scram.ScramLoginModule required usernamekafkabroker passwordpassword; }; Client { org.apache.kafka.common.security.plain.PlainLoginModule required usernameadmin passwordpassword; }; KafkaClient { org.apache.kafka.common.security.scram.ScramLoginModule required usernamekafkaclient passwordpassword; };三段上下文的分工KafkaServerBroker 作为服务端时自己的 SCRAM 凭据即上一步创建的kafkabrokerClientBroker 以管理员身份访问 Zookeeper 时使用PLAIN/Digest 风格密码同为passwordKafkaClient定义kafkaclient/password凭据对应顶层 README 中客户端连接用的用户。KAFKA_ALLOW_EVERYONE_IF_NO_ACL_FOUND: false是这套环境的关键语义它确保没有显式 ACL 的客户端无法绕过认证访问数据从而真正复现“Broker 强制要求客户端认证”的测试目标。四、客户端如何连接凭据与 SASL 机制选择启动完成后客户端可连接 Broker。顶层 README.md 给出的凭据为UserPasswordkafkaclientpassword客户端配置中必须将认证机制设置为SASL SCRAM-SHA-256或SASL SCRAM-SHA-512具体选择取决于运行的是哪一套测试环境连接 SHA-256 环境端口 9096→sasl.mechanismSCRAM-SHA-256连接 SHA-512 环境端口 9097→sasl.mechanismSCRAM-SHA-512。由于本环境无 TLSsecurity.protocol使用SASL_PLAINTEXT即“SASL 认证 明文传输”用户名密码通过 SASL 握手发送、但信道本身不加密仅适合测试与调试场景。4.1 Rasa 端的 Kafka Event Broker 配置Rasa 通过事件总线配置接入 Kafka。其实现位于 rasa/core/brokers/kafka.py与本文环境直接相关的参数包括security_protocol与 Broker 通信的协议合法值为PLAINTEXT、SASL_PLAINTEXT、SSL、SASL_SSL源码kafka.py中self.security_protocol security_protocol.upper()并将其他值判为非法sasl_mechanism认证机制源码注释明确列出合法值PLAIN、GSSAPI、OAUTHBEARER、SCRAM-SHA-256、SCRAM-SHA-512默认PLAINsasl_username/sasl_passwordSASL 认证使用的用户名与密码。对照本测试环境Rasa 的endpoints.yml中事件总线应配置为以 SHA-256 环境为例event_broker: type: kafka url: localhost:9096 topic: topic security_protocol: SASL_PLAINTEXT sasl_username: kafkaclient sasl_password: password sasl_mechanism: SCRAM-SHA-256若运行的是 SHA-512 环境则将url改为localhost:9097、sasl_mechanism改为SCRAM-SHA-512。仓库中data/test_endpoints/event_brokers/目录提供了多份可参考的端点配置样例例如 kafka_sasl_plaintext_endpoint.ymlevent_broker: type: kafka security_protocol: SASL_PLAINTEXT topic: topic url: localhost partition_by_sender: True sasl_username: username sasl_password: password sasl_mechanism: PLAIN与之配套的还有kafka_sasl_ssl_endpoint.yml、kafka_plaintext_endpoint.yml、kafka_ssl_endpoint.yml等样例以及用于负向测试的kafka_invalid_sasl_mechanism.ymlsasl_mechanism: SOMETHING和kafka_invalid_security_protocol.ymlsecurity_protocol: SOMETHING后者对应源码中对非法security_protocol抛出Invalidsecurity_protocol(...)异常的逻辑。这说明只要把security_protocol设为SASL_PLAINTEXT、sasl_mechanism设为与 Broker 端KAFKA_SASL_ENABLED_MECHANISMS一致的机制Rasa 即可接入本测试环境。五、FAQ 与排错要点Q1为什么必须先启动 ZookeeperSCRAM 用户凭据存储在 Zookeeper 中Broker 启动时必须先读取到自己的凭据才能完成后续 SASL 握手因此先 Zookeeper、再建用户、最后启动 Kafka。Q2kafkabroker与client两个用户分别做什么用kafkabroker用于 Broker 向 Zookeeper 认证自身对应broker_jaas.conf的KafkaServer段client即kafkaclient用于客户端向 Kafka 认证对应KafkaClient段与顶层 README 的连接凭据表。Q3认证失败时如何排查核对sasl_mechanism是否与所连环境的KAFKA_SASL_ENABLED_MECHANISMS一致SHA-256 环境只能用SCRAM-SHA-256SHA-512 环境只能用SCRAM-SHA-512核对用户名密码是否为kafkaclient/password核对端口SHA-256 环境为 9096SHA-512 环境为 9097确认用户确实已通过kafka-configs写入 Zookeeper未执行该步骤时 Broker 无法完成 SCRAM 握手本环境KAFKA_ALLOW_EVERYONE_IF_NO_ACL_FOUND: false无 ACL 的客户端会被拒绝属预期行为。Q4这套环境能用于生产吗不能。它明确“无 TLS、明文传输”仅用于测试客户端认证逻辑生产环境应使用sasl_scram/with_tls/下的 SSL 加密版本该目录使用 CA 证书与 JKS 密钥库。Q5容器日志在哪看两套环境的KAFKA_LOG4J_ROOT_LOGLEVEL与ZOOKEEPER_LOG4J_ROOT_LOGLEVEL均设为DEBUG可执行docker-compose logs -f zookeeper/docker-compose logs -f kafka-broker观察完整的 SASL 握手过程。六、延伸仓库中相关的其他安全组合test_environments/message_and_event_brokers/kafka/目录是理解 Rasa 事件总线安全矩阵的完整入口kafka/README.md总体说明sasl_scram/with_tls/SCRAM 认证 TLS 加密分scram_sha_256/与scram_sha_512/含ca-cert、server.keystore.jks等证书材料对应 Rasa 配置中的security_protocol: SASL_SSLsasl_plain/no_tls/与sasl_plain/with_tls/PLAIN 机制对应sasl_mechanism: PLAINno_authentication/无认证环境对应security_protocol: PLAINTEXT。结合 rasa/core/brokers/kafka.py 中security_protocol的四路分支PLAINTEXT/SASL_PLAINTEXT/SSL/SASL_SSL可以清晰看到本文的no_tls环境覆盖的是SASL_PLAINTEXT分支with_tls环境覆盖的是SASL_SSL分支——两套测试环境共同验证了 Rasa Kafka 事件总线对认证与加密组合的完整支持。参考文件索引sasl_scram/no_tls/README.md总览与连接凭据scram_sha_256/README.mdSHA-256 环境启动步骤scram_sha_256/docker-compose.ymlSHA-256 环境编排定义scram_sha_256/broker_jaas.confBroker JAAS 凭据scram_sha_256/zookeeper_server_jaas.confZookeeper 服务端 JAASscram_sha_512/README.mdSHA-512 环境启动步骤rasa/core/brokers/kafka.pyRasa Kafka Event Broker 实现data/test_endpoints/event_brokers/kafka_sasl_plaintext_endpoint.ymlSASL 端点配置样例【免费下载链接】rasa Open source machine learning framework to automate text- and voice-based conversations: NLU, dialogue management, connect to Slack, Facebook, and more - Create chatbots and voice assistants项目地址: https://gitcode.com/GitHub_Trending/ra/rasa创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
返回列表