# 日志表既要存一年，又要随时能删

> PCI DSS 要求保留 12 个月审计记录，GDPR 要求及时删除，解法在于 API 接收什么、日志记录什么。

原文: https://fdetimes.net/zh/analysis/api-compliance-audit-logs-data-deletion/

一项标准要求审计日志至少保留 12 个月；一部法律要求在有正当理由时“无不当延迟”地删除个人数据。把客户的邮箱地址写进一个必须存活 12 个月的日志库，等于给今后每一个删除请求都多造了一个必须触及的地方。

为欧美用户开发支付、医疗或电商平台 API 的人，都会碰到这个问题。把 GDPR、CCPA/CPRA、HIPAA 和 PCI DSS 逐条读下来，大部分内容最终归结为三个工程决策：API 接收哪些字段，日志记录什么，数据存在哪里、存多久。

想成为前线部署工程师（FDE）的人，值得在设计层面弄懂这些。一旦接触客户的真实数据，这些决策就要由你来做，至少要能解释清楚。

## 两股力量拉扯同一张日志表

第一股力量要求“记住”。根据 OneUptime 对 PCI DSS 的分析，要求 10.5.1 规定审计记录至少保留 12 个月，且最近三个月须可立即调取。

Wiz Academy 也把追踪每次 API 调用和响应的日志列为合规控制措施，因为它记录了数据在何时、何种情境下被访问。Traceable 则把“日志与监控不足”列为 API 的主要合规风险之一。

第二股力量要求“遗忘”。GDPR 自 2018 年 5 月 25 日起在所有欧盟成员国适用，其中第 25 条要求系统在设计上落实数据最小化等原则，第 17 条要求控制者在有正当理由时无不当延迟地删除个人数据。

GDPR 并非只管欧洲公司。它约束的是对欧盟境内个人数据的处理，所以一支在河内为德国客户提供服务的团队，同样在其适用范围内。

不过，只有当日志里含有个人数据时，两股力量才会真正冲突。一行“用户 84213 于 09:14 读取记录 5521，结果 200”的日志，放 12 个月也无妨。

而一行把包含姓名、邮箱和电话的完整响应体照搬下来的日志，会让日志库变成第二个个人信息数据库，每个删除请求都得伸进去处理。

**要点:** 日志应记录谁动了哪条数据，而不是把数据本身复制一份。

## 泄露往往出在“details”字段

“记录每次 API 调用和响应”听上去很稳妥，却也是最容易泄露数据的做法。OneUptime 指出一种非常常见的失败模式：审计记录里一个通用的 `details` 对象，成了 PAN、CVV 和认证令牌的泄露通道。开发者为了方便调试加上这个字段，某天就有人把整个请求体塞了进去。

在 PCI DSS 下，后果最为直接。卡验证码和其他敏感认证数据在交易授权后不得保留。如果 CVV 混进了日志，而按 10.5.1 这些日志又必须保留 12 个月，你就让自己违规了整整 12 个月。

设想一个 `POST /payments` 接口。“省事”的日志长这样：

```json
{"event":"payment.create","user":"an.nguyen@example.com","details":{"pan":"4111...","cvv":"123","amount":250000}}
```

按合规设计的日志只保留审计人员需要的内容：

```json
{"event":"payment.create","actor_id":"u_84213","resource":"pay_9f2a","card_ref":"tok_7c1e","result":"authorized","ts":"2026-10-08T09:14:02Z"}
```

区别在于数据如何被拦下。OneUptime 建议在写入环节阻止敏感载荷，而不是指望每个开发者都记得脱敏。实践中最持久的做法是白名单式的日志结构：日志组件拒绝任何不在名单上的字段，根本不存在自由格式字段。

## 删除是一套工作流，不是一条 DELETE 语句

如果说日志是法律要求你“记住”的地方，那么用户权利就是法律要求你证明自己清楚数据在哪里的地方。

Wiz Academy 总结道，在 CCPA/CPRA 下，API 必须支持四项权利：知情权、删除权、拒绝出售或共享权、更正权，同时要对收集、处理和保留做到透明。

加州总检察长办公室给出了具体数字：知情、删除或更正请求须在 45 个自然日内答复，可再延长 45 天。落到日历上，3 月 1 日收到的请求，默认截止日是 4 月 15 日，延期后最晚到 5 月底。

系统需要为每个请求保存收到日期、状态和截止日期。这意味着要有一张带状态机的 `privacy_requests` 表，而不是一张四处漂流的 Jira 工单。

CCPA 的删除权还附带“若干例外”。因此删除流程不能一刀切：它必须检查哪些记录因正当理由需要保留，删除其余部分，并记录这一决定。

GDPR 第 17 条又加上了时效压力，而这种压力会传导到数据的每一份副本：主数据库、副本、缓存、日志库和备份。

