2. IoT设备身份建模
在IoT云IAM体系中,设备身份建模是权限治理的起点。如果设备没有稳定、唯一、可验证的身份,后续的授权、审计、吊销都无从谈起。本节围绕五个核心概念展开:设备唯一标识、设备影子、设备三元组、设备身份生命周期,以及身份与权限的映射关系。它们共同构成设备从“物理实体”到“云端可信主体”的建模链路。
一、设备唯一标识:身份的根
设备唯一标识是设备在云平台中的“身份证号”,必须满足全局唯一、不可伪造、可持久化三个条件。常见实现方式有三类:
- 硬件级标识:如芯片UID、MAC地址、IMEI。优点是出厂即定,缺点是部分可被篡改或复用,不适合直接作为云端身份凭据。
- 平台分配标识:设备首次注册时由IoT平台生成,如阿里云IoT的
ProductKey + DeviceName组合,或AWS IoT的thingName。优点是可控、可吊销,是主流做法。 - 密码学标识:设备持有唯一私钥,公钥注册到云端,标识即公钥指纹。安全性最高,适合高价值设备。
实际建模中,通常采用“平台分配标识 + 密码学凭据”的组合:平台分配一个可读的DeviceName用于管理,同时为设备签发唯一密钥对或证书用于认证。例如,某智慧园区项目为每台门禁设备分配DeviceName: gate-3F-021,并签发X.509证书,证书CN字段与DeviceName绑定,云端校验时同时验证标识与证书链。
二、设备影子:身份的“状态镜像”
设备影子(Device Shadow)是云端为每台设备维护的一份JSON文档,记录设备的期望状态(desired)和上报状态(reported)。它解决两个问题:一是设备离线时仍可被读写状态;二是应用无需直接连接设备即可查询或下发指令。
影子文档通常包含三个部分:state.desired、state.reported、metadata。例如,一台智能路灯的影子里,desired为{"brightness": 80},reported为{"brightness": 60},云端通过对比两者差异判断设备是否已执行指令。影子不是身份本身,但它承载了身份对应的“可授权资源”——权限系统可以针对影子中的字段进行细粒度授权,例如只允许某应用修改desired.brightness,不允许修改reported。
三、设备三元组:身份的“坐标”
设备三元组是IoT平台中定位一台设备的三个关键字段,典型形式为ProductKey、DeviceName、DeviceSecret。其中:
ProductKey:产品类别标识,同一型号设备共享,用于批量管理。DeviceName:设备实例标识,产品内唯一,用于区分具体设备。DeviceSecret:设备密钥,用于动态注册和认证,必须保密。
三元组的意义在于:它把“设备身份”拆解为“产品维度 + 实例维度 + 凭据维度”,使权限可以按产品批量授予,也可以按设备单独授予。例如,可以授权某运维角色管理ProductKey=PK_LIGHT下所有设备的影子读写,但只允许读取DeviceSecret的哈希值,不允许导出明文。
四、设备身份生命周期
设备身份不是静态的,它经历创建、激活、使用、变更、吊销、销毁六个阶段。每个阶段都有对应的IAM动作:
- 创建:在平台注册设备,生成三元组或证书,写入设备注册表。
- 激活:设备首次上线,用DeviceSecret或证书完成认证,平台将状态置为“在线”。
- 使用:设备正常上报数据、接收指令,权限系统按策略校验每次操作。
- 变更:设备迁移、固件升级、所属产品变更时,需要更新身份属性或重新签发凭据。
- 吊销:设备丢失、退役或密钥泄露时,将设备标识加入黑名单,撤销其所有权限。
- 销毁:从注册表删除设备记录,清理影子、规则引擎绑定和审计日志关联。
关键点在于:吊销必须即时生效。如果设备使用长期有效的证书,吊销后仍需等待证书过期,存在安全窗口。因此,建议采用短期证书 + 定期轮换,或使用动态注册机制,使吊销能通过拒绝续签立即生效。
五、身份与权限的映射关系
身份建模的最终目的是让权限系统能够回答:“这台设备/这个应用,能对哪些资源做什么操作?”映射关系通常通过策略(Policy)表达。策略的要素包括:主体(设备身份或应用身份)、资源(设备影子、Topic、函数)、动作(发布、订阅、读写)、条件(时间、IP、设备属性)。
例如,一条策略可以写成:允许设备gate-3F-021向Topic /gate/3F/021/events发布消息,但只允许订阅/gate/3F/021/commands。这样,设备身份与权限就通过资源路径和动作绑定在一起。当设备被吊销时,只需删除其身份,所有关联策略自动失效。
六、建模实践中的关键判断
在实际项目中,设备身份建模需要回答几个问题:设备是否支持硬件安全模块?如果支持,优先使用证书认证;如果不支持,使用DeviceSecret + 动态注册,并限制密钥有效期。设备影子是否需要持久化?对于需要离线指令的场景,影子必须持久化;对于纯实时数据流,可以只保留最近状态。三元组中的DeviceSecret如何轮换?建议在设备固件中实现密钥更新接口,平台侧支持双密钥并行验证,轮换期间新旧密钥均可使用,轮换完成后旧密钥失效。
最后,身份与权限的映射不是一次性的,而是随设备生命周期动态调整的。设备激活时授予最小权限,使用中根据行为审计逐步调整,吊销时立即回收所有权限。只有把身份建模和权限治理放在同一个闭环里,IoT云IAM才能真正做到“设备可信、权限可控、行为可溯”。