跳到主内容

GDPR 合规

合规与安全

GDPR 合规

通用数据保护条例(GDPR, General Data Protection Regulation,欧盟法规 2016/679)自 2018 年 5 月 25 日起在欧盟全面实施,是当前全球最严格、最具影响力的个人数据保护法律之一。它适用于在欧盟境内提供能源服务的运营商,以及向欧盟境内数据主体提供商品或服务、监控其行为(无论企业注册地)的所有处理者。违规者最高可被处以全球年营业额 4% 或 2000 万欧元(取较高者)的罚款。

在电力与能源场景下,用户用电行为数据、智能电表读数、客户账户信息、报修记录、缴费记录、负荷预测输入等均构成个人数据,受 GDPR 约束。EnerOS 提供数据主体权利(DSR, Data Subject Rights)API、处理活动记录(ROPA, Records of Processing Activities)与数据本地化能力,便于运营商履行合规义务。

数据主体权利映射

GDPR 第 12-22 条规定了数据主体享有的八项核心权利,EnerOS 为每项权利提供对应的 API 端点:

GDPR 条款权利EnerOS API默认响应时长
Art. 13-14知情权GET /dsr/notice/{subject_id}即时
Art. 15访问权GET /dsr/access/{subject_id}≤ 30 天
Art. 16更正权PATCH /dsr/correct/{subject_id}≤ 30 天
Art. 17删除权(被遗忘)POST /dsr/erase/{subject_id}≤ 30 天
Art. 18限制处理权POST /dsr/restrict/{subject_id}≤ 30 天
Art. 20数据可携带GET /dsr/export/{subject_id}?format=json≤ 30 天
Art. 21反对权POST /dsr/object/{subject_id}≤ 30 天
Art. 22自动化决策反对权POST /dsr/no-automated/{subject_id}≤ 30 天

权利响应 SLA 配置

[dsr]
enabled = true
default_response_days = 30
extension_max_days = 60                  # 复杂请求可延期
notify_subject_on_extension = true
auto_escalate_days = 25                  # 临近超期自动升级

[dsr.endpoints]
notice = "/dsr/notice"
access = "/dsr/access"
correct = "/dsr/correct"
erase = "/dsr/erase"
restrict = "/dsr/restrict"
export = "/dsr/export"
object = "/dsr/object"
no_automated = "/dsr/no-automated"

数据处理原则

GDPR 第 5 条规定了六项数据处理核心原则,EnerOS 在工程实现中逐条对应:

原则含义EnerOS 实现
合法性、公平性、透明性处理须有合法依据并告知数据主体合法性基础字段 + 透明通知
目的限制不得为指定目的之外的目的处理purpose 标签强制校验
数据最小化仅收集必要数据字段最小化配置
准确性数据须准确并及时更正更正 API + 数据质量监控
存储限制不得超过必要期限retention 字段 + 自动删除
完整性与机密性适当安全措施保护数据AES-256-GCM + WORM 审计

合法性基础

GDPR 第 6 条规定了六种合法性基础,EnerOS 强制要求每个数据流声明其依据:

[data_flow.legality_basis]
allowed_values = [
    "consent",              # 同意(Art. 6(1)(a))
    "contract",             # 合同履行(Art. 6(1)(b))
    "legal-obligation",     # 法定义务(Art. 6(1)(c))
    "vital-interest",       # 重要利益(Art. 6(1)(d))
    "public-task",          # 公共任务(Art. 6(1)(e))
    "legitimate-interest"   # 正当利益(Art. 6(1)(f))
]
use eneros_privacy::dataflow::DataFlow;

let flow = DataFlow::builder()
    .name("smart-meter-collection")
    .purpose("load-forecasting")
    .legality_basis("contract")
    .retention_days(365 * 7)
    .pii_fields(["customer_id", "meter_id", "consumption_kwh"])
    .build()?;

flow.register().await?;

EnerOS 数据保护实施

1. 数据分类与标记

所有数据字段在 schema 中标注 PII 标记,便于实施差异化保护:

[data.classification]
enabled = true