在风险方面，CCPA 一般不允许个人自行起诉，数据泄露除外：此时按事件计算法定赔偿，每起事件最高 750 美元。其他违规由总检察长或该州隐私保护机构（CPPA）处理。

泄露是用户少有的可以直接起诉的情形，所以一个塞满个人数据的日志库，恰恰是工程师能通过设计砍掉的那部分风险。

## 哪条规定落在哪一层

把各项要求分到三个技术层，工程师要承担的部分就一目了然：

| 法规 | 关键条款 | API | 日志 | 存储 |
|---|---|---|---|---|
| GDPR | 第 25 条：设计即保护数据；第 17 条：删除权 | 只接收真正需要的字段 | 不把个人数据复制进日志 | 所有副本（包括备份）都可删除 |
| CCPA/CPRA | 四项权利：知情、删除、拒绝出售/共享、更正；45 天期限 | 每项权利对应一个接口或流程 | 记录每个请求的处理过程 | 删除前检查例外 |
| HIPAA | 隐私规则、安全规则、泄露通知规则 | 管控 ePHI 的接收和处理 | 留有足够痕迹以发现并报告泄露 | 对 ePHI 实施安全控制 |
| PCI DSS 4.0 | API 专项要求；要求 10.5.1 | 认证、授权、加密 | 保留 12 个月，3 个月可立即调取 | 授权后不保留 CVV |

按列往下看，日志层是要求重叠最密集的一层，也因此最值得从第一天起认真设计。

## HIPAA 和 PCI DSS 4.0 比想象中更直白

大多数法规从不提“API”这个词。Wiz Academy 指出了例外：PCI DSS 4.0 专门为 API 设定了合规要求，涵盖认证、访问控制、加密和漏洞管理。

HIPAA 由三项规则组成：隐私规则、安全规则和泄露通知规则。按 Wiz 的解读，API 必须同时管控 ePHI 的接收和处理，配套相应的安全措施，并能支持泄露通知。

第三项规则又把问题拉回日志：没有完整的访问痕迹，就说不清是谁的数据被泄露了。

所以，如果在客户系统里只能先做一件事，那就是梳理敏感数据的流向：它从哪些接口进入，写进了哪些日志，复制到了哪些存储。这张图能同时回应 PCI 审计、GDPR 删除请求和 HIPAA 通知义务。

对 FDE 来说，最合适的时机是驻场第一周，在把任何 Agent 或数据管道接入客户系统之前的数据流评审中。这时发现一个塞满卡号的 `details` 字段，比在审计时才发现要便宜得多。

## 一项值得写进简历的技能

如果你瞄准的项目服务欧盟或加州用户，或者处理银行卡、健康数据，这些法规就会跟着项目走，不管你人在哪里。

阅读岗位描述时，留意 PCI、HIPAA、GDPR、audit logging、data retention、PII handling 这类词，把它们当作信号：你要做的是设计决策，而不只是写 CRUD。

简历上不要写“了解 GDPR”，要写你做了什么：一个在写入环节拦截 PAN 和令牌的白名单日志组件；一套带 45 天 SLA 和例外分支的数据删除工作流；一项热存储 3 个月、冷存储 9 个月、合计满 12 个月的日志保留策略。

面试官可以就其中任何一行深挖，而你能用自己真正做过的决策来回答。

数据法规还会不断变化，但设计原则是稳定的：日志按 ID 记录操作，个人数据只存在一个知道如何删除自己的地方。从第一天起这样设计的工程师，在审计人员上门时不必重写系统。

**本周动手试试:**

- 打开手头正在开发的一个服务，用 grep 找出所有记录请求/响应体或自由格式 details 对象的地方，列出哪些字段可能含有邮箱、卡号或令牌。
- 写一份白名单式的审计日志结构：谁、做了什么、针对哪个资源、何时、结果如何，全部用内部 ID 代替个人数据。
- 为数据删除请求画一张时序图：接收请求、核验身份、检查例外、从主数据库删除、处理副本和备份、在期限内答复。

## 信源

- [How Can I Achieve API Compliance? (Traceable)](https://www.traceable.ai/blog-post/achieve-api-compliance)

- [What is API compliance? A cloud security perspective (Wiz Academy)](https://www.wiz.io/academy/api-security/api-compliance)

- [California Consumer Privacy Act (CCPA) – California Attorney General](https://oag.ca.gov/privacy/ccpa)

- [General Data Protection Regulation (GDPR) – gdpr-info.eu](https://gdpr-info.eu/)

- [Art. 25 GDPR – Data protection by design and by default](https://gdpr-info.eu/art-25-gdpr/)

- [Art. 17 GDPR – Right to erasure ('right to be forgotten')](https://gdpr-info.eu/art-17-gdpr/)

- [How to Build PCI DSS Audit Logs Without Recording Sensitive Authentication Data (OneUptime)](https://oneuptime.com/blog/post/2026-09-24-pci-audit-logs-without-sensitive-authentication-data/markdown)
