给DataX配置加密的方法

给DataX配置加密的方法

前言

在生产环境中使用DataX,往往在json配置文件中需要用到数据库的账号信息,这是非常不安全的。好在DataX自带的功能支持对敏感信息加密解密,达到对配置文件信息脱敏的效果。

生成公钥和私钥

以下使用DataX源码的SecretUtil工具类,生成密钥对,并使用公钥对字符串123进行加密,得到加密字符串,再对加密字符串使用私钥解密,最终还原成123的过程。

java 复制代码
public static void main(String[] args) throws Exception {
    // 获取公钥与私钥
    String[] keys = SecretUtil.initKey();
    String publicKey = keys[0];
    String privateKey = keys[1];
    System.out.println("publicKey = " + publicKey);
    System.out.println("privateKey = " + privateKey);

    // 通过公钥加密
    String encryptData = SecretUtil.encryptRSA("123", publicKey);
    System.out.println("encryptData = " + encryptData);

    // 通过私钥解密
    String decryptData = SecretUtil.decryptRSA(encryptData, privateKey);
    System.out.println("decryptData = " + decryptData);
}

修改密钥配置

修改.secret.properties 配置文件,它在$DATAX_HOME\conf 目录下

bash 复制代码
#ds basicAuth config
auth.user=
auth.pass=
current.keyVersion=v1
current.publicKey=sfwjwwrjwejrwelththwt
current.privateKey=543l5j34lkj53l4kj5kl3
current.service.username=
current.service.password=

修改以下配置:

  • current.keyVersion 该配置可自定义,用于后面DataXjson配置中使用;
  • current.publicKey 该配置为公钥,用来对敏感信息做加密;
  • current.privateKey 该配置为私钥,用来对敏感信息做解密;

DataX配置中应用

如以下配置示例,主要做了几下改动:

  • job节点添加keyVersion配置项,值取自上一步的配置current.keyVersion中的值
  • 在需要脱敏的配置的key前面加上一个*,如"*username"、"*password"
  • 修改*开头的配置的取值,由明文改为密文,密文是由第一步的main方法生成而来
json 复制代码
{
  "job": {
    "setting": {
      "speed": {
        "channel": 3
      },
      "errorLimit": {
        "record": 0,
        "percentage": 0.02
      },
	    "keyVersion": "v1"
    },
    "content": [
      {
        "reader": {
          "name": "mysqlreader",
          "parameter": {
            "*username": "a2KMPlT1nSUJx",
            "*password": "b1VFs5VzcW4V0Cnyb",
            // 省略
          }
        },
        "writer": {
          // 省略
        }
      }
    ]
  }
}

执行DataX任务,在打印日志中能看到username解密成功,password因为是敏感信息所以用***代替。

参考

异构数据源数据同步 → 从源码分析 DataX 敏感信息的加解密-腾讯云开发者社区-腾讯云

相关推荐
GetcharZp4 小时前
玩转 Linux 机器视觉:手把手带你搞定 Ubuntu 下海康工业相机 C++ SDK
后端
星星在线7 小时前
MusicFree:一个「All in One」的个人音乐服务器,让听歌回归简单
前端·后端
IT_陈寒8 小时前
Redis的SETNX并发问题让我加了三天班
前端·人工智能·后端
demo007x8 小时前
Docling 文档转换以及技术架构分析
前端·后端·程序员
袋鱼不重10 小时前
我的神奇同事,AI 用多了居然写了个 Open In Codex
前端·后端·ai编程
大树8810 小时前
金刚石散热越强,管路越先见顶
大数据·运维·服务器·人工智能·ai
用户83562907805110 小时前
使用 Python 操作 Word 内容控件
后端·python
像我这样帅的人丶你还10 小时前
啥? 前端也要会干Java?🛵🛵🛵
后端
Hommy8810 小时前
【剪映小助手】添加贴纸接口(Add Sticker)
后端·github·剪映小助手·视频剪辑自动化·剪映api
大志哥12310 小时前
ES和Logstash日志链路系统上线后遭遇切片爆炸(解决)
大数据·elasticsearch