流量脱敏配置
当录制生产上真实流量时,在涉及客户安全数据或者一些商业性敏感数据的情况下,我们往往需要针对某些敏感信息通过脱敏规则进行数据的变形,实现敏感隐私数据的可靠保护。
数据落库脱敏
数据落库时的脱敏主要是指对 AREX 数据库中 Mocker
表,ReplayRunDetails
表和 ReplayCompareResult
表进行加密,在进行数据落库时对数据进行脱敏,以保护敏感信息的安全性。具体实现方式是通过 SPI 机制,加载外挂 JAR 包,动态加载加密方式。为了实现这个功能,需要提供外挂 JAR 包的 URL 链接。以下以 AREX 提供的加密 JAR 包为例,该 JAR 包使用 AES 加密算法实现数据加密,其源码可以在代码仓库上查看。
系统配置页面
在 System Setting 页面,填写加密 JAR 包的 URL 链接,例如 Maven 仓库中的 JAR 包下载链接。填写完成后,需要重启 arex-storage
和 arex-schedule
服务才能使加密生效。如果使用系统提供的加密 JAR 包,则还需要配置 AES 密钥文件。具体的配置方法可以参考下一节的说明。
服务配置
接上文,在使用系统提供的加密 JAR 包时,需要进行密钥文件的配置,arex-storage
服务和 arex-schedule
服务需要读取 AES 算法的密钥,以确保服务能够正确地进行加密操作。
将 AES 密钥文件
aesKey.bin
存放在deployments
文件夹中的arex-extension/arex-storage
和arex-extension/arex-schedule
目录中。需要注意的是,存放密钥文件的位置和文件名需要严格按照要求进行,否则服务可能无法正确读取密钥文件。在生成密钥文件时,文件名和后缀名是固定的,不能更改。生成代码如下:
import javax.crypto.KeyGenerator;
import javax.crypto.SecretKey;
import java.io.File;
import java.io.FileOutputStream;
public class AesKeyWriter {
private static final String AES_KEY_FOLDER_PATH = "./extension";
private static final String AES_KEY_FILE_PATH = AES_KEY_FOLDER_PATH + "/aesKey.bin";
private static void writeAesKey(String keyFilePath) {
try {
File extensionFolder = new File(AES_KEY_FOLDER_PATH);
extensionFolder.mkdirs();
// AES key generation
KeyGenerator keyGenerator = KeyGenerator.getInstance("AES");
// The key length can be adjusted as needed. aes only supports 128-bit, 192-bit or 256-bit keys
keyGenerator.init(256);
SecretKey secretKey = keyGenerator.generateKey();
byte[] keyBytes = secretKey.getEncoded();
// write key to file
FileOutputStream fos = new FileOutputStream(keyFilePath);
fos.write(keyBytes);
fos.close();
} catch (Exception e) {
throw new RuntimeException(e);
}
}
public static void main(String[] args) {
writeAesKey(AES_KEY_FILE_PATH);
}
}修改
docker-compose.yml
文件,将arex-extension/arex-storage
目录映射到arex-storage 服务
所在容器的extension
目录,将arex-extension/arex-schedule
目录映射到arex-schedule
服务所在extension
目录。这样,服务就可以正确地读取密钥文件并进行加密操作了。
自定义加密 JAR 实现
如果需要实现自己开发的加密算法,需要实现拓展接口的 jar 包中的 DataDesensitization
接口方法,并在 /META-INF/services
文件夹下指定具体实现的方法签名,可以参考 AREX 提供的 JAR 实现。拓展接口的 JAR 包坐标如下:
<dependency>
<groupId>com.arextest</groupId>
<artifactId>arex-extension</artifactId>
<version>0.0.1</version>
</dependency>
- 加密 JAR 需要可逆,保证录制流量可以用于回放的关键。如果加密不可逆,那么录制的流量在回放时无法正确解密,从而导致回放失败。
- 在使用 Maven 进行打包时,需要注意将依赖的 jar 包一起打包,以便运行时能够正确加载依赖的类和资源文件。Maven 打包配置如下:
<build>
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-assembly-plugin</artifactId>
<version>3.0.0</version>
<executions>
<execution>
<id>make-assembly</id> <!-- this is used for inheritance merges -->
<phase>package</phase> <!-- bind to the packaging phase -->
<goals>
<goal>single</goal>
</goals>
</execution>
</executions>
<configuration>
<descriptorRefs>
<descriptorRef>jar-with-dependencies</descriptorRef>
</descriptorRefs>
</configuration>
</plugin>
</plugins>
</build>
展示层数据脱敏
如果应用开启了应用鉴权,那么也就等同于开启了录制内容的前端脱敏。非 Owner 用户无法查看用户录制的数据。
有权限用户详情页展示:
无权限用户详情页展示: