在生产环境中部署和使用DataX进行数据同步时,通常在JSON配置文件中需要明文填写数据库的用户名、密码等敏感信息。这种做法存在显著的安全风险。幸运的是,DataX自身提供了对敏感信息的加密与解密支持,能够有效实现配置信息的脱敏,从而保障数据安全。
生成RSA密钥对与加解密测试
DataX在其源码中提供了SecretUtil工具类,用于密钥对的生成及加解密操作。我们可以通过以下Java代码示例,生成一对RSA公钥和私钥,并演示加密字符串“123”再解密还原的完整流程,以验证加密功能的可用性。
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通过$DATAX_HOME/conf目录下的.secret.properties文件来管理密钥。你需要打开此文件,并修改以下关键配置项:
#ds basicAuth config
auth.user=
auth.pass=
current.keyVersion=v1
current.publicKey=sfwjwwrjwejrwelththwt
current.privateKey=543l5j34lkj53l4kj5kl3
current.service.username=
current.service.password=
需要修改的参数说明:
current.keyVersion: 可自定义一个版本标识(如v1),后续在DataX的JSON配置中会引用此值。
current.publicKey: 将此处替换为上一步通过代码生成的公钥,用于加密敏感信息。
current.privateKey: 将此处替换为上一步通过代码生成的私钥,DataX引擎在运行时使用它解密配置文件中的密文。
在DataX任务配置中应用加密
在编写DataX的作业JSON配置文件时,需要进行以下三项改动以实现字段脱敏:
- 在
job.setting节点下,添加keyVersion配置项,其值取自.secret.properties文件中配置的current.keyVersion。
- 对需要加密的敏感字段(如
username, password),在其key前加上一个星号*,变为*username和*password。
- 将
*username和*password对应的value,由原来的明文改为使用公钥加密后的密文(密文由第一步的Java代码生成)。
以下是应用了加密的配置片段示例:
{
"job": {
"setting": {
"speed": {
"channel": 3
},
"errorLimit": {
"record": 0,
"percentage": 0.02
},
"keyVersion": "v1"
},
"content": [
{
"reader": {
"name": "mysqlreader",
"parameter": {
"*username": "a2KMPlT1nSUJx",
"*password": "b1VFs5VzcW4V0Cnyb",
// 其他连接参数...
}
},
"writer": {
// 写入器配置...
}
}
]
}
}
完成以上配置后,执行DataX任务。在任务日志中,你可以观察到DataX成功解密了用户名,而对于密码等更高敏感度的信息,日志会以***进行脱敏显示,这标志着配置文件加密功能已成功生效。
通过这套机制,你可以将包含数据库凭证的配置文件安全地纳入版本控制系统或分发给其他运维人员,而无需担心敏感信息泄露,极大地提升了大数据同步作业的安全性。
|