Amazon IoT Greengrass 安全概述 - Amazon IoT Greengrass
Amazon Web Services 文档中描述的 Amazon Web Services 服务或功能可能因区域而异。要查看适用于中国区域的差异,请参阅中国的 Amazon Web Services 服务入门

您正在查看Amazon IoT Greengrass Version 1。Amazon IoT Greengrass Version 2是最新的主要版本Amazon IoT Greengrass。有关使用的更多信息Amazon IoT Greengrass V2,请参阅Amazon IoT Greengrass Version 2开发人员指南

本文属于机器翻译版本。若本译文内容与英语原文存在差异,则一律以英文原文为准。

Amazon IoT Greengrass 安全概述

Amazon IoT Greengrass使用 X.509 证书,Amazon IoT策略以及 IAM 策略和角色,以保护在本地 Greengrass 环境中的设备上运行的应用程序。

下图显示了 Amazon IoT Greengrass 安全模型的组件:

A - Greengrass 服务角色

由客户创建的 IAM 角色Amazon IoT Greengrass访问您的Amazon资源来自 Amazon IoT Core 、Amazon Lambda和其他Amazon服务。有关更多信息,请参阅 Greengrass 服务角色

B - 核心设备证书

用于使用 Amazon IoT Core 和 Amazon IoT Greengrass 对 Greengrass 核心进行身份验证的 X.509 证书。有关更多信息,请参阅 Amazon IoT Greengrass 的设备身份验证和授权

C - 设备证书

用于使用 Amazon IoT Core 和 Amazon IoT Greengrass 对 Greengrass(连接)设备进行身份验证的 X.509 证书。有关更多信息,请参阅 Amazon IoT Greengrass 的设备身份验证和授权

D - 组角色

由客户创建的 IAM 角色Amazon IoT Greengrass调用时Amazon服务从 Greengrass 核心。

使用此角色可指定用户定义的 Lambda 函数和连接器访问权限。Amazon服务,例如 DynamoDB。您还可以使用它来允许Amazon IoT Greengrass将流管理器流导出到Amazon服务并写入 CloudWatch Logs。有关更多信息,请参阅 Greengrass 组角色

注意

Amazon IoT Greengrass不使用 Lambda 执行角色,该角色在Amazon Lambda以获取 Lambda 函数的云版本。

E - MQTT 服务器证书

用于 Greengrass 核心设备与 Greengrass 组中的连接设备之间传输层安全性 (TLS) 相互身份验证的证书。该证书由组 CA 证书签名,该证书存储在 Amazon Web Services 云 。

设备连接工作流程

本节将介绍 Greengrass 连接设备如何连接到 Amazon IoT Greengrass 服务和 Greengrass 核心设备。Greengrass 连接设备是与核心设备位于同一 Greengrass 组中的已注册 Amazon IoT Core 设备。

  • Greengrass 核心设备使用其设备证书、私钥和 Amazon IoT Core 根 CA 证书连接到 Amazon IoT Greengrass 服务。在核心设备上,crypto中的对象配置文件指定这些项目的文件路径。

  • Greengrass 核心设备从 Amazon IoT Greengrass 服务下载组成员信息。

  • 部署 Greengrass 核心设备时,Device Certificate Manager (DCM) 会处理 Greengrass 核心设备的本地服务器证书管理。

  • 连接的设备连接到Amazon IoT Greengrass服务使用其设备证书、私有密钥和 Amazon IoT Core 根 CA 证书。连接后, Amazon IoT Core 设备会使用 Greengrass 发现服务查找其 Greengrass 核心设备的 IP 地址。该设备还会下载组 CA 证书,此证书用于与 Greengrass 核心设备进行 TLS 相互身份验证。

  • 连接设备会尝试连接到 Greengrass 核心设备,并传递其设备证书和客户端 ID。如果客户端 ID 与设备的事物名称匹配并且证书有效(属于 Greengrass 组),将进行连接。否则,将终止连接。

这些区域有:Amazon IoT策略必须授予greengrass:Discover权限,允许设备发现核心的连接信息。有关策略语句的更多信息,请参阅Discovery 授权

配置 Amazon IoT Greengrass 安全性

