名称: gdpr-compliance 描述: GDPR合规规划,包括合法依据、数据主体权利、数据保护影响评估和实施模式 允许工具: 读取、全局、搜索、写入、编辑、任务
GDPR合规规划
在开发开始前,为通用数据保护条例合规提供全面指导。
使用此技能的时机
- 规划处理欧盟居民个人数据的系统
- 设计同意管理和偏好中心
- 实施数据主体权利(访问、删除、可移植性)
- 进行数据保护影响评估(DPIA)
- 定义数据处理协议和控制者/处理者关系
GDPR基础知识
七项原则
| 原则 | 描述 | 实施重点 |
|---|---|---|
| 合法性、公平性、透明度 | 有效的法律依据、公平处理、清晰的隐私通知 | 同意流程、隐私政策 |
| 目的限制 | 为特定、明确的目的收集 | 目的跟踪、使用限制 |
| 数据最小化 | 适当、相关、仅限于目的 | 字段级理由 |
| 准确性 | 保持数据准确和最新 | 更新机制、验证 |
| 存储限制 | 仅保留必要的时间 | 保留政策、自动删除 |
| 完整性和保密性 | 适当的安全措施 | 加密、访问控制 |
| 问责制 | 证明合规性 | 审计日志、文档化 |
处理的合法依据
1. 同意 - 自由给予、特定、知情、明确
2. 合同 - 合同履行所必需
3. 法律义务 - 法律要求
4. 重大利益 - 保护某人的生命
5. 公共任务 - 官方权威/公共利益
6. 合法利益 - 与数据主体权利平衡
合法利益评估(LIA):
- 目的测试:是否存在合法利益?
- 必要性测试:处理是否对该利益必要?
- 平衡测试:主体的利益是否优先?
数据主体权利实施
权利清单
| 权利 | 描述 | 响应时间 | 实施 |
|---|---|---|---|
| 访问 | 个人数据副本 | 1个月 | 导出端点 |
| 更正 | 纠正不准确数据 | 1个月 | 更新端点 |
| 删除(“被遗忘权”) | 删除个人数据 | 1个月 | 删除管道 |
| 限制处理 | 限制数据使用 | 1个月 | 处理标志 |
| 数据可移植性 | 机器可读导出 | 1个月 | JSON/CSV导出 |
| 反对 | 停止处理 | 无不当延迟 | 退出机制 |
| 自动化决策 | 决策的人为审查 | 可变 | 审查队列 |
.NET实施模式
// 数据主体请求处理
public interface IDataSubjectRequestHandler
{
Task<DataExport> HandleAccessRequest(Guid subjectId, CancellationToken ct);
Task HandleErasureRequest(Guid subjectId, ErasureScope scope, CancellationToken ct);
Task<PortableData> HandlePortabilityRequest(Guid subjectId, string format, CancellationToken ct);
}
public class DataSubjectRequestService : IDataSubjectRequestHandler
{
private readonly IPersonalDataLocator _dataLocator;
private readonly IAuditLogger _auditLogger;
private readonly TimeProvider _timeProvider;
public async Task<DataExport> HandleAccessRequest(Guid subjectId, CancellationToken ct)
{
await _auditLogger.LogRequestReceived(subjectId, "Access", _timeProvider.GetUtcNow());
var locations = await _dataLocator.LocateAllPersonalData(subjectId, ct);
var export = new DataExport
{
SubjectId = subjectId,
GeneratedAt = _timeProvider.GetUtcNow(),
Categories = new List<DataCategory>()
};
foreach (var location in locations)
{
var data = await location.ExtractData(ct);
export.Categories.Add(new DataCategory
{
Name = location.CategoryName,
Purpose = location.ProcessingPurpose,
LawfulBasis = location.LawfulBasis,
RetentionPeriod = location.RetentionPolicy,
Data = data
});
}
await _auditLogger.LogRequestCompleted(subjectId, "Access", _timeProvider.GetUtcNow());
return export;
}
public async Task HandleErasureRequest(Guid subjectId, ErasureScope scope, CancellationToken ct)
{
// 检查法律保留或保留要求
var blocks = await CheckErasureBlocks(subjectId, ct);
if (blocks.Any())
{
throw new ErasureBlockedException(blocks);
}
var locations = await _dataLocator.LocateAllPersonalData(subjectId, ct);
foreach (var location in locations)
{
if (scope.IncludesCategory(location.CategoryName))
{
// 软删除并安排硬删除
await location.MarkForDeletion(_timeProvider.GetUtcNow().AddDays(30), ct);
}
}
await _auditLogger.LogErasureInitiated(subjectId, scope, _timeProvider.GetUtcNow());
}
}
同意管理
// 具有细化目的的同意跟踪
public class ConsentRecord
{
public Guid SubjectId { get; init; }
public string Purpose { get; init; } = string.Empty;
public bool IsGranted { get; init; }
public DateTimeOffset Timestamp { get; init; }
public string ConsentMechanism { get; init; } = string.Empty; // 例如,“WebForm”、“API”
public string ConsentVersion { get; init; } = string.Empty; // 同意文本版本
public string? WithdrawalTimestamp { get; set; }
}
public interface IConsentManager
{
Task RecordConsent(ConsentRecord consent, CancellationToken ct);
Task WithdrawConsent(Guid subjectId, string purpose, CancellationToken ct);
Task<bool> HasValidConsent(Guid subjectId, string purpose, CancellationToken ct);
Task<IReadOnlyList<ConsentRecord>> GetConsentHistory(Guid subjectId, CancellationToken ct);
}
public class GdprConsentManager : IConsentManager
{
private readonly IConsentRepository _repository;
private readonly IEventPublisher _events;
public async Task<bool> HasValidConsent(Guid subjectId, string purpose, CancellationToken ct)
{
var latest = await _repository.GetLatestConsent(subjectId, purpose, ct);
if (latest is null)
return false;
if (latest.WithdrawalTimestamp is not null)
return false;
// 检查同意版本是否仍为当前版本
var currentVersion = await _repository.GetCurrentConsentVersion(purpose, ct);
if (latest.ConsentVersion != currentVersion)
{
// 同意是在旧条款下给出的 - 需要重新同意
return false;
}
return latest.IsGranted;
}
}
数据保护影响评估(DPIA)
需要DPIA的时机
当处理可能导致高风险时,DPIA是强制性的:
- 系统性和广泛的画像分析,具有显著影响
- 特殊类别数据的大规模处理
- 公共区域的系统监控
- 具有未知隐私影响的新技术
- 具有法律/类似影响的自动化决策
- 儿童数据的大规模处理
DPIA模板结构
## 1. 处理描述
- 性质:您将用数据做什么?
- 范围:多少数据、多少主体、地理区域?
- 背景:影响预期的内部/外部因素?
- 目的:您试图实现什么?
## 2. 必要性和比例性
- 合法依据和理由
- 目的限制评估
- 数据最小化措施
- 数据质量方法
- 存储限制政策
## 3. 风险评估
### 对个人的风险
| 风险 | 可能性 | 严重性 | 得分 | 缓解措施 |
|------|------------|----------|-------|------------|
| 未经授权的访问 | 中 | 高 | 6 | 加密、多因素认证 |
| 数据泄露 | 低 | 关键 | 4 | 监控、事件响应计划 |
| 不准确的画像 | 中 | 中 | 4 | 人为审查 |
### 剩余风险
[应用缓解措施后]
## 4. 咨询
- DPO建议获得:[日期]
- 监管机构咨询:[如需要]
- 数据主体意见考虑:[如何]
## 5. 签署
| 角色 | 姓名 | 批准 | 日期 |
|------|------|----------|------|
| 项目所有者 | | [ ] | |
| DPO | | [ ] | |
| CISO | | [ ] | |
风险评分矩阵
严重性
低(1) 中(2) 高(3) 关键(4)
可 高(4) 4 8 12 16
能 中(3) 3 6 9 12
性 低(2) 2 4 6 8
很低(1) 1 2 3 4
阈值:
- 1-4:可接受风险
- 5-8:需要缓解措施
- 9-12:需要高级批准
- 13+:咨询监管机构
隐私设计检查清单
架构阶段
- [ ] 数据流已文档化,个人数据突出显示
- [ ] 每个数据元素的目的已定义
- [ ] 每个目的的合法依据已确定
- [ ] 每个类别的保留期已定义
- [ ] 访问控制要求已指定
- [ ] 加密要求已定义
- [ ] 假名化机会已识别
开发阶段
- [ ] 同意收集正确实施
- [ ] 数据主体权利端点已创建
- [ ] 审计日志捕获处理活动
- [ ] 数据保留自动化已实施
- [ ] 静态和传输中加密
- [ ] 输入验证防止过度收集
- [ ] 错误消息不泄露个人数据
测试阶段
- [ ] 同意流程已测试(授予、撤回、重新同意)
- [ ] 所有数据主体权利端点功能正常
- [ ] 保留自动化已验证
- [ ] 访问控制已测试
- [ ] 审计日志完整且准确
- [ ] 数据暴露的渗透测试
处理活动记录(ROPA)
第30条要求
控制者必须维护以下记录:
处理活动:客户账户管理
控制者:[组织名称]
DPO联系人:dpo@example.com
目的:
- 账户认证
- 订单履行
- 客户支持
数据主体类别:
- 客户
- 潜在客户
个人数据类别:
- 姓名、电子邮件、电话
- 地址
- 订单历史
- 支付令牌(非卡号)
接收方:
- 支付处理器(Stripe)
- 物流提供商(FedEx)
- 客户支持平台(Zendesk)
国际传输:
- Stripe Inc.(美国) - SCCs
- 无安全保障的第三国传输
保留:
- 活跃账户:关系期间
- 关闭账户:7年(法律要求)
安全措施:
- 传输中TLS 1.3
- 静态AES-256
- 基于角色的访问控制
- 定期访问审查
国际数据传输
Schrems II后的传输机制
| 机制 | 用例 | 要求 |
|---|---|---|
| 充分性决定 | 欧盟批准的国家 | 无额外要求 |
| 标准合同条款(SCCs) | 最常见 | 需要传输影响评估 |
| 有约束力的公司规则 | 集团内传输 | 监管机构批准 |
| 例外(第49条) | 偶尔传输 | 范围有限 |
传输影响评估(TIA)
## 传输影响评估
### 1. 传输详情
- 导出方:[欧盟实体]
- 导入方:[第三国实体]
- 国家:[列表]
- 数据类型:[类别]
- 传输机制:[SCCs/BCRs等]
### 2. 第三国评估
- 要求向当局披露的法律
- 监控立法
- 法治/司法独立
- 当局的实际访问
### 3. 补充措施
- 技术:[加密、假名化]
- 合同:[附加条款]
- 组织:[政策、培训]
### 4. 结论
- 风险级别:[可接受/需要缓解/不可接受]
- 决策:[继续/修改/暂停]
交叉引用
- CCPA/CPRA:参见类似概念(披露、删除、退出)
- AI治理:
ai-governance技能,用于AI特定要求 - 安全框架:
security-frameworks,用于技术控制 - 数据分类:
data-classification,用于敏感性级别