当前位置: 首页 > news >正文

DataKit 采集器敏感信息加密最佳实践

DataKit 采集器敏感信息加密

敏感信息如密码、账号信息等,如果您希望避免在配置文件中以明文存储这些信息,则可以使用该功能。

如密码加密,DataKit 在启动加载采集器配置文件时遇到 ENC[] 时会在文件、env、或者 AES 加密得到密码后替换文本并重新加载到内存中,以得到正确的密码。

安装 DataKit

登陆观测云控制台,点击左侧「集成」选择顶部「DataKit」,即可看到各种方式的安装命令。

本文选择 Linux 方式安装,执行安装命令即可。

采集器加密配置

ENC 目前主机支持两种方式:

  • 文件形式(推荐)
  • AES 加密

文件形式(推荐)

配置文件中密码格式: ENC[file:///path/to/enc4dk] ,在对应的文件中填写正确的密码即可。

接下来以 mysql 为例,说明两种方式如何配置使用。

首先,将明文密码放到文件 /usr/local/datakit/enc4mysql 中(文件路径以及密码可自定义)。

然后修改配置文件 usr/local/datakit/conf.d/db/mysql.conf 。

# 部分配置
[[inputs.mysql]]host = "localhost"user = "datakit"pass = "ENC[file:///usr/local/datakit/enc4mysql]"  # mysql明文密码的文件存放地址port = 3306# sock = "<SOCK>"# charset = "utf8"

DK 会从 /usr/local/datakit/enc4mysql 中读取密码并替换密码,替换后为 pass = "HelloWord" 。

AES 加密方式

配置:vi /usr/local/datakit/conf.d/datakit.conf ,编辑 DataKit 主配置文件 datakit.conf 并添加如下配置,aes_key 跟 aes_Key_file 配置二选一。

# crypto key or key filePath.
[crypto]# 配置秘钥(如下二选一)aes_key = "0123456789abcdef"# 或者,将秘钥放到文件中并在此配置文件位置。aes_Key_file = "/usr/local/datakit/mykey"

然后修改配置文件 usr/local/datakit/conf.d/db/mysql.conf (pass 的密文需要通过 aes 加密后填入)。

# 部分配置
[[inputs.mysql]]host = "localhost"user = "datakit"pass = "ENC[aes://5w1UiRjWuVk53k96WfqEaGUYJ/Oje7zr8xmBeGa3ugI=]"port = 3306# sock = "<SOCK>"# charset = "utf8"

注意,通过 AES 加密得到的密文需要完整的填入,可根据实际语言进行加密处理,以下是 JAVA 的 AES 加密示例:

import javax.crypto.Cipher;
import javax.crypto.spec.IvParameterSpec;
import javax.crypto.spec.SecretKeySpec;
import java.security.SecureRandom;
import java.util.Base64;public class AESUtils {public static String AESEncrypt(byte[] key, String plaintext) throws Exception {javax.crypto.Cipher cipher = Cipher.getInstance("AES/CBC/PKCS5Padding");SecretKeySpec secretKeySpec = new SecretKeySpec(key, "AES");SecureRandom random = new SecureRandom();byte[] iv = new byte[16];random.nextBytes(iv);IvParameterSpec ivParameterSpec = new IvParameterSpec(iv);cipher.init(Cipher.ENCRYPT_MODE, secretKeySpec, ivParameterSpec);byte[] encrypted = cipher.doFinal(plaintext.getBytes());byte[] ivAndEncrypted = new byte[iv.length + encrypted.length];System.arraycopy(iv, 0, ivAndEncrypted, 0, iv.length);System.arraycopy(encrypted, 0, ivAndEncrypted, iv.length, encrypted.length);return Base64.getEncoder().encodeToString(ivAndEncrypted);}public static String AESDecrypt(byte[] key, String cryptoText) throws Exception {byte[] ciphertext = Base64.getDecoder().decode(cryptoText);SecretKeySpec secretKeySpec = new SecretKeySpec(key, "AES");if (ciphertext.length < 16) {throw new Exception("ciphertext too short");}byte[] iv = new byte[16];System.arraycopy(ciphertext, 0, iv, 0, 16);byte[] encrypted = new byte[ciphertext.length - 16];System.arraycopy(ciphertext, 16, encrypted, 0, ciphertext.length - 16);Cipher cipher = Cipher.getInstance("AES/CBC/PKCS5Padding");IvParameterSpec ivParameterSpec = new IvParameterSpec(iv);cipher.init(Cipher.DECRYPT_MODE, secretKeySpec, ivParameterSpec);byte[] decrypted = cipher.doFinal(encrypted);return new String(decrypted);}
}
public static void main(String[] args) {try {String key = "0123456789abcdef"; // 16, 24, or 32 bytes AES keyString plaintext = "HelloAES9*&.";byte[] keyBytes = key.getBytes("UTF-8");String encrypted = AESEncrypt(keyBytes, plaintext);System.out.println("Encrypted text: " + encrypted);String decrypt = AESDecrypt(keyBytes, encrypted);System.out.println("解码后的是:"+decrypt);} catch (Exception e) {System.out.println(e);e.printStackTrace();}
}

总结

对 DataKit 采集器密码加密,能避免敏感信息在配置文件中明文暴露,降低未授权访问或意外泄露风险,满足企业及行业安全规范与合规要求,同时防止配置文件在备份、迁移等流转过程中,敏感信息被轻易获取破解,保障数据安全。

http://www.dtcms.com/a/317405.html

相关文章:

  • NineData 新增支持 AWS ElastiCache 复制链路
  • 从 0 到 1 创建 InfluxDB 3 表:标签、字段、命名规范一篇讲透
  • 什么是单元测试?
  • 完美解决hive external表中csv字段内容含“,“逗号的问题
  • 贪心算法学习 跳跃游戏
  • 利用OJ判题的多语言优雅解耦方法深入体会模板方法模式、策略模式、工厂模式的妙用
  • macOS Python 安装
  • 《设计模式之禅》笔记摘录 - 13.迭代器模式
  • 外观模式(Facade Pattern)及其应用场景
  • 【设计模式精解】从根上理解模板方法设计模式及其应用
  • RN项目环境搭建和使用-Mac版本(模拟器启动不起来的排查)
  • Python虚拟环境完全指南:pyenv vs venv 在macOS上的使用详解
  • Mac安装WebStorm
  • java中Reflection反射(一)
  • MCU AI/ML - 弥合智能和嵌入式系统之间的差距
  • Java猜数字简易小游戏可复制
  • qt6 cmake vscode加载qrc图片资源
  • vue3 el-select el-option 使用
  • 批量打印Excel条形码
  • Linux入门DAY18
  • 单变量单步时序预测:CNN-GRU卷积神经网络结合门控循环单元
  • EasyExcel高效工具类:简化Excel导入导出,支持多Sheet与枚举转换
  • 基于CentOS-7.6部署k8s-1.24.0,containerd作为CRI,nerdctl作为容器管理CLI
  • Datawhale AI 夏令营 让AI读懂财报PDF(多模态RAG)202508
  • bool 类型转换运算符重载
  • WordPress自定义.js文件排序实现方法
  • CSS :is () 与 :where ():简化复杂选择器的 “语法糖”
  • 凸优化:鞍点和对偶停止设计准则
  • 基于PHP的快递管理系统的设计与实现
  • 利用C++11和泛型编程改进原型模式