王西刚, 任 佳
(浙江理工大学 机械与自动控制学院,杭州 310018)
当今时代,互联网技术发展迅速,作为新时代互联网技术和传统制造业相融合的产物,工业互联网将在新一轮的工业革命中起到关键作用. 工业互联网有着数字化,网络化,智能化的优点,同时,网络的开放性和便利性又给工业互联网的信息安全带来了更大的挑战,因此,加强工业互联网防护建设,保障其数据信息的安全显得尤为重要.
2018年,工业和信息化部印发了《工业控制系统信息安全行动计划(2018-2020年)》,为工业互联网信息安全保障工作提供了系统性指导. 国内外众多专家和学者在网络协议[1],可信计算[2],安全分析方法[3],网络攻击[4,5],集群证明机制[6]和用户认证[7]等方面进行了研究,加强了工业互联网信息安全保障. 但随着工业控制系统更加复杂化,系统对数据管理的便捷性要求越来越高,各类数据管理软件也层出不穷,针对工业数据的特点来设计便捷性高,适应性强的数据管理平台才能提高生产效率,推动工业生产的智能化进程. 首先,机器设备生产的高频性,工业过程的复杂性使得工业数据具有体量大,种类多的特点,这意味着对数据管理平台的存储性能要求较高. 第二,由于工业生产的系统性和过程变量之间的关联性,工业数据存在完整性要求高,关联性强的特点,因此要求数据管理平台能够进行条理清晰,结构分明的数据管理. 第三,工业数据来源于工业网络和传感设备,存在时序性强,处理速度要求高的特点,需要数据管理平台能够实现快速数据读写和数据传输功能. 最后,数据管理平台一方面需要向管理人员和操作人员提供快捷的交互接口,一方面又要尽量保护数据信息安全,实现两者平衡的关键是建立灵活,精确的权利分配机制,在满足管理需求的前提下尽量降低数据泄露和破坏的风险,提升数据管理平台的信息安全保护能力.
针对以上问题,本文以中国移动的物联网平台OneNET为基础,基于Qt开发框架设计了一套用于PC端的工业互联网数据管理平台. 该平台可以及时将云端存储的数据保存到本地,解决了云平台不能长期存储大量数据的问题,为后续工业数据的建模和分析工作提供了便利. 另一方面,本文设计框架和思路可为解决工业互联网数据管理平台设计过程中的信息安全问题提供参照.
OneNET是中国移动基于物联网技术建造的开放平台,它支持多种协议类型,提供丰富的API和应用模板,可以便捷地进行工业互联网应用平台搭建. 其总体架构如图1所示.
OneNET作为PaaS[8](Platfom-as-a-Service)层,一方面通过多种协议连接设备,另一方面为应用软件开发提供接口,在工业互联网中起到了桥梁作用.OneNET采用分布式存储的结构保障了数据的存储安全,同时基于消息对象结构,多种数据调用接口来实现数据的高并发读写操作,加强了数据信息的安全保障.除此之外,它还提供了私有云功能模块,特有的私有协议RGMP以及第三方平台接入的加解密方案,为解决应用平台开发过程中的安全问题提供了便利. 得益于其较高的安全性和容灾性,目前OneNET已经成功应用在了矿业生产远程监测[9,10],智能设备数据管理[11,12]等工业互联网领域.
图1 OneNET平台架构示意图
REST(Representational State Transfer,表述性状态转移)是一种万维网软件架构风格[13],它把所有的数据信息抽象为资源并且对每一个资源使用唯一的资源标识符URL(Universal Resource Locator,统一资源定位符)来标识[14],所有资源及其结构组成了资源模型. 本文使用的资源模型组织架构形式如图2所示,设备数据以数据流的形式进行存储,APIKey用于限制设备和产品的访问权限,触发器用于满足触发条件时发送通知.
用户在初始使用时需要创建用户和产品,创建完成后即可通过数据管理平台调用API方法不断完善产品的设备信息和数据流等资源. 对于用户创建的产品,OneNET会自动分配一个产品APIKey,该产品APIKey默认关联产品下的所有设备,即具有访问该产品下所有设备信息和设备数据的最高权限. 对于每一个设备,用户可以自行创建并关联APIKey,但是其形式只能由OneNET平台分配而不能自定义,该设备APIKey只具有访问与其相关联设备的权限,对于其他设备没有访问权限. 这种权限分级的设计可以有效地对设备的数据信息进行分类和分级,为实现设备数据信息的分类保护提供了基础. 用户可以使用触发器实现对数据的监控,在发生某些意外情况时向用户发送告警通知.OneNET支持手机短信,邮件和URL地址3种通知方式.
图2 资源模型组织架构形式
RESTful API[15,16]是一种使用HTTP协议并符合REST风格的Web API. 数据管理平台需要通过RESTful API的方式和OneNET平台进行交互,获取云端数据保存在本地并且进行进一步的管理和分析. 具体来讲,资源模型中的单个资源或者一组资源都具有各自的URL作为从外部访问该资源的接口,第三方应用可以通过GET,PUT,POST,DELETE这4种HTTP请求方法分别对资源进行查询,更新,新建和删除操作[16].
以终端设备的接入协议为MODBUS为例,新建设备的URL为“http(s)://api.heclouds.com/devices”,HTTP请求方式为POST,HTTP头部参数名称为“apikey”,值为前文所述OneNET分配的的默认APIKey,请求参数及其说明如表1所示.
表1 HTTP请求参数说明
OneNET平台返回的参数一般包括errno,error和data分别表示调用错误代码,错误描述和请求的资源信息如查询的数据,设备的状态等.
为提高资源传输速率,发送的请求和接收到的响应都通过JSON[17]类型传输. 例如新建一个名称为“example”,地理位置信息为东经106度,北纬40度,鉴权信息为“xxx123”的设备,其请求参数JSON格式应为:
工业互联网通过网络解除了设备之间的空间距离限制,汇聚了大量的工业数据,只有对这些纷繁的数据进行条理清晰,层次分明的结构化管理才能有效保障数据信息的安全,同时也能提高工作效率. 但是数据管理平台作为人与数据交互的主要途径,具有接触人员数量较多,人员类型复杂的特点,因此需要在满足管理需求的情况下加强数据信息的保护. 本文基于Qt开发框架对数据管理平台进行开发. 图3为数据管理平台的整体架构图,平台包含数据库和交互界面两部分,这两部分通过模型-视图框架进行结合,在满足数据管理需求的同时,根据用户信息对数据操作权限和数据可访问范围进行分级和限制,实现对数据信息的保护.
图3 数据管理平台整体架构
Qt中的QtSql模块提供了对数据库的支持,同时也包含QtNetwork和QJsonObject[18,19]等模块可以进行基于HTTP的网络通信和JSON对象处理,因此可以很方便地调用OneNET的API获取云端数据,并进行解析和存储.
为了对数据进行结构化管理,本文设计了工厂,厂房,设备组,设备四个级别的数据标识,对每一条数据都将根据其标识进行分类归纳存储. 如图3所示,虚线框中显示了数据及其标识之间的关系,每一个数据标识对应一个数据表,数据表中存储了标识的编号,创建时间等详细信息,表2列出了各个数据标识及其存储在数据表中的信息.
表2 来源标识数据表信息
表2中所列出的数据标识相关信息为“是”表示对应的数据表存储了该信息,“否”表示不含有该信息. 经纬度信息用于在界面地图中标注,具体内容参考2.2.1节. 各级别的标识根据编号建立联系,例如某厂房的“父项编号”即为该厂房所在工厂的编号,而工厂有可能含有多个厂房,其含有厂房的数量用“子项数量”表示. “状态”体现了隶属该标识的所有设备的运行情况,分为正常和异常两种,所有设备正常运行时状态信息为正常,而只要有一个设备发生了数据异常或者离线等异常情况时状态信息变为异常,此时可根据各级别标识的状态信息逐级查找异常设备.
除了以上用于存储数据标识的数据表,数据库还需要存储从OneNET获得的设备数据信息以及用户的用户名和密码等信息. 设备的数据信息数据量庞大,是数据库的主要部分,通过定时向OneNET发送查询请求获得,数据内容由不同的工业过程和设备决定.
用户数据表包含用户名,密码,APIKey和权限等级四项内容,用户名和密码用于登录平台,APIKey用作向OneNET发送请求的头部参数值,所以APIKey的权限大小决定了该用户所能查询的数据范围,通过这种方法可以将不同种类的设备与不同种类的用户一一对应,使得用户只能对自己权利范围内的数据进行操作和管理,而无法获取其他设备的数据信息,从而有效防止设备信息泄露. 权限等级则用来对用户的操作方式进行权限划分,等级从高到低分别为管理员,高级用户和普通用户. 各等级用户的权限及其关系如图4所示. 高等级用户可以对低等级用户进行创建和删除等管理操作,不同等级用户拥有不同的数据访问权限.
交互界面主要有3种:(1) 是数据显示界面,包含工厂界面,厂房界面,设备组界面,设备界面和设备数据界面,分别对应显示设备数据的4个来源标识信息和数据信息; (2) 是操作界面,作为对数据库进行操作的交互接口; (3) 是用户登录和注册界面,用于用户登录或者创建新用户.
2.2.1 显示界面
主界面如图5所示,其中图5(a)是管理员登录后的主界面,图5(b)是普通用户登录后的主界面. 界面由标题栏,菜单栏,工具栏,主窗口和状态栏组成. 如图 5中,菜单栏包含所有功能菜单,工具栏包含菜单栏中一些常用操作的快捷方式,如“主页”,“定位”,“刷新”等. 状态栏显示了登录用户的类别以及网络连 接状态. 主窗口是基于数据表格和地图的工厂信息管理界面,主窗口左侧表格用于显示所有工厂的名称,可以通过表格“右键菜单-属性”查看工厂的详细信息.
为了实现用户的权限分级,应针对不同级别的用户设计不同的交互界面. 管理员和高级用户具有高于普通用户的操作权限,对比图5中两幅图的工具栏可以发现管理员比普通用户拥有更多的操作接口,具体包括“创建用户”,“添加”,“删除”和“修改”操作,同样的,在菜单栏中也进行了相应权限的划分. 在数据范围方面,管理员的APIKey可以访问所有设备信息,而普通用户只能访问部分权利范围内的设备信息. 假设所有工厂包括工厂A-J,其中工厂A-F为普通工厂,其余工厂为机密性工厂且不允许普通用户查看,基于此假设对管理员和普通用户的APIKey进行设备关联并测试登录效果,结果如图5所示,图5(a)所示管理员登录后可以访问所有工厂信息,图5(b)所示普通用户只能访问普通工厂信息. 需要说明的是用户可访问的数据范围并不是根据用户的级别确定的,而是在创建用户时指定的(参考2.2.3节),即同样是普通用户其可访问的数据范围也是存在差异的,这样能够提高权限划分的灵活性.
地图显示是通过Qt的QWebChannel[18]模块调用百度地图JavaScript API[20,21]来实现的,该API提供了丰富的函数接口,不仅可以显示地图,还可以进行标注,设置视图范围,导航等基于地图的操作. 地图中显示的工厂标注和表格中的工厂一一对应,如果某工厂的设备出现了异常状态,地图图标会由“水滴”变为“感叹号”,如图5主窗口地图中的左上方所示,此时可以通过地图标注的“右键菜单-在表格中位置”来选中表格中对应的异常工厂,如果需要从表格中找到相应的地图标注,可以单击表格中的某一工厂,此时地图中的对应图标会变为上下跃动的动态图标. 双击表格中的某一工厂或者地图中的工厂图标可以打开该工厂的厂房界面.
图6为某工厂E的详细信息. 主窗口右侧地图界面用于显示地图并根据工厂经纬度信息在地图中标注.主窗口内的搜索框用于对地图内关键字进行搜索,需连接互联网,而工具栏的搜索用于本地数据库的关键字搜索,可在离线状态下使用.
图6 某工厂E详细信息
图7所示为某工厂E的厂房界面示例,其中包含了该工厂的工厂名和所有的厂房信息,以图标和文字的形式显示,并对显示格式进行了简单的渲染(参考2.3节). 类似的,通过双击的方式还可以逐级打开设备组界面,设备界面和设备数据界面,设备组界面和设备界面形式类似厂房界面,只是作为不同级别的数据标识,其显示的信息内容不同. 设备数据界面以表格的形式呈现所有设备数据,并且会随着平台与OneNET的数据传输不断更新来实时显示数据内容,历史数据则保存在数据库中,历史数据的可查询时间范围也可以根据用户级别进行自定义划分. 使用工具栏中的“主页”,“向前”,“向后”可以灵活地进行不同级别数据标识显示界面的切换.
2.2.2 数据操作界面
用户对数据进行操作时需要通过操作界面进行信息交互,如填写想要查询的设备ID,新建设备的名称.在显示界面已经对数据操作接口进行了权限分级,这里以管理员权限为例介绍数据操作界面.
数据操作主要包括设备数据和各级数据标识的新建,查询,删除和修改操作. 由于本地数据结构和OneNET端的存储结构是保持统一的,两者之间通过“设备”这一数据标识进行数据信息的对接,即图2资源模型中的一个设备对应图3数据结构中的的一个设备,资源模型中的设备数据对应本地数据库中的设备数据表,所以在进行数据操作时也要保证进行本地数据库和OneNET端的数据内容相统一,例如在删除某一数据标识时,会删除该标识以及其下属级别的所有数据标识和数据信息,同时也需要删除OneNET端属于该标识的设备和数据信息.
新建工厂时需要指定工厂的地理位置和名称,为方便确认地理位置,在执行该操作时需结合工厂显示界面的地图,首先在地图中定位需要新建工厂的地理位置,然后单击该点,获得该点的经纬度信息并显示在弹出的新建工厂操作界面中,如图8所示,然后输入新建工厂的名称,最后关闭界面,平台会自动获取系统当前时刻的具体时间并根据工厂数据表中工厂的数量确定新建工厂的编号,一起保存在工厂数据表中.
图7 某工厂E的厂房界面
图8 新建工厂操作界面
新建设备的操作界面如图9所示,首先需要选择设备的来源标识,如果数据库中没有保存所需的来源标识,应先在本地数据库中新建各级来源标识,然后在新建设备操作界面中选择相应的标识. 确定标识后需要输入设备名称和鉴权信息,对于表1中非必须的参数暂时没有设置输入接口,可根据实际需求进行添加.信息输入完成后平台会向OneNET端发送新建设备的POST请求并获取OneNET端返回的设备ID,然后把新设备的所有信息保存在设备数据表中,并提示设备新建成功,在OneNET端新建成功的设备信息如图10所示.
图9 新建设备操作界面
图10 OneNET端设备信息
用户能够通过新建触发器来确定触发通知的条件,实现对数据的实时监控. 删除和修改操作可以直接通过目标项目右键菜单中的删除和修改来执行操作,也可通过相应操作界面中的下拉列表逐级查找目标项目来进行删除和修改操作. 为保护原始数据,修改操作无法对设备数据和来源标识的创建时间,状态等固有属性进行修改,只能修改名称,经纬度等可变信息. 查询操作可以通过关键字进行本地数据库搜索和地图内的关键字搜索,也可以通过查询操作界面输入对应参数向OneNET发送查询请求获取查询结果.
2.2.3 登录和注册界面
登录界面用于用户登录时输入用户名,密码和用户类别,并根据用户数据表信息给出“登陆成功”,“用户名不存在”,“密码错误”的提示信息. 如图11所示为用户登录界面.
图11 用户登录界面
为了保护数据信息安全,尽量减少不必要的用户数量,创建用户的权限也进行了划分,管理员用户可以创建所有级别的用户,高级用户可以创建普通用户,普通用户不能创建新的用户,如图12所示为管理员权限的创建用户界面.
创建用户时需要输入用户名和密码,选择用户类型并添加允许该用户访问的设备. 添加完成后平台将所添加设备的ID作为请求参数向OneNET发送新建APIKey的POST请求,OneNET会新建一个APIKey,并将其与添加的所有设备建立关联,然后返回给数据管理平台作为新用户的APIKey,这样就划定了新用户能访问设备信息的范围.
MVC[22](Model-View-Controller)是一种常用于创建用户界面的设计模式,包含3个组件:模型,视图和控制,分别用来表示数据,显示数据和操作数据. 在Qt中将视图和控制两种组件结合形成了模型-视图架构,将数据的存储和数据的显示进行分离,能够更加方便地对数据进行显示和操作,同时为了对用户输入进行灵活处理,Qt还引入了代理(Delegate)的概念,以此来优化数据显示[18]. 模型-视图的架构如图13所示.
前文所述工厂等数据表即为图13中的数据,为了更加方便地访问基于表格结构的数据,在本文中使用了QSqlTableModel作为数据模型,而对于视图分别使用了QWebEngineView,QTableView和QListView等多种视图进行显示,分别如图5右侧地图和左侧表格以及图7所示,其中图7是使用代理渲染的图标列表视图.
图12 注册用户界面
图13 模型-视图架构
本文基于物联网开放平台OneNET设计并实现了一套用于PC端的工业互联网数据管理平台,在设计过程中着重考虑了可能发生的人为数据泄漏和破坏问题,结合OneNET的APIKey权限分类方法针对每个用户独立地进行数据访问范围上的划分,通过交互界面多级设计的方法实现用户数据操作权限的分级,建立了数据的异常监控报警机制,在发生异常情况时能够及时向用户发送告警通知. 整个流程可为加强工业互联网终端平台搭建过程中的信息安全保障提供参照. 除此之外,本文实现了基于百度地图的地理位置信息管理和设备数据的结构化管理方式,使得交互界面更加友好,方便数据的分析和建模工作. 在接下来的工作中,为进一步加强数据信息安全保护,可以结合比较成熟的生物特征识别算法加强用户信息认证的安全性,同时考虑到数据信息中可能包含个人敏感信息,在后续工作中会对数据进行脱敏处理,保障信息安全.