[[data.fields]]
name = "customer_id"
pii = true
category = "direct-identifier"
encryption = "AES-256-GCM"

[[data.fields]]
name = "meter_id"
pii = true
category = "pseudo-identifier"
encryption = "AES-256-GCM"
pseudonymization = true

[[data.fields]]
name = "consumption_kwh"
pii = false
category = "operational"
retention_days = 2555

2. 字段级加密与列式访问控制

use eneros_tenant::encryption::FieldCipher;

let cipher = FieldCipher::new("AES-256-GCM")
    .key_id("kms-key-customer-pii")
    .aad(b"tenant=eu-west-1");

// 写入时自动加密
let encrypted = cipher.encrypt(customer_id.as_bytes())?;
db.insert("customers")
    .set("customer_id", encrypted)
    .set("meter_id", cipher.encrypt(meter_id)?)
    .await?;

// 读取时按角色解密
let row = db.select("customers").where_eq("id", 42).fetch().await?;
let customer_id = if user.has_permission("pii:read") {
    cipher.decrypt(row.get("customer_id"))?
} else {
    "REDACTED".to_string()
};

3. 处理活动记录(ROPA)

GDPR 第 30 条要求维护处理活动记录,EnerOS 自动生成 ROPA 报告:

# 导出 ROPA
eneros-cli audit ropa --output ropa-2026Q2.json

# 导出 CSV 格式
eneros-cli audit ropa --format csv --output ropa-2026Q2.csv

# 导出 PDF(用于审计交付)
eneros-cli audit ropa --format pdf --output ropa-2026Q2.pdf

ROPA 报告包含以下字段:

字段说明示例
处理活动名称业务流程名称智能电表数据采集
处理目的业务目的负荷预测
数据主体类别数据主体类型居民用户
个人数据类别数据字段列表客户 ID、电表读数
接收方数据接收方配电运营商
跨境传输第三国接收方
保留期限存储时长7 年
安全措施技术与组织措施AES-256-GCM + WORM
合法性基础GDPR 第 6 条依据合同履行

数据流转图

EnerOS 通过数据流图工具可视化展示个人数据的全链路流转,便于识别合规风险:

┌─────────────────┐     ┌──────────────────┐     ┌─────────────────┐
│  智能电表终端     │────▶│  EnerOS Gateway  │────▶│  时序存储引擎     │
│  (PII: meter_id) │     │  mTLS + 加密     │     │  AES-256-GCM    │
└─────────────────┘     └──────────────────┘     └─────────────────┘


