合规清单
WebRTC 业务的合规问题,几乎都不在协议层,而在业务怎么用协议。DTLS-SRTP 解决的是链路保密,监管要回答的是:你采集了谁的数据、存到哪、谁能看、保存多久、能不能删、跨没跨境、用户知不知情。
本文是工程清单,不是法律意见。法律意见请走法务 / 外部律师。
1. 合规清单的工程意义
1.1 为什么需要合规清单
法务文档解决"做什么是违法的",工程合规清单解决"代码、配置、部署里要落到哪几个开关上"。两者的鸿沟体现在:
- 法务说"用户必须同意",工程要落到 UI 弹窗 + 同意时间戳入库 + 撤回机制。
- 法务说"不得跨境传输",工程要落到 TURN 选址 + SFU 选址 + 数据库选址 + DNS 解析路径。
- 法务说"未成年人需家长同意",工程要落到年龄网关 + 家长邮箱二次确认 + 数据隔离。
清单的价值是把每条法规拆成可在 PR review、CI、上线 checklist 里勾选的项。
1.2 什么时候适用
- 业务采集音视频、屏幕、文字消息,任何一类触达个人信息。
- 业务跨地区运营(哪怕只是用全球 CDN / TURN 集群)。
- 业务面向特定行业(医疗、金融、教育、政企)。
1.3 什么时候不适用
- 纯内网视频会议 + 私有化部署 + 无外部用户:仍要看内部数据治理,但跨境、未成年人这类外部触发条件可能不适用。
- Demo / 内测且数据可清空:可以暂缓部分清单项,但录音同意、TURN 凭据这类基础项不能省。
1.4 失败时的样子
- 监管约谈 / 罚款(GDPR 4% 全球营收、PIPL 5000 万或 5% 营收)。
- 应用商店下架(Apple / Google 都按地区合规审 SDK 清单)。
- B 端客户拒签:企业采购走安全问卷,缺一项就过不了。
- 媒体 / 集体诉讼(Illinois BIPA、加州 CCPA 私权诉讼)。
2. 法规矩阵表
下表覆盖 WebRTC 业务最常踩的合规面。触发条件指代码 / 数据出现什么情况就要按该法规走;工程影响指代码、部署、流程要做什么。
| 地区 | 法规 | 触发条件 | 工程影响 | 关键义务 |
|---|---|---|---|---|
| 欧盟 / 欧洲经济区 | GDPR (Regulation 2016/679) | 处理欧盟居民个人数据,无论企业是否在欧盟 | 数据最小化、被遗忘权 API、DPO、DPA、SCC 合同、欧盟内 TURN | 合法性基础、72h 漏洞通报、跨境传输机制 |
| 中国大陆 | PIPL(个人信息保护法)+ DSL(数据安全法)+ CSL(网络安全法) | 处理中国境内自然人个人信息 | 单独同意、本地化存储、出境安全评估或标准合同备案、CII 等保 | 单独同意、出境申报、删除权、本地代表 |
| 加州 | CCPA / CPRA | 在加州运营且年营收 ≥2500 万美元,或处理 ≥10 万加州居民数据,或 50% 营收来自卖数据 | Do Not Sell/Share 链接、敏感个人信息分类、撤回授权、12 个月披露 | 知情权、删除权、退出权、限制 SPI 使用 |
| 美国 | HIPAA | 业务作为 Covered Entity 或 Business Associate 处理 PHI | BAA 合同、加密静态与传输数据、最小必要、6 年审计日志 | 隐私规则、安全规则、违规通报 |
| 全球(卡组织) | PCI-DSS v4.0 | 业务路径上出现 PAN(卡号) | 暂停录音 / DTMF 屏蔽、CDE 隔离、键盘输入加密、季度扫描 | 卡数据范围最小化、网络分段、年度审计 |
| 美国 | COPPA | 面向 < 13 岁儿童或明知用户为儿童 | 年龄网关、家长可验证同意、儿童数据隔离 | 父母同意、最小数据、安全保障 |
| 巴西 | LGPD(Lei 13.709/2018) | 处理巴西居民个人数据 | DPO、合法性基础、删除权、跨境合同条款 | 与 GDPR 类似,监管机构 ANPD |
| 土耳其 | KVKK(Kanun 6698) | 处理土耳其居民个人数据 | VERBİS 注册、同意、跨境出境批准 | 数据控制者注册、明示同意、出境受限 |
| 美国伊利诺伊州 | BIPA | 采集生物识别(声纹、面部特征) | 写入同意书、保留期限、销毁机制 | 私权诉讼,每违规 $1k–5k |
| 美国教育 | FERPA | 处理学生教育记录 | 学校书面同意、家长访问权 | 教育记录保密 |
| 加拿大 | PIPEDA / Quebec Law 25 | 处理加拿大居民个人数据 | 同意、披露、跨境通知 | Quebec 要求加拿大本地化优先 |
| 日本 | APPI | 处理日本居民个人数据 | 跨境同意、安全管理措施 | 跨境前披露目的国 |
| 韩国 | PIPA | 处理韩国居民个人数据 | 单独同意、跨境通知、本地代表 | 与 GDPR 类似 |
3. GDPR 关键工程项
3.1 数据最小化(Art. 5(1)(c))
为什么:监管要求只采集业务必要的数据,多采就是违法。 工程落地:
- WebRTC 默认
getUserMedia({ video: true, audio: true }),要按业务区分 audio-only 场景。 - 不要把
RTCStatsReport全量上报埋点 —— 含 IP、SSRC、jitter,属个人数据。 - 入会 ID 用随机 UUID,不要用手机号 / 身份证拼接。
失败时的样子:日志里全是手机号明文,被监管或集体诉讼按字段计罚。
3.2 被遗忘权(Art. 17)
为什么:用户要求删除,必须能在合理时间内(一般 30 天)从所有副本删除。 工程落地:
- 录音文件按用户 ID 分目录,删除时连 OSS 对象 + CDN 缓存 + 备份磁带都要清。
- SFU 录制日志、QoE 指标库、ASR 文本库、客服工单系统,全都要建反向索引。
- 删除请求要落库,留 7 年合规证据。
3.3 DPO(Data Protection Officer)
为什么:核心业务是大规模处理个人数据 / 敏感数据时强制要求。 工程落地:把 DPO 邮箱写进隐私政策、应用 about 页、应用商店描述。
3.4 DPA(Data Processing Agreement)
为什么:业务把数据交给第三方处理(云、TURN 厂商、ASR 厂商、客服 SaaS),双方要签 DPA(Art. 28)。 工程落地:建一份"数据处理者清单"维护在仓库里,每个第三方对应一份 DPA。WebRTC 业务常见的处理者:Twilio / Agora / 声网 / TURN 托管 / OpenAI 转写 / Sentry。
3.5 跨境传输(Art. 44–49)
为什么:欧盟个人数据出境到非充分性认定国(如美国、中国),要走 SCC 标准合同条款 + DPIA + 加密 + 透明度报告。 工程落地:
- TURN / SFU / 录音存储优先选欧盟 region(Frankfurt、Dublin)。
- 用 EU-US Data Privacy Framework(2023 起)的厂商,记录其认证号。
- DNS 路由、CDN 边缘节点都要审是不是跨境。
4. PIPL 关键工程项
4.1 个人信息出境安全评估(Art. 38–40)
为什么:CAC 强制要求,超过阈值(处理超 100 万人个人信息、累计向境外提供 10 万人个人信息或 1 万人敏感个人信息)必须做安评。 工程落地:
- 中国境内用户的 TURN / SFU / 录音 / 数据库默认放境内,不让 RTP 包出去。
- 一定要跨境时,走 CAC 安评 / 标准合同 / 个人信息保护认证三选一。
- 申报材料里包括:数据类别、跨境路径图、接收方、保存期限、安全措施。
4.2 单独同意(Art. 14、29)
为什么:处理敏感个人信息(生物识别、医疗、金融、未成年)、跨境传输、共享给第三方,都要单独同意,不能裹在隐私政策里。 工程落地:
- 录音 / 录像、声纹识别、活体检测,要独立弹窗 + 单独勾选 + 单独按钮。
- 同意的时间戳、IP、UA、文案版本号入库 7 年(举证用)。
4.3 本地化存储与关键信息基础设施(CII)
为什么:CII 运营者收集的个人信息和重要数据应当在境内存储。金融、能源、电信、医疗、政务都在 CII 范围内。 工程落地:金融 / 政企客户要求"全栈境内"——SFU、TURN、信令、录音、CDN、监控、Sentry 都要境内。海外侧用独立租户。
4.4 删除权与撤回同意(Art. 15、47)
工程落地:和 GDPR 被遗忘权对齐,但要单独提供"撤回同意"按钮,撤回后业务继续提供基本功能不得拒绝。
5. CCPA / CPRA 关键工程项
5.1 Do Not Sell / Do Not Share
为什么:CPRA 把 "Sale" 扩展到 "Share"(含跨上下文广告)。WebRTC 业务如果接了 RTB 广告 SDK,就触发。 工程落地:
- 隐私政策首页放 "Do Not Sell or Share My Personal Information" 链接(GPC 浏览器信号也要识别)。
- 用户点击后,关掉广告 SDK 的数据共享开关,写一条审计记录。
5.2 敏感个人信息(SPI)分类
为什么:CPRA 引入 SPI 概念,含精确地理位置、生物识别、通信内容、健康信息。 工程落地:
- WebRTC 通话内容、屏幕共享、上传的医疗影像,都属 SPI。
- 提供 "Limit Use of My Sensitive Personal Information" 链接。
5.3 12 个月披露义务
工程落地:用户要求"过去 12 个月你拿到我什么数据"时,要导出结构化清单。建议做一个数据导出 API,按 user_id 拉所有索引。
6. HIPAA 关键工程项
6.1 PHI 保护
为什么:医生 - 患者通话、含病历的屏幕共享、ASR 转写文本,都属于 ePHI。 工程落地:
- TLS 1.2+ / SRTP 加密传输(默认就有)。
- 静态加密 AES-256(云盘默认 KMS)。
- E2EE 在多方会议里仍然推荐,因为 SFU 节点能看到明文。
6.2 BAA(Business Associate Agreement)
为什么:任何接触 PHI 的供应商都要签 BAA。 工程落地:选 WebRTC PaaS 时只用提供 BAA 的厂商(Twilio Programmable Video、Agora HIPAA 套餐、AWS Chime SDK、Zoom Healthcare)。
6.3 加密、审计日志、最小必要
| 控制项 | 工程落地 |
|---|---|
| 传输加密 | DTLS-SRTP(强制)+ wss 信令 |
| 静态加密 | KMS + 客户托管密钥(CMK) |
| 访问日志 | 所有 PHI 访问入审计库,6 年保留 |
| 最小必要 | 角色权限分级,医助看不到诊断记录 |
| 设备认证 | 终端要求 MDM / 屏锁 / 自动登出 |
7. PCI-DSS 与音视频通话
7.1 触发条件
坐席通过电话 / 视频帮客户下单,客户口播卡号或在共享屏幕里输入卡号 → CDE(Cardholder Data Environment)边界扩展到通话链路。
7.2 暂停录音(Pause-Resume)
为什么:PCI-DSS Req 3.2.1,禁止存储敏感认证数据(CVV、磁条、PIN)。如果整通录音含 CVV,整个录音存储成 CDE,扫描成本爆炸。 工程落地:
- 坐席桌面提供"开始读卡"按钮,触发:
- 通知 SFU 暂停 server-side recording。
- 通知客户端停止本地缓存。
- UI 显示红灯。
- 读卡完成"恢复录音",写一条 pause/resume 日志。
- 屏蔽 DTMF 音:让客户用手机键盘输入卡号时,把 DTMF tone 在 SFU 上替换成等长静音 / 单频音,防止后期还原。
7.3 推荐架构:DTMF 解耦
更安全的做法是把卡号采集完全移出语音链路:通话中给客户发短信链接 → 客户在 PCI 合规的支付页面输入卡号 → 坐席只收到 token。这样通话不在 CDE 里。
8. 未成年人保护
8.1 年龄阈值
| 法规 | 阈值 | 同意方 |
|---|---|---|
| COPPA(美) | <13 岁 | 父母可验证同意 |
| GDPR(欧盟基础) | <16 岁(成员国可降到 13) | 父母同意 |
| PIPL(中) | <14 岁 | 监护人同意 |
| LGPD(巴) | <12 岁 | 父母同意 |
8.2 年龄网关(Age Gate)
工程落地:
- 注册时让用户输入出生日期(不要只问"是否成年")。
- 低于阈值时,跳转家长同意流程:父母邮箱 / 信用卡 micro-charge / 视频签字 / 政府 ID 校验。
- 儿童账户的数据库物理隔离,不进数据中台 / 推荐系统。
8.3 失败时的样子
- COPPA 罚 FTC 单次最高 $5 万 / 违规,TikTok、YouTube 都被罚过亿。
- 儿童摄像头视频被推荐算法用作训练 → 集体诉讼。
9. 录音同意
9.1 单方 vs 双方同意
| 类型 | 代表地区 | 含义 |
|---|---|---|
| 单方同意(One-Party) | 美国联邦、纽约、得州、佛州(电话) | 通话任一方同意即可录 |
| 双方同意(Two-Party / All-Party) | 加州、伊利诺伊、佛州(电子)、宾州、马萨诸塞、华盛顿、欧盟、中国 | 所有参与方都要明示同意 |
跨州 / 跨国通话取严:只要有一方在双方同意辖区,就按双方同意。
9.2 提示音 + UI 提示
// 录音前的明示同意 UI(React 示例)
function RecordingConsentDialog({ onConsent, onCancel }) {
return (
<Modal title="本次通话将被录音" actions={[
{ text: '同意并继续', primary: true, onClick: () => {
recordConsent({ ts: Date.now(), version: 'v3', userId, ip });
playBeep(440, 800); // 440Hz 提示音 0.8s
onConsent();
}},
{ text: '不同意', onClick: onCancel },
]}>
<p>为了服务质量与争议处理,本次通话音频与视频将被录制并保存 90 天。</p>
<p>录制范围:摄像头画面、麦克风音频、屏幕共享内容。</p>
<p>您可随时通过 [设置 → 隐私] 申请删除。</p>
<p>详情见 <a href="/privacy">隐私政策</a>。</p>
</Modal>
);
}
通话过程中持续显示红色 REC 标识,对端也要看到。
10. 数据驻留与跨境 TURN
10.1 为什么 TURN 选址是合规问题
TURN 中继时,整个 RTP / RTCP 流经过 TURN 服务器。即使加密,流量元数据(IP、SSRC、码率、时长)也是个人数据。欧盟用户的流量经美国 TURN 中继 = 跨境传输,要走 SCC。
10.2 决策树
10.3 按用户地区动态选 TURN
// Node 信令服务端:根据用户地区下发 TURN
import crypto from 'node:crypto';
const TURN_REGIONS = {
eu: ['turn-fra.example.com', 'turn-dub.example.com'],
cn: ['turn-bj.example.cn', 'turn-sh.example.cn'],
us: ['turn-iad.example.com', 'turn-sfo.example.com'],
apac: ['turn-sg.example.com', 'turn-tyo.example.com'],
};
const REGION_SECRET = {
eu: process.env.TURN_SECRET_EU,
cn: process.env.TURN_SECRET_CN,
us: process.env.TURN_SECRET_US,
apac: process.env.TURN_SECRET_APAC,
};
/**
* 按地区签发短期 TURN 凭据,禁止跨区下发
* @param {string} userId
* @param {'eu'|'cn'|'us'|'apac'} region 经 GeoIP + 用户档案确认
*/
export function issueTurnCredentials(userId, region) {
const hosts = TURN_REGIONS[region];
const secret = REGION_SECRET[region];
if (!hosts || !secret) {
throw new Error(`unsupported region: ${region}`);
}
const ttl = 600;
const username = `${Math.floor(Date.now() / 1000) + ttl}:${userId}`;
const credential = crypto
.createHmac('sha1', secret)
.update(username)
.digest('base64');
return {
iceServers: hosts.map((h) => ({
urls: [`turn:${h}:3478?transport=udp`, `turns:${h}:5349?transport=tcp`],
username,
credential,
})),
region,
expiresAt: Math.floor(Date.now() / 1000) + ttl,
};
}
10.4 失败时的样子
- 用全球一个 TURN 集群:所有欧盟流量被路由到美国,DPIA 一查就违规。
- 中国用户被路由到香港 TURN:仍属出境,未做 CAC 安评 = 违规。
- 路由按 BGP 最近:合规上无法预测数据落点,安评做不了。
11. 医疗行业要点
11.1 HIPAA + 设备认证 + 端到端可审计
| 维度 | 工程项 |
|---|---|
| 接入 | OAuth + IdP(Okta / Azure AD),强制 MFA |
| 设备 | MDM 注册、屏锁、加密磁盘、远程擦除 |
| 链路 | DTLS-SRTP + 可选 E2EE(Insertable Streams) |
| 中间盒 | SFU 私有化 / BAA 厂商 |
| 录音 | KMS 加密 + 客户托管密钥 + 访问审计 |
| 留存 | 6 年(HIPAA),按州法可能更长 |
| 审计 | 谁在何时看了哪段录像,按 patient_id 可查 |
欧盟同时落 GDPR + 各国卫生法(德国 BDSG、法国 HDS 认证)。HDS 要求医疗数据托管商持有法国认证。
11.2 反模式
- 用普通 Zoom(无 BAA)做远程问诊。
- 病历截图传到 Slack / 通用聊天工具。
- 录音放在没有客户托管密钥的对象存储。
12. 金融行业要点
12.1 双录(双向录音录像)
中国银保监对人身保险、信托、私募、复杂产品销售强制双录:销售过程全程录音录像,保存 ≥10 年。
工程项:
- 必填字段:客户身份证、产品代码、销售员工号、风险揭示朗读片段。
- 文件格式:MP4 H.264 + AAC,关键帧间隔 ≤2s 方便取证。
- 哈希入链 / 时间戳服务(CFCA、TSA)防篡改。
- 监管报送接口:按银保监要求按月 / 按季度上传索引。
12.2 电子证据与 PCI-DSS
- 录音作为电子证据,要满足《电子签名法》和《最高人民法院关于民事诉讼证据的规定》对来源、存储、提取的要求。
- 涉及卡号场景,按第 7 节 PCI-DSS pause-resume。
13. 教育行业要点
13.1 COPPA + FERPA + 各地未成年人法
| 法规 | 范围 |
|---|---|
| COPPA | <13 岁儿童在线服务 |
| FERPA | 美国教育记录(成绩、出勤、纪律) |
| PIPL 第 31 条 | 中国 <14 岁儿童 |
| 双减 / 义务教育法 | 学科类校外培训广告、时段限制 |
13.2 工程项
- 摄像头默认关闭,老师强开要再次同意。
- 课堂录像不进推荐 / 训练数据。
- 家长账号可下载孩子数据、要求删除。
- 未成年人时段限制(夜间、单次时长)由后端强制,不靠前端。
14. 合规审计清单
14.1 开发前
- 数据流图:列出每类数据从采集 → 传输 → 存储 → 删除的路径,标注地区。
- DPIA / PIA:高风险处理(生物识别、儿童、跨境)必做。
- 第三方清单:每个 SaaS 一份 DPA / BAA / SCC。
- 隐私设计评审:默认值是隐私友好的(最小权限、最小留存)。
14.2 上线前
- 同意 UI 评审:文案、版本号、撤回入口、提示音。
- TURN / SFU 选址 vs 用户地区矩阵已 review。
- 录音 / E2EE 开关默认值符合行业要求。
- 删除 API 端到端验证:用户发起删除 → 7 天内核对各副本。
- 应用商店隐私标签(Apple Privacy Nutrition Label、Google Data Safety)填写一致。
- 安全评估:渗透测试、TURN 凭据爆破测试、信令重放测试。
14.3 运行中
- 月度:第三方清单复核、跨境流量复核。
- 季度:访问审计抽样、删除请求处理时长 SLA。
- 年度:DPIA 复评、应急演练、PCI 扫描、HIPAA 风险评估。
- 持续:72h 漏洞通报通道 ready,监管邮件有人响应。
15. 反模式
| 反模式 | 后果 | 修正 |
|---|---|---|
| 用一个全球 TURN 集群服务所有地区 | 欧盟数据出境无 SCC,PIPL 出境无评估 | 按地区分集群,信令按用户地区下发 |
| 把欧盟用户数据存美国 | GDPR 违规,监管罚款 + 客户合同违约 | 欧盟 region 部署 + EU-US DPF 厂商 |
| 不做地理路由,靠 BGP 自然就近 | 数据落点不可预测,安评做不了 | 信令显式按地区签发 ICE |
| 录音不告知 / 不留同意记录 | GDPR、PIPL、双方同意州违规 | 弹窗 + 提示音 + 同意入库 + REC 标识 |
| TURN 长期凭据写在前端 | 凭据被刷,TURN 当代理用 | REST API 短期凭据,单用户配额 |
| 儿童账户和成人账户共用一个数据库 | COPPA / PIPL 第 31 条违规 | 物理隔离 + 推荐系统 / 训练库排除 |
| 客服读卡号整通录音 | 整段录音落入 CDE,PCI-DSS 范围爆炸 | pause-resume + DTMF 屏蔽 + 短信收单链路 |
| 用普通会议产品做远程问诊 | 无 BAA,HIPAA 违规 | 选医疗版(带 BAA)或私有化部署 |
| 用户撤回同意后停止提供基本服务 | PIPL Art. 16 违规 | 区分必要处理与非必要处理 |
| 同意文案藏在 50 页隐私政策第 12 节 | 单独同意不成立 | 单独弹窗 + 单独勾选 + 文案版本号 |
16. 权威资料
- GDPR 全文(EUR-Lex):https://eur-lex.europa.eu/eli/reg/2016/679/oj
- EDPB 指南:https://www.edpb.europa.eu/our-work-tools/general-guidance/guidelines-recommendations-best-practices_en
- 中国 CAC 个人信息保护:https://www.cac.gov.cn/
- PIPL 全文(人大网):http://www.npc.gov.cn/npc/c30834/202108/a8c4e3672c74491a80b53a172bb753fe.shtml
- 数据出境标准合同备案:https://www.cac.gov.cn/2023-02/24/c_1678884830036813.htm
- HHS HIPAA 主页:https://www.hhs.gov/hipaa/index.html
- HHS 安全规则技术保障:https://www.hhs.gov/hipaa/for-professionals/security/laws-regulations/index.html
- PCI Security Standards Council:https://www.pcisecuritystandards.org/
- PCI-DSS v4.0 文档:https://www.pcisecuritystandards.org/document_library/
- 加州司法部 CCPA:https://oag.ca.gov/privacy/ccpa
- CPRA 全文:https://cppa.ca.gov/regulations/
- FTC COPPA 指南:https://www.ftc.gov/business-guidance/privacy-security/childrens-privacy
- ANPD(巴西 LGPD):https://www.gov.br/anpd/
- KVKK(土耳其):https://www.kvkk.gov.tr/
- IAPP 全球隐私法地图:https://iapp.org/resources/global-privacy-directory/
- 核对日期:2026-06-22