在访问日志中脱敏敏感数据
在 Kubernetes 等容器化环境中部署 API 网关时,访问日志通常直接写入容器的标准输出。随后,这些日志将被容器运行时或日志收集工具捕获,并可转发到集中式的日志系统。
然而,这些日志可能包含敏感信息,例如电子邮件地址或访问令牌(Access Token)。如果在未进行适当处理的情况下存储或传输这些数据,可能会带来隐私和安全风险。为了降低这种风险,必须在日志记录过程中对敏感数据进行脱敏处理。
本指南将带你了解如何在网关的访问日志中脱敏电子邮件地址,其主要通过重新定义一个日志变量,并在 access_log_format 中通过 NGINX 的 map 模块应用该变量来实现。
前提条件
- 安装 API7 企业版。
- 你的网关组中至少包含一个网关实例。
更新网关配置
在本节中,你将通过在 request_uri 中使用 xxxxxx 替换电子邮件地址的值(同时保持 URI 的其余部分完好无损)来脱敏数据,从而保护日志中的敏感信息。
将下面的 http_configuration_snippet 配置添加到网关配置文件中的 nginx_config 配置块下,以评估 request_uri 并根据 map 块内部的模式匹配将其映射到新变量 masked_uri:
nginx_config:
http_configuration_snippet: |
map $request_uri $masked_uri {
~^(.*?email=)[^&\s]+(.*)$ $1xxxxxx$2;
default $request_uri;
}
更新网关配置文件中 nginx_config 下的 access_log_format 配置,并使用新变量 masked_uri 来记录请求 URI:
nginx_config:
http:
access_log_format: '$masked_uri $remote_addr - $remote_user [$time_local] $status $body_bytes_sent $request_time "$http_referer" "$http_user_agent" $upstream_addr $upstream_status $upstream_response_time "$upstream_scheme://$upstream_host$upstream_uri"'
重新加载 API7 网关以使配置更改生效。
验证
你可以使用任何现有的路由进行验证。如果网关尚未配置路由,请先创建一条路由用于验证。
向该路由发送一个在查询参数中包含电子邮件地址的请求:
curl -i "http://127.0.0.1:9080/get?email=test@gmail.com&user=123"
导航到 API7 网关的访问日志,你应该能够看到一条类似如下的日志记录,其中电子邮件地址已被脱敏:
2025-02-19 11:48:21 /get?email=xxxxxx&user=123 172.17.0.1 - - [19/Feb/2025:03:48:18 +0000] 200 562 0.004 "-" "curl/8.7.1" 192.168.10.101:3030
其他资源
如果你想要脱敏请求头、请求体或 URL 查询参数中的敏感数据,请参阅 data-mask 插件。