┌─────────────────┐     ┌──────────────────┐     ┌─────────────────┐
│  DSR API 端点    │◀────│  查询/导出/删除    │◀────│  负荷预测 Agent  │
│  /dsr/*         │     │  RBAC + ABAC     │     │  脱敏后访问      │
└─────────────────┘     └──────────────────┘     └─────────────────┘


                                                ┌─────────────────┐
                                                │  WORM 审计链      │
                                                │  HMAC + 7 年保留  │
                                                └─────────────────┘

数据流注册

[[data_flow]]
name = "smart-meter-collection"
source = "meter-device"
destination = "eneros-timeseries"
data_categories = ["meter_id", "consumption_kwh"]
purpose = "load-forecasting"
legality_basis = "contract"
retention_days = 2555
cross_border = false

[[data_flow]]
name = "billing-export"
source = "eneros-timeseries"
destination = "billing-system"
data_categories = ["customer_id", "amount_due"]
purpose = "billing"
legality_basis = "contract"
retention_days = 3650
cross_border = false

配置示例

eneros.toml 中的 GDPR 配置

[compliance]
standard = "gdpr"
version = "2016/679"
enforce = true
dpo_email = "dpo@eneros.io"

[gdpr]
enabled = true
data_residency = "eu"                    # 数据驻留区域
cross_border_policy = "adequacy-only"    # 仅允许充分性认定国家
breach_notification_hours = 72           # 数据泄露通知 SLA
default_retention_years = 7

# 数据主体权利
[gdpr.dsr]
response_days = 30
extension_days = 60
auto_escalate_days = 25

# 处理活动记录
[gdpr.ropa]
auto_generate = true
schedule_cron = "0 0 1 * *"              # 每月 1 日自动生成
retain_years = 7

# 字段加密
[gdpr.encryption]
algorithm = "AES-256-GCM"
key_management = "kms"
rotate_days = 365
aad_fields = ["tenant_id", "region"]

# 跨境传输
[gdpr.cross_border]
default_policy = "deny"
adequacy_countries = ["CH", "GB", "JP", "CA"]
explicit_consent_required = true

# 数据保留
[gdpr.retention]
default_days = 2555
auto_delete = true
notify_before_days = 30

DPIA 评估

数据保护影响评估(DPIA, Data Protection Impact Assessment)是 GDPR 第 35 条要求的强制性流程,适用于高风险处理活动。EnerOS 提供 DPIA 模板自动生成与评估工具。

DPIA 触发条件

以下场景必须开展 DPIA:

  • 大规模系统性监控(如全网智能电表数据采集)
  • 公共区域大规模数据处理
  • 自动化决策与画像
  • 敏感数据(健康、生物特征等)处理
  • 跨境数据传输

DPIA 模板生成

# 生成 DPIA 评估模板
eneros-cli dpia init --project "smart-meter-rollout-2026" \
  --output dpia-smart-meter-2026.md

# 自动填充部分字段
eneros-cli dpia autofill --input dpia-smart-meter-2026.md \
  --data-flow smart-meter-collection

# 提交评审
eneros-cli dpia submit --input dpia-smart-meter-2026.md \
  --reviewer dpo@eneros.io

DPIA 评估要素

评估要素说明输出
处理活动描述目的、数据流、技术措施处理描述表
必要性评估是否为最小化处理必要性结论
风险识别对数据主体权利与自由的风险风险清单
风险缓解技术与组织措施措施清单
残余风险缓解后的风险残余风险等级
DPO 意见数据保护官评审评审意见
处置决定是否继续处理决定记录

DPIA 风险评估矩阵

风险等级影响发生概率处置
极高数据主体重大损害禁止处理
数据主体显著损害必须缓解后处理
数据主体一定损害缓解后处理
数据主体轻微影响可处理,监控
极低几乎无影响极低直接处理

调用示例

// 处理访问权请求
let report = dsr.access("subject-42").await?;
// report 含全部相关时序点位、审计记录与第三方共享清单

// 处理删除权请求
let result = dsr.erase("subject-42")
    .reason("user-request")
    .approver("dpo@eneros.io")
    .cascade(true)             // 级联删除相关数据
    .await?;
eneros-cli dsr erase subject-42 --reason "user-request" \
  --approver dpo@eneros.io

# 数据可携带导出
eneros-cli dsr export subject-42 --format json \
  --output subject-42-export.json

# 查看处理活动记录
eneros-cli audit ropa --tenant eu-west-1

# 数据泄露通知模拟
eneros-cli gdpr breach-notify --subject "smart-meter-leak-2026" \
  --affected-subjects 1000 \
  --authority "dpa-ireland" \
  --within-hours 72

删除操作落入 WORM 审计链,证明已履行删除义务。

合规检查清单

部署前请逐项确认:

  • 所有个人数据字段打上 pii=true 标签
  • 默认字段级加密(AES-256-GCM)+ 列式访问控制
  • DSR 请求 30 天内响应,超时自动升级
  • 处理活动记录(ROPA)可由 eneros-cli audit ropa 导出
  • 跨境传输仅允许至通过充分性认定的国家
  • 数据保留期默认 7 年后自动删除(除非法定更长)
  • 任命数据保护官(DPO)并公开联系方式
  • 数据泄露 72 小时内上报监管机构
  • 高风险处理活动开展 DPIA 评估并存档
  • 数据主体同意可撤回且易于操作
  • 自动化决策提供人工复核通道
  • 数据处理者(Processor)签订 DPA 协议
  • 隐私政策中清晰列出所有处理活动
  • 任命数据保护联络人(EU 代表,如适用)
  • 数据保护培训年度开展并归档

相关文档