• 将 Apache Kafka SASL OUTHBEARER 与 Python 一起使用


    SASL/Oauthbearer 比在客户端应用程序中配置用户名/密码的 SASL/PLAIN 更安全。万一用户凭据被泄露,爆炸半径会更显着,因为用户可能拥有其他访问权限。在 SASL/OAUTHBEARER 中,首选服务帐户,这会减少泄漏的爆炸半径。建议每个客户端应用程序有一个服务帐户。使用服务帐户,可以快速将重置凭据与用户凭据进行比较。 

    您还可以通过OAuth在 SASL/PLAIN 中使用服务帐户,这解决了密钥轮换问题。在图 1 中,您可以看到这两个流程。起初,建立一个连接需要 4 次往返,而在 OAuth over SASL 中,客户端向授权服务器发出令牌请求并将令牌发送到 Kafka 代理/资源服务器,这样既高效又减少了爆炸半径更少的啤酒花。要更好地了解线程模型和风险,请参阅OAuth 2.0 威胁模型和安全注意事项

    架构概述 

    在图 2 中,我使用了两个Python客户端:producer producer_oauth.pyconsumer consumer_oauth.py。对于 Apache Kafka 和服务注册表,Red Hat OpenShift Streams for Apache Kafka 和 Red Hat OpenShift Service Registry 允许创建即用型开发人员实例,并支持开箱即用的 SASL/OAUTHBEARER 和 SASL/PLAIN 安全机制通过 OAuth 和轻松的配置管理。

    Apache Kafka 和服务注册表 

    创建一个 Kafka 实例并登录到 RedHat 混合云控制台。在应用程序和数据服务目录下选择“Stream for Apache Kafka”。单击“Kafka 实例”。在图 3 中,您可以看到我已经创建了一个名为kafka-instance 的实例。您可以使用任何允许的名称。

    一旦状态显示为就绪状态,单击 kebab 图标(三个垂直点)以查看连接详细信息,如图 3 所示。 

    复制 Bootstrap Server URL 并为其创建导出或复制以供以后使用,可用于运行生产者/消费者客户端。

    现在,单击“创建服务帐户”按钮以创建服务客户端 ID 和密码。使用服务帐户 clientId 和密钥。您可以通过向授权服务器(在本例中为 Red Hat SSO)发出客户端凭据授予请求来检索访问令牌。

    导航到 Kafka Instances 部分,然后单击您创建的实例。让我们创建一个主题。在图 6 中,我创建了一个名为“test”的主题。您可以选择任何首选名称。

    分配对上一节中创建的服务帐户的访问权限。在图 7 中,我分配了对主题“test”的访问权限,并为 Consumer 组添加了权限。为简单起见,我分配了通配符 (*) 权限;但您可以分配细粒度的权限。 

    让我们通过导航到应用程序和数据服务目录中的“服务注册表”来创建一个服务注册表。在图 8 中,我创建了一个“test-registry”实例。

    对于 Confluence Python 客户端,复制“Schema Registry compatible API”,如图 11 所示。该 API URL 可以供模式注册表客户端在执行序列化/反序列化时访问模式。

    分配服务帐户访问此架构注册表的权限。如图 12 所示,导航到Access仪表板,然后单击“Grant access”按钮。

    帐户下拉部分中选择服务帐户,并根据图 13 中所示的用例将其分配为“查看器”或“管理器”。

    Python 生产者和消费者

    在图 14 中,您可以看到 Python 生产者客户端使用“SASL/OAUTHBEARER”的配置要求,服务帐户通过命令行参数传递为client_idclient_secrets和授权服务器令牌 URL。 

    当客户端尝试建立连接时,该方法get_token将使用授权服务器令牌 URLclient credentials向授权服务器发出授权请求。在这种情况下,授权服务器是 Red Hat SSO。请求成功后,返回一个访问令牌,该令牌可以与生产消息请求一起发送到 Kafka 代理。  client_idclient_secrets

  • 相关阅读:
    MongoDB-1入门介绍
    DIRECT_IO 配置参数(UNIX)
    【CPU设计实战】简单流水线CPU设计
    Vue2 Element Pagination组件 每页数据量不同的解决方案
    uniapp 开发微信小程序,通过高德SDK获取当位置详细信息
    python实现列表倒叙打印
    Ubuntu安装mysql8遇到的问题以及详细安装过程
    您的应用存在隐藏最近任务列表名称的行为,不符合华为应用市场审核标准
    Caché for UNIX®, Linux及macOS的安装及配置
    SpringBoot - WebSecurityConfigurerAdapter的作用是什么?
  • 原文地址:https://blog.csdn.net/wouderw/article/details/127680676