要配置您的 Greengrass 应用程序的安全性,请执行以下操作:

  1. 为您的 Greengrass 核心设备创建一个 Amazon IoT Core 事物。

  2. 为您的 Greengrass 核心设备生成密钥对和设备证书。

  3. 创建 Amazon IoT 策略并将其附加到设备证书。该证书和策略允许 Greengrass 核心设备访问 Amazon IoT Core 和 Amazon IoT Greengrass 服务。有关更多信息,请参阅 核心设备的最低 Amazon IoT 策略

    注意

    使用事物策略变量(iot:Connection.Thing.*) 中的Amazon IoT策略不支持核心设备。核心使用相同的设备证书制作多个连接到 Amazon IoT Core 但连接中的客户端 ID 可能与核心事物名称不完全匹配。

  4. 创建 Greengrass 服务角色。此 IAM 角色授权Amazon IoT Greengrass访问来自其他Amazon代表您安装服务。这将允许 Amazon IoT Greengrass 执行基本任务,例如,检索 Amazon Lambda 函数和管理设备影子。

    您可以使用相同的服务角色跨 Amazon Web Services 区域 ,但它必须与 Amazon Web Services 账户 中的每个 Amazon Web Services 区域 您使用的位置Amazon IoT Greengrass。

  5. (可选)创建 Greengrass 组角色。此 IAM 角色将为在 Greengrass 核心上运行的 Lambda 函数和连接器授予调用Amazon服务。例如,Kinesis Firehose 接头需要将记录写入 Amazon Kinesis Data Firehose 传输流的权限。

    您只能将一个角色附加到 Greengrass 组。

  6. 为连接到您的 Greengrass 核心的每个设备创建一个 Amazon IoT Core 事物。

    注意

    您也可以使用现有 Amazon IoT Core 事物和证书。

  7. 为连接到您的 Greengrass 核心的每台设备创建设备证书、密钥对和 Amazon IoT 策略。

Amazon IoT Greengrass 核心安全委托人

Greengrass 核心使用以下安全委托人:Amazon IoT 客户端、本地 MQTT 服务器和本地 Secrets Manager。这些委托人的配置存储在 config.json 配置文件的 crypto 对象中。有关更多信息,请参阅 Amazon IoT Greengrass 核心配置文件

此配置包含用于身份验证和加密的主要组件使用的私有密钥的路径。Amazon IoT Greengrass 支持两种模式的私有密钥存储:基于硬件或基于文件系统(默认)。有关在硬件安全模块上存储密钥的更多信息,请参阅硬件安全性集成

Amazon IoT 客户端

Amazon IoT 客户端(IoT 客户端)管理 Greengrass 核心与 Amazon IoT Core 之间通过互联网进行的通信。Amazon IoT Greengrass 将 X.509 证书与公有和私有密钥一起使用,以便在为此通信建立 TLS 连接时实现双向身份验证。有关更多信息,请参阅 。X.509 证书和 Amazon IoT Core 中的 Amazon IoT Core 开发人员指南

该 IoT 客户端支持 RSA 和 EC 证书和密钥。该证书和私有密钥是为 config.json 中的 IoTCertificate 委托人指定的。

MQTT 服务器

本地 MQTT 服务器管理 Greengrass 核心与该组中其他 Greengrass 设备之间通过本地网络进行的通信。Amazon IoT Greengrass 将X.509 证书与公有和私有密钥一起,以便在为此通信建立 TLS 连接时实现双向身份验证。

默认情况下,Amazon IoT Greengrass 会为您生成一个 RSA 私有密钥。要将核心配置为使用其他私有密钥,您必须为 config.json 中的 MQTTServerCertificate 委托人提供关键路径。您负责轮换客户提供的密钥。

私有密钥支持
RSA 密钥 EC 密钥
密钥类型 Supported Supported
关键参数 Minimum 2048-bit length NIST P-256 or NIST P-384 curve
磁盘格式 PKCS#1, PKCS#8 SECG1, PKCS#8
最低 GGC 版本
  • 使用默认 RSA 密钥:1.0

  • 指定 RSA 密钥:1.7

  • 指定 EC 密钥:1.9

私有密钥的配置决定了相关过程。有关 Greengrass 核心作为服务器支持的密码套件的列表,请参阅 TLS 密码套件支持

如果未指定私有密钥(默认)
  • Amazon IoT Greengrass 基于轮换设置来轮换密钥。

  • 核心生成一个 RSA 密钥,用于生成证书。

  • MQTT 服务器证书包含一个 RSA 公有密钥和一个 SHA-256 RSA 签名。

如果指定了 RSA 私有密钥(需要 GGC v1.7 或更高版本)
  • 您负责轮换密钥。

  • 核心使用指定密钥来生成证书。

  • RSA 密钥的最小长度必须为 2048 位。

  • MQTT 服务器证书包含一个 RSA 公有密钥和一个 SHA-256 RSA 签名。

