我有一个正在使用的 jdbc 源连接器,并且我一直在使用 Postman 来测试和设置它。数据库连接的密码是明文的,只要我是唯一看到它的人就可以了。
"config": {
"connector.class": "io.confluent.connect.jdbc.JdbcSourceConnector",
"connection.url": "jdbc:db2://db2server.mycompany.com:4461/myDB",
"connection.user: "dbUser",
"connection.password": "DBPASSinClearText!",
"dialect.name": "Db2DatabaseDialect",
"mode": "timestamp",
"query": "select fname, lname, custId, custRegion, lastUpdate from CustomerMaster",
"timestamp.column.name": "lastUpdate",
"table.types": "TABLE",
"topic.prefix": "master.customer"
}
}
在生产中,部署团队是设置配置的人。有没有办法对此进行加密,这样我就不必与该团队共享明文密码?
是的,您可以使用外部化凭据。这是通过 KIP-297 添加到 Apache Kafka 2.0 中的。
您可以使用外部凭据提供程序(基本示例是平面文件),然后代替:
"connection.password": "DBPASSinClearText!",
你会得到类似的东西:
"connection.password": "${file:/data/foo_credentials.properties:FOO_PASSWORD}",
中阅读有关完整功能的更多信息
在我的公司,我们在 kafka connect 之上创建了一个 API,我们在配置中使用变量并使用 Hashicorp Vault 作为值。
但是您可以按照文档中所述使用 ConfigProvider https://docs.confluence.io/current/connect/security.html#externalizing-secrets。如果将机密存储在 kafka 中的纯文本配置文件中不适合您,则可以创建您自己的 ConfigProvider 实现。
我最终启动了 kafka 连接 docker 容器并通过管道
sed
。
来自我们的 kubes terraform 定义。
command = ["/bin/bash", "-c", "/etc/confluent/docker/run | sed -e 's/password=[^$]*/password=****/g' "]