2. 设备Shadow数据资产识别与分类分级

设备影子(Device Shadow)是物联网平台为每台设备维护的一份 JSON 文档,它把设备的“期望状态”和“上报状态”解耦,使应用端不必关心设备是否在线。正因为它同时承载了设备身份、运行状态、控制意图和业务属性,影子文档本身就是一类高价值的数据资产。本节要解决的问题是:如何从影子文档的字段中识别出真正的数据资产,并依据敏感程度完成分类分级。

一、影子文档的字段结构

以 AWS IoT 风格的影子文档为例,其顶层通常包含 state、metadata、version、timestamp 四类节点。state 下又分为 desired(期望值,由应用下发)、reported(上报值,由设备上报)和 delta(差异值,由平台自动计算)。metadata 记录每个字段的最后更新时间戳,version 用于乐观锁并发控制。

{
  "state": {
    "desired":  { "power": "on",  "targetTemp": 26 },
    "reported": { "power": "off", "targetTemp": 24, "gps": "31.23,121.47" },
    "delta":    { "power": "on",  "targetTemp": 26 }
  },
  "metadata": {
    "desired":  { "power": {"timestamp": 1718000001} },
    "reported": { "gps":   {"timestamp": 1718000005} }
  },
  "version": 42,
  "timestamp": 1718000005
}

从数据安全视角看,这些字段并非同等重要。version、timestamp 属于控制类元数据,泄露风险低;desired 反映控制意图,可能暴露业务策略;reported 中的 gps、serialNumber、firmwareVersion 等则可能直接构成个人敏感信息或设备指纹。因此识别资产的第一步,是把字段按语义归类,而不是按 JSON 层级归类。

影子文档字段 → 数据资产 → 敏感分级 映射关系 影子字段 state.desired 期望值 / 控制意图 state.reported 上报值 / 运行状态 state.delta 差异值 / 待执行 metadata 时间戳 / 变更轨迹 version / timestamp 并发控制 / 时序 设备标识字段 serial / deviceId 数据资产类别 控制意图资产 业务策略 / 指令集 运行状态资产 工况 / 健康度 位置与轨迹资产 GPS / 地理围栏 设备身份资产 序列号 / 证书指纹 行为画像资产 使用习惯 / 模式 控制元数据 版本 / 时间戳 敏感等级 L1 公开 可对外共享 L2 内部 限组织内使用 L3 敏感 需授权访问 L4 高敏感 加密 + 审计 L4 高敏感 脱敏后可用 L1 公开 无敏感内容

二、敏感数据判定标准

判定一个影子字段是否敏感,不能只看字段名,而应结合三个维度:可识别性、可关联性和可推断性。

  • 可识别性:字段能否直接或间接指向一个自然人、一台具体设备或一个受保护实体。例如 serialNumber 可直接定位设备,gps 可定位使用者。
  • 可关联性:字段能否与其他数据结合形成更完整的画像。单独一个 power 状态不敏感,但若与 gps、timestamp 结合,就能推断出“某人在某时段在家”这类信息。
  • 可推断性:字段是否隐含未直接暴露的信息。例如 firmwareVersion 可推断设备是否存在已知漏洞,targetTemp 可推断用户偏好。

基于这三个维度,可以给出一个可操作的判定规则:若字段满足“可识别性 = 是”,则至少为 L3;若同时满足“可关联性 = 是”且涉及个人或关键基础设施,则升为 L4;若仅满足“可推断性 = 是”,则定为 L2;三者皆不满足,则为 L1。

三、分级方法与落地示例

分级不是一次性动作,而应嵌入影子文档的建模阶段。推荐做法是:在设备物模型(TSL)定义时,为每个属性附加 sensitivity 标签,平台在生成影子文档时自动继承该标签。这样分级结果与字段定义同源,避免后期人工补标。

影子字段资产类别判定依据等级处置要求
state.reported.gps位置与轨迹可识别 + 可关联L4加密存储、访问审计、对外脱敏
state.reported.serialNumber设备身份可识别L3授权访问、日志留痕
state.desired.targetTemp控制意图可推断L2组织内使用
state.reported.power运行状态不可识别L1可公开
metadata.*.timestamp控制元数据不可识别L1可公开
version控制元数据不可识别L1可公开
实操提示:在批量设备场景中,建议先用脚本扫描影子文档的所有叶子字段路径,生成字段清单,再按上述三维度逐项打标。字段路径应精确到叶子节点,例如 state.reported.gps.lat 与 state.reported.gps.lng 应分别判定,因为纬度与经度的敏感程度可能因业务场景不同而不同。

四、常见误区与校验

第一个误区是“只按字段名判定”。不同厂商对同一语义可能使用不同命名,例如 loc、position、coord 都可能表示位置,仅靠关键词匹配会漏判。第二个误区是“忽略 delta 节点”。delta 由平台自动生成,内容与 desired 高度相关,但很多团队在分级时只处理 desired 和 reported,导致 delta 成为分级盲区。第三个误区是“分级后不校验”。建议在影子文档写入前增加一道校验:若字段携带 sensitivity=L4 标签,则必须走加密通道并记录审计日志,否则拒绝写入。

完成识别与分级后,影子文档的每个字段都应具备明确的资产标签和处置策略。这为后续的访问控制、加密存储和审计追踪提供了直接依据,也是设备 Shadow 数据安全工程从“看得见”走向“管得住”的关键一步。