跳到主要内容

流量脱敏配置

当录制生产上真实流量时,在涉及客户安全数据或者一些商业性敏感数据的情况下,我们往往需要针对某些敏感信息通过脱敏规则进行数据的变形,实现敏感隐私数据的可靠保护。

数据落库脱敏

数据落库时的脱敏主要是指对 AREX 数据库中 Mocker 表,ReplayRunDetails 表和 ReplayCompareResult 表进行加密,在进行数据落库时对数据进行脱敏,以保护敏感信息的安全性。具体实现方式是通过 SPI 机制,加载外挂 JAR 包,动态加载加密方式。为了实现这个功能,需要提供外挂 JAR 包的 URL 链接。以下以 AREX 提供的加密 JAR 包为例,该 JAR 包使用 AES 加密算法实现数据加密,其源码可以在代码仓库上查看。

系统配置页面

在 System Setting 页面,填写加密 JAR 包的 URL 链接,例如 Maven 仓库中的 JAR 包下载链接。填写完成后,需要重启 arex-storagearex-schedule 服务才能使加密生效。如果使用系统提供的加密 JAR 包,则还需要配置 AES 密钥文件。具体的配置方法可以参考下一节的说明。

服务配置

接上文,在使用系统提供的加密 JAR 包时,需要进行密钥文件的配置,arex-storage 服务和 arex-schedule 服务需要读取 AES 算法的密钥,以确保服务能够正确地进行加密操作。

  1. 将 AES 密钥文件 aesKey.bin 存放在 deployments 文件夹中的 arex-extension/arex-storagearex-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);
    }
    }
  2. 修改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 用户无法查看用户录制的数据。

有权限用户详情页展示:

无权限用户详情页展示: