Debezium日常分享系列之:使用 Debezium 连接器实现密钥外部化

这篇具有很好参考价值的文章主要介绍了Debezium日常分享系列之:使用 Debezium 连接器实现密钥外部化。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

一、需求背景

  • 隐藏数据库的账号和密码
  • 当 Debezium 连接器部署到 Kafka Connect 实例时,有时需要对 Connect API 的其他用户隐藏数据库凭据。

二、Debezium connector注册请求

让我们回顾一下 MySQL Debezium connector的连接器注册请求:

{
    "name": "inventory-connector",
    "config": {
        "connector.class": "io.debezium.connector.mysql.MySqlConnector",
        "tasks.max": "1",
        "database.hostname": "mysql",
        "database.port": "3306",
        "database.user": "debezium",
        "database.password": "dbz",
        "database.server.id": "184054",
        "database.server.name": "dbserver1",
        "database.whitelist": "inventory",
        "database.history.kafka.bootstrap.servers": "kafka:9092",
        "database.history.kafka.topic": "schema-changes.inventory"
    }
}

用户名和密码以纯字符串形式传递给 API。更糟糕的是,任何有权访问 Kafka Connect 集群及其 REST API 的人都可以发出 GET 请求来获取连接器的配置,包括数据库凭据:

curl -s http://localhost:8083/connectors/inventory-connector | jq .
{
  "name": "inventory-connector",
  "config": {
    "connector.class": "io.debezium.connector.mysql.MySqlConnector",
    "database.user": "debezium",
    "database.server.id": "184054",
    "tasks.max": "1",
    "database.hostname": "mysql",
    "database.password": "dbz",
    "database.history.kafka.bootstrap.servers": "kafka:9092",
    "database.history.kafka.topic": "schema-changes.inventory",
    "name": "inventory-connector",
    "database.server.name": "dbserver1",
    "database.whitelist": "inventory",
    "database.port": "3306"
  },
  "tasks": [
    {
      "connector": "inventory-connector",
      "task": 0
    }
  ],
  "type": "source"
}

如果一个 Kafka Connect 集群由多个连接器/团队共享,那么出于安全原因,这种行为可能是不可取的。

三、实现Debezium连接器密钥外部化

外部化期望至少有一个 org.apache.kafka.common.config.provider.ConfigProvider 接口的实现类。

Kafka Connect 提供了从文件读取机密的参考实现 org.apache.kafka.common.config.provider.FileConfigProvider。可用的配置提供程序在 Kafka Connect 工作线程级别进行配置(例如在 connect-distributed.properties 中),并从连接器配置中引用。

config.providers=file
config.providers.file.class=org.apache.kafka.common.config.provider.FileConfigProvider

连接器注册请求将像这样引用它:

{
    "name": "inventory-connector",
    "config": {
        "connector.class": "io.debezium.connector.mysql.MySqlConnector",
        "tasks.max": "1",
        "database.hostname": "mysql",
        "database.port": "3306",
        "database.user": "${file:/secrets/mysql.properties:user}",
        "database.password": "${file:/secrets/mysql.properties:password}",
        "database.server.id": "184054",
        "database.server.name": "dbserver1",
        "database.whitelist": "inventory",
        "database.history.kafka.bootstrap.servers": "kafka:9092",
        "database.history.kafka.topic": "schema-changes.inventory"
    }

这里,占位符 ${file:/secrets/mysql.properties:user} 表示应该使用文件配置提供程序,读取属性文件 /secrets/mysql.properties 并从中提取用户属性。

文件配置提供程序可能是最简单的实现,并且可以预期将会出现与密钥存储库或身份管理系统集成的其他提供程序。值得注意的是,文件配置提供程序在 Kubernetes/OpenShift 部署中是令人满意的,因为机密对象可以作为文件注入到集群 pod 中,从而被集群 pod 消耗。

我们创建了 Debezium 教程示例的一个版本,它演示了外部化机密的部署。请注意 Docker Compose 连接服务中的两个环境变量:

- CONNECT_CONFIG_PROVIDERS=file
- CONNECT_CONFIG_PROVIDERS_FILE_CLASS=org.apache.kafka.common.config.provider.FileConfigProvider

这些环境变量作为 debezium/connect 映像的功能直接映射到 Kafka Connect 工作线程属性中。

当您发出 REST 调用来获取连接器配置时,您将看到敏感信息已被外部化并且对未经授权的用户屏蔽:文章来源地址https://www.toymoban.com/news/detail-563659.html

curl -s http://localhost:8083/connectors/inventory-connector | jq .
{
  "name": "inventory-connector",
  "config": {
    "connector.class": "io.debezium.connector.mysql.MySqlConnector",
    "database.user": "${file:/secrets/mysql.properties:user}",
    "database.server.id": "184054",
    "tasks.max": "1",
    "database.hostname": "mysql",
    "database.password": "${file:/secrets/mysql.properties:password}",
    "database.history.kafka.bootstrap.servers": "kafka:9092",
    "database.history.kafka.topic": "schema-changes.inventory",
    "name": "inventory-connector",
    "database.server.name": "dbserver1",
    "database.whitelist": "inventory",
    "database.port": "3306"
  },
  "tasks": [
    {
      "connector": "inventory-connector",
      "task": 0
    }
  ],
  "type": "source"
}

到了这里,关于Debezium日常分享系列之:使用 Debezium 连接器实现密钥外部化的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • Flink系列之:Elasticsearch SQL 连接器

    Sink: Batch Sink: Streaming Append Upsert Mode Elasticsearch 连接器允许将数据写入到 Elasticsearch 引擎的索引中。本文档描述运行 SQL 查询时如何设置 Elasticsearch 连接器。 连接器可以工作在 upsert 模式,使用 DDL 中定义的主键与外部系统交换 UPDATE/DELETE 消息。 如果 DDL 中没有定义主键,那么

    2024年02月04日
    浏览(39)
  • Flink系列之:JDBC SQL 连接器

    Scan Source: Bounded Lookup Source: Sync Mode Sink: Batch Sink: Streaming Append Upsert Mode JDBC 连接器允许使用 JDBC 驱动向任意类型的关系型数据库读取或者写入数据。本文档描述了针对关系型数据库如何通过建立 JDBC 连接器来执行 SQL 查询。 如果在 DDL 中定义了主键,JDBC sink 将以 upsert 模式与外

    2024年02月02日
    浏览(33)
  • Flink系列之:Apache Kafka SQL 连接器

    Scan Source: Unbounded Sink: Streaming Append Mode Kafka 连接器提供从 Kafka topic 中消费和写入数据的能力。 以下示例展示了如何创建 Kafka 表: 以下的连接器元数据可以在表定义中通过元数据列的形式获取。 R/W 列定义了一个元数据是可读的(R)还是可写的(W)。 只读列必须声明为 VI

    2024年02月01日
    浏览(37)
  • Kafka系列之:连接器客户端配置覆盖策略

    KAFKA引入了每个源连接器和接收器连接器从工作线程属性继承其客户端配置的功能。在工作线程属性中,任何具有“生产者”或“消费者”前缀的配置。分别应用于所有源连接器和接收器连接器。虽然最初的提案允许覆盖源连接器和接收器连接器,但它在允许连接器的不同配

    2024年02月11日
    浏览(43)
  • Flink系列之:Upsert Kafka SQL 连接器

    Scan Source: Unbounded 、 Sink: Streaming Upsert Mode Upsert Kafka 连接器支持以 upsert 方式从 Kafka topic 中读取数据并将数据写入 Kafka topic。 作为 source,upsert-kafka 连接器生产 changelog 流,其中每条数据记录代表一个更新或删除事件。更准确地说,数据记录中的 value 被解释为同一 key 的最后一

    2024年01月16日
    浏览(31)
  • Flink系列之:Flink CDC深入了解MySQL CDC连接器

    增量快照读取是一种读取表快照的新机制。与旧的快照机制相比,增量快照具有许多优点,包括: (1)在快照读取期间,Source 支持并发读取 (2)在快照读取期间,Source 支持进行 chunk 粒度的 checkpoint (3)在快照读取之前,Source 不需要数据库锁权限。 如果希望 source 并行运

    2024年02月02日
    浏览(38)
  • Kafka系列之:对源连接器的的Exactly-Once支持

    幂等生产者: 写入 Kafka 的应用程序重复记录的一个常见来源是自动生产者重试,其中生产者会在某些情况下将批次重新发送到 Kafka,即使该批次已由代理提交。KIP-98 允许用户将其生产者配置为幂等地执行这些重试,这样下游应用程序只能看到自动重新发送的生产者批次中任

    2024年02月11日
    浏览(28)
  • Debezium日常分享系列之:Debezium and TimescaleDB

    TimescaleDB 是一个开源数据库,旨在使 SQL 对于时间序列数据具有可扩展性。它是作为 PostgreSQL 数据库的扩展实现的。这一事实促使我们重新使用标准 Debezium PostgreSQL 连接器,并将 TimescaleDB 支持实现为单个消息转换 (SMT)。 TimescaleDB 提供了三个基本构建块/概念: Hypertables Contin

    2024年01月17日
    浏览(36)
  • Debezium日常分享系列之:在 OpenShift 上部署 Debezium

    此过程用于在 Red Hat 的 OpenShift 容器平台上设置 Debezium 连接器。要在 OpenShift 上进行开发或测试,您可以使用 CodeRady 容器。 为了使容器与集群上的其他工作负载分开,请为 Debezium 创建一个专用项目。在本文档的其余部分中,将使用 debezium-example 命名空间: 对于 Debezium 部署,

    2024年02月16日
    浏览(31)
  • 满足新能源三电系统气密和电性能测试的E10系列多功能电连接器

    在新能源汽车的测试领域中,三电系统的测试是质量管控过程中非常重要的组成部分。无论是防水防尘的气密性测试,还是EOL/DCR等电性能相关的测试,都是确保新能源汽车正常工作中不可缺少的一部分。 在以往的测试中,每种测试都是独立的。每个测试工序中,都需要独立

    2024年02月07日
    浏览(29)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包