如果指定了 EC 私有密钥(需要 GGC v1.9 或更高版本)
  • 您负责轮换密钥。

  • 核心使用指定密钥来生成证书。

  • EC 私有密钥必须使用 NIST P-256 或 NIST P-384 曲线。

  • MQTT 服务器证书包含一个 EC 公有密钥和一个 SHA-256 RSA 签名。

    核心提供的 MQTT 服务器证书包含一个 SHA-256 RSA 签名,无理论密钥类型如何。因此,客户端必须支持 SHA-256 RSA 证书验证才能与核心建立安全连接。

Secrets Manager

本地 Secrets Manager 安全地管理您在 Amazon Secrets Manager 中创建的密钥的本地副本。它使用私有密钥来保护用于对密钥进行加密的数据密钥。有关更多信息,请参阅 将密钥部署到 Amazon IoT Greengrass 核心

默认情况下将使用 IoT 客户端私有密钥,但您可以为 config.json 中的 SecretsManager 委托人指定其他私有密钥。仅支持 RSA 密钥类型。有关更多信息,请参阅 指定用于密钥加密的私有密钥

注意

目前,Amazon IoT Greengrass仅支持PKCS #1 v1.5填充机制,用于在使用基于硬件的私钥时对本地机密进行加密和解密。如果您按照供应商提供的说明手动生成基于硬件的私钥,请确保选择 PKCS #1 v1.5。Amazon IoT Greengrass不支持最佳非对称加密填充 (OAEP)。

私有密钥支持
RSA 密钥 EC 密钥
密钥类型 Supported Not supported
关键参数 Minimum 2048-bit length Not applicable
磁盘格式 PKCS#1, PKCS#8 Not applicable
最低 GGC 版本 1.7 Not applicable

MQTT 消息传递工作流中的托管订阅

Amazon IoT Greengrass 使用订阅表来定义如何在 Greengrass 组中的设备、函数和连接器之间交换 MQTT 消息,以及如何与 Amazon IoT Core 或本地影子服务交换 MQTT 消息。每个订阅都指定了发送或接收消息所借助的源、目标和 MQTT 主题。仅当定义了相应的订阅时,Amazon IoT Greengrass 才允许将消息从源发送到目标。

订阅仅定义从源到目标的单向消息流。要支持双向消息交换,您必须创建两个订阅,每个订阅针对一个方向。

TLS 密码套件支持

Amazon IoT Greengrass 使用 Amazon IoT Core 传输安全模型通过 TLS 密码套件来加密与云的通信。此外,Amazon IoT Greengrass 数据还采用静态时加密(在云中)。有关 的更多信息 Amazon IoT Core 传输安全性和支持的密码套件,请参阅传输安全中的 Amazon IoT Core 开发人员指南

用于本地网络通信的受支持密码套件

相对于 Amazon IoT Core ,Amazon IoT Greengrass核心支持以下本地网络用于证书签名算法的 TLS 密码套件。当私有密钥存储在文件系统上时,所有这些密码套件都受支持。当核心被配置为使用硬件安全模块 (HSM) 时,子集将受支持。有关更多信息,请参阅 Amazon IoT Greengrass 核心安全委托人硬件安全性集成。该表还包含支持所需的最低 Amazon IoT Greengrass 核心软件版本。

密码 HSM 支持 最低 GGC 版本
TLSv1.2 TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA Supported 1.0
TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA Supported 1.0
TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384 Supported 1.0
TLS_RSA_WITH_AES_128_CBC_SHA Not supported 1.0
TLS_RSA_WITH_AES_128_GCM_SHA256 Not supported 1.0
TLS_RSA_WITH_AES_256_CBC_SHA Not supported 1.0
TLS_RSA_WITH_AES_256_GCM_SHA384 Not supported 1.0
TLS_ECDHE_ECDSA_WITH_AES_128_GCM_SHA256 Supported 1.9
TLS_ECDHE_ECDSA_WITH_AES_256_GCM_SHA384 Supported 1.9
TLSv1.1 TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA Supported 1.0
TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA Supported 1.0
TLS_RSA_WITH_AES_128_CBC_SHA Not supported 1.0
TLS_RSA_WITH_AES_256_CBC_SHA Not supported 1.0
TLSv1.0 TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA Supported 1.0
TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA Supported 1.0
TLS_RSA_WITH_AES_128_CBC_SHA Not supported 1.0
TLS_RSA_WITH_AES_256_CBC_SHA Not supported 1.0