物联网时代,智能产品的应用越来越广泛,然而想要构建一款满足合规要求的智能产品却并非易事。智能产品的构建通常涉及较长的产业链条,包括智能设备端、云设备端及用户操作端,而大多数从事 IoT 智能设备构建的开发者更多的经验集中在嵌入式设备的开发,对于在云平台上该如何轻松、安全地构建智能产品缺乏经验,且常常被一些设备端的问题所困扰。近日,亚马逊云科技 Tech Talk 特别邀请解决方案架构师郑辉作为嘉宾带来《使用 Amazon IoT Core 构建安全合规的智能产品》的主题分享。
智能产品背后的挑战
在构建智能产品时,开发者常常面临诸多挑战,包括安全合规挑战、大规模设备连接问题等。郑辉将开发者在构建智能产品时遇到的挑战概括为以下三点。
首先,由于终端设备的多样化,物联网的开发和应用存在较严重的碎片化问题。传感器的种类多种多样,每个传感器对应的连接协议也包含多种通讯模块。此外,同一个设备也会对应不同的场景,如智能家居场景、安防场景、新能源场景等,这些场景所对应的终端不管是操作系统还是所使用的开发语言都大相径庭。因此,会导致严重的终端碎片化问题。
其次,协议多样化也是困扰开发者的主要问题之一。对于物联网来说,最重要的是设备与设备的通讯。物联网技术框架体系中所使用到的通讯协议有:AMQP、JMS、REST、HTTP/HTTPS、COAP、DDS、MQTT 等。根据 Eclipse 基金会的调查,MQTT、HTTP、WebSocket 是物联网解决方案中最常用的消息传递协议。但整体来看,当前物联网协议呈现多元化发展,不同行业和场景适用不同的协议,在相同的场景下也可能有多个协议可供选择。
第三,是数据隐私法规问题。世界各国都有相应的数据隐私法规,IoT 设备作为最接近用户端的设备,会收集到用户大量的数据,这些数据会涉及非常多的个人隐私。不管是美洲、欧洲还是亚太地区乃至各个国家,都有自己的隐私保护法。其中,最为著名的是欧盟的《通用数据保护条例》(GDPR)。目前,如何在构建智能产品时满足不同的安全合规需求,仍是企业和开发者面临的一大挑战。
智能产品安全合规问题的应对之道
终端碎片化、协议多样化以及数据隐私法规合规问题如同三座大山,横亘在开发者与智能产品的构建之间。如何克服挑战,构建安全合规的智能产品?Amazon IoT Core 提供的正是这样一项托管服务,让连接的设备轻松安全地与云端应用程序和其他设备进行交互。Amazon IoT Core 能实现以下基础功能。
- 将设备安全地大规模连接到亚马逊云和其它设备;
- 路由、处理来自连接设备的数据;
- 使应用程序即使在离线时也能与设备进行交互;
- 与其他亚马逊云科技服务完美集成在数据之上进行推理?(分析, 数据库, AI, 等);
- 支持物联网解决方案中最为常用的 WebSocket、HTTP、MQTT 等协议。
具体来说,Amazon IoT Core 是如何解决安全合规问题的呢?在基础功能之外,这些重要的特性是其解决安全问题的关键。
第一,管理设备授权并且提供大规模唯一性认证服务。Amazon IoT Core 平台支持 SigV4,X.509,Cognito 和自定义身份验证四种认证方式。用户可使用自己的 Root CA 和客户端证书,或者让 Amazon IoT Core 生成证书。提供四种认证方式的优势在于:首先,既可通过即时注册实现自动化设备配置,也可以通过 Fleet Provisioning 实现自动化设备配置,保障其云上连接的安全性。其次,认证服务本身需要和 IoT 策略绑定,因此,云上访问可以通过 IoT Core 策略来实现灵活及更加细粒度的访问控制。
第二,利用设备网关实现物联网场景完全托管的连接优化。所谓完全托管即能够实现无论多少设备跟 Amazon IoT Core 去连接,都可以完成低延时、高数据量的通信,保证连接不受计算资源的困扰。Amazon IoT Core 支持多种协议,包括 MQTT, WebSocket, HTTP 等。此外,它通过 TLS 1.2 进行安全通信 ,只有云端和设备互认后才能完成数据的传输和交互,这种方式可以有效保障数据的安全性。不仅如此,Amazon IoT Core 还可配置终端节点和自定义域名,并且能够对性能受限的设备进行优化。
认证服务和设备网关是保障智能产品安全的关键特性。那么,设备如何访问到云端呢?对于权限控制链路,亚马逊云科技提供了两种不同的解决方案。
解决方案一:IoT Core 中证书与设备绑定, 证书附加策略,策略规定连接上云的范围,一个证书对应一个设备。在策略中,通过精细定义策略内容,达到最小化设备连接权限,实现安全需求。
解决方案二:手机端 App 不直接连接 IoT Core,通过网关做一层中转,方便在网关处进行权限控制。从 Amazon IoT Core 的最佳实践经验来看,不建议手机 APP 直接连接到 IoT Core,一方面开发不方便,IoT Core的连接鉴权需要引入Amplify/Cognito/STS等服务,没有其他功能需求时,增加开发复杂度;另一方面,在 APP 里放证书或者IoT Core连接的鉴权方式,尤其是安卓系统,非常容易被反编译破解。因此,亚马逊云科技的解决方案建议在 IoT Core 与 APP 之间加一层中间网关,方便对设备端安全进行控制。
通过以上两种方案,可实现了精细化的权限控制。以解决方案一为例,如果采用此种策略,那么能够执行的操作仅为连接、对应的发布、接收消息及订阅对应的 MQTT 主题。由于平台已经对 MQTT 的主题资源进行了限定,因此能够操作的 MQTT 主题也是相当有限的。通过这样的策略,能够实现最小设备连接权限,达到安全需求。假如出现设备产品的迭代,用户也可以通过更改策略的方式,保证设备没有太大的权限,或者通过把这个设备淘汰掉,让它无法进行连接,通过这样的方式,将很方便地对设备进行对应的控制。
安全合规通常被连在一起,但事实上安全和合规是两个不同的议题。以上策略保证了智能产品的安全性,亚马逊云科技又是如何帮助用户进行合规建设的呢?郑辉将实现整体合规性的方式总结为三个方向:
- 合规的底层资源
- 权限、监控和加密
- 根据业务获取支持
亚马逊云科技基于对全球标准的合规遵从构建合规体系。以 GDPR 为例,GDPR 对个人数据方面有相应的要求,如客户(或任何最终用户)存储或处理的任何内容,包括:软件、数据、文本、音频、视频等。但这些内容会包含 “个人数据”,如一个门铃,门铃所在的位置会关联用户的基本身份信息;可穿戴设备,会记录用户常见的血压、心跳等数据,这些都是重要的数据,需要进行合法合规的保护。GDPR 针对个人数据处理有六大原则:
- 透明性,公平,合法性:合法的收集数据,并公开收集何种类型的数据;
- 限制使用目的:不得违反原有目的对数据进行额外处理;
- 数据最小化:只采集恰当的,相关的和有需要的数据;
- 数据内容的准确性:确保准确性,需要时只使用最新的数据;
- 储存限制:储存数据的时间不长于所需要的目的对应的时间;
- 管理责任制:数据应有相应的机制来防范非法的,没有授权的处理,防止数据外泄,被破坏等损失。
针对六大原则,亚马逊云科技采用相应的措施帮助客户落地 GDPR 合规。除了确保的合规性,亚马逊云科技还致力于为用户提供服务和资源,帮助其遵守可能适用于 GDPR 要求。
第一,存取控制。亚马逊云科技通过 IAM 身份认证的方式来提供访问控制。对 Amazon S3、Amazon SQS 和 Amazon SNS 中的对象实现精细访问控制。采用 API 请求验证,开发者可以通过 Amazon IAM 临时身份访问令牌的形式,获得 API 调用或者权限调用。
第二,监控记录。监控记录分为两个层面,其一,是对当前配置的修改,可以通过 Amazon Config 执行资产管理和配置。其二,是云上操作,用户可通过 Amazon CloudTrail 进行审核和安全分析。
第三,加密。亚马逊云科技的加密手段非常多,如使用KMS (EBS/S3/Glacier/RDS) 对静态的数据加密、使用KMS进行密钥管理等。如果想要连接亚马逊云科技的 VPC 环境,也可以通过 V** 网关进入 Amazon。如果对加密钥管理的方式不是很满意,需要拿到一个最高级别的密钥管理模块,通过 Amazon CloudHSM 在云中使用专用 HSM 模块来满足一些金融级别密钥管理要求。
第四,安全认证。亚马逊云科技通过了许多安全合规认证,符合各种严格的国际标准,包括:技术方法的 ISO 27001、云端安全的 ISO 27017 等,在海外去构建服务的时候可以满足很多安全合规要求。
对于云上日志和对应数据如何保存和监控,亚马逊云科技同样给出两种解决方案。
解决方案一,集中化的日志管理。集中式日志记录解决方案使组织能够跨多个账户和 Amazon 区域收集,分析和显示 Amazon 上的日志。该解决方案使用可简化 Amazon 云中 Elasticsearch 集群的部署,操作和扩展的托管服务 Amazon Elasticsearch Service(Amazon ES)以及与 Amazon ES 集成的分析和可视化平台 Kibana。结合其他 Amazon 托管服务,此解决方案为客户提供了可自定义的多账户环境,以开始记录和分析其 Amazon 环境和应用程序。
解决方案二,云上的隐私数据存取与归档。开发人员将仅出于履行订单(订单发货后不超过 30 天)或计算 / 缴纳税款的目的和必要时间保留 PII(个人资料)。在 30 天后需对资料进行归档。开发人员可使用 Amazon S3 服务对数据进行对应的智能分层管理。30 天后数据将自动归档到 Glacier 的存储库里。这些数据可全部通过亚马逊云科技的加密服务进行加密,来保证云上存储数据的安全合规。
除了针对底层进行一系列合规建设,在业务层面,亚马逊云科技同样提供了相应的支持。亚马逊云科技与美国和世界各地的监管机构持续合作。其目的一方面是分享亚马逊云科技的合规方法和合规工具,赋能监管机构以帮助审核人员考核亚马逊云科技云环境,帮助塑造法规格局,以反映技术的变化,同时促进业界与监管机构之间的对话;另一方面是评估和解读政策,按不同国家进行影响评估,以帮助企业应对如何运作;此外,亚马逊云科技还针对安全合规提供专业的服务团队,为客户提供安全保障服务。
综上所述,为什么说 Amazon IoT Core 是一个合规的产品呢?其一,亚马逊云科技所有的合规都遵从业务上的生命周期,在不同周期都有对应的服务工具帮助客户解决安全合规问题;其二,亚马逊云科技会与合作伙伴一起,通过 APN 与 Marketplace 为企业用户提供合规保障。
如何构建满足业务需求的智能产品
IoT Core 在安全与合规两个维度,通过不同的解决方案,满足客户需求。如果不涉及出海业务,安全合规的影响会相对较小,一旦涉及出海业务,安全合规问题将不容忽视,具体该如何基于 Amazon IoT Core 来进行安全合规的智能产品构建呢?在智能产品构建的过程中,主要基于 IoT Core 服务的以下几个功能。
第一,注册表。通过注册表可定义和登记设备以便亚马逊云科技其它服务使用并简化搜索 。可通过定义事物类型 (例如 本田和丰田属于汽车类型) 以实现跨设备的属性和策略的标准化;也可通过定义群组 (例如:汽车传感器) 以实现更简单的管理(运行作业,设置策略等)。
第二,规则引擎。可以低成本获取大量物联网数据,对其进行预处理,并将其提供给 10 多种服务,用于分析、报告和可视化。IoT Core 对数据的处理会提供多种内置函数,包括数学公式、字符串操作、日期等等,IoT Core 也可以对消息进行过滤,以及通过设备阴影和 Aamzon Machine Learning 或者 通过 Amazon Lambda 执行从外部源获取上下文。
第三,设备影子。大部分使用 Amazon IoT Core 去构建智能设备的用户,都会使用智能设备影子管理云上设备状态。设备影子是云上的 IoT Core 里面的一组特殊的 MQTT 主题,这组主题全部在云上进行了一层存储。通过设备影子用户可随时了解和控制设备的状态、报告设备的最后已知状态、或者改变设备的状态。因为设备影子有自己的命名规则,所以每个设备都可以拥有自己的影子,这样就可以很轻松地实现设备状态的控制,不再需要开发者自己做复杂的 MQTT 消息的业务逻辑设置。
使用设备影子进行设备状态控制,设备可以发送对应消息,IoT Core 收到消息后就可以触发对应的规则引擎,规则引擎可以把消息通过消息推送服务发送到用户手机上。设备影子的优势有三点:第一,无需复杂开发即可实现设备管理,Retain 标识逻辑设置等;第二,已定义好的消息版本,不用维护消息实时性;第三,每个设备都可以设置自己的影子,方便进行权限控制。
除进行设备状态控制,设备影子在设备意外离线的场景下也有着广泛的应用。因为智能设备的网络环境,工作环境不稳定,电量消耗,意外情况等原因,导致设备意外离线的情况时有发生。
传统的 MQTT 协议中,为了应对这类情况,有 LWT(Last Will and Testament) 机制。当设备连到 MQTT broker 上时,会设定一个特定的消息,把它发布到 broker 上,这个消息在 broker 里面做对应的存储。当设备因为意外情况断开连接的时候,这个 broker 就会把消息发布给订阅对应主题的订阅者,订阅者收到消息之后就知道设备意外离线了。
IoT Core 采用设备生命周期管理的方式。设置 LWT 消息,需要我们在嵌入式做额外的开发,设定设备的 online/offline 机制;而在亚马逊云科技的 IoT Core 上,会提供连接 / 断开连接事件。在客户端建立连接或者断开的时候,IoT Core 会把这个消息发布到对应的 MQTT 主题里,客户端 ID 在连接 MQTT 可以把它直接设置成为 SN 码,通过 SN 码,就可以知道到底是哪一个设备断开连接了。
对于 IoT Core 上的设备生命周期管理,亚马逊云科技提供两种管理方式。这两种方案都需要通过 Amazon IoT Core 规则引擎去实现。
管理方式一:
- 设备在云上注册时,以自身 SN 码进行注册,连接 MQTT 时,使用 SN 码作为 clientId;
- 规则引擎设定对 $Amazon/events/presence/connected(disconnected)/# 的过滤;
- 在 DynamoDB 中维护一张以设备 SN 码为主键的表,使用规则引擎监听连接 / 断开连接事件更新到 DynamoDB;
管理方式二:
- 设备在云上注册时,以自身 SN 码进行注册,连接 MQTT 时,使用 SN 码作为 clientId;
- 规则引擎设定对 $Amazon/events/presence/connected(disconnected)/# 的过滤;
- 使用规则引擎监听连接 / 断开连接事件重新发布给影子设备,更新影子设备 state 字段;