AWS IoT Greengrass Version 1 2023 年 6 月 30 日进入延长寿命阶段。有关更多信息,请参阅 AWS IoT Greengrass V1 维护策略。在此日期之后,将 AWS IoT Greengrass V1 不会发布提供功能、增强功能、错误修复或安全补丁的更新。在上面运行的设备 AWS IoT Greengrass V1 不会中断,将继续运行并连接到云端。我们强烈建议您迁移到 AWS IoT Greengrass Version 2,这样可以添加重要的新功能并支持其他平台。
本文属于机器翻译版本。若本译文内容与英语原文存在差异,则一律以英文原文为准。
AWS IoT Greengrass 安全概述
AWS IoT Greengrass 使用 X.509 证书、 AWS IoT 策略以及 IAM 策略和角色来保护在本地 Greengrass 环境中的设备上运行的应用程序。
下图显示了 AWS IoT Greengrass 安全模型的组件:
- A - Greengrass 服务角色
-
从 AWS IoT Core、 AWS Lambda和其他 AWS 服务访问您的 AWS 资源 AWS IoT Greengrass 时由客户创建的 IAM 角色。有关更多信息,请参阅 Greengrass 服务角色。
- B - 核心设备证书
-
一个 X.509 证书,用于使用和对 Greengrass 内核进行身份验证。 AWS IoT Core AWS IoT Greengrass有关更多信息,请参阅 AWS IoT Greengrass 的设备身份验证和授权。
- C - 设备证书
-
一个 X.509 证书,用于使用和对客户端设备(也称为连接的设备)进行身份验证。 AWS IoT Core AWS IoT Greengrass有关更多信息,请参阅 AWS IoT Greengrass 的设备身份验证和授权。
- D - 组角色
-
从 Greengrass 核心调用 AWS 服务 AWS IoT Greengrass 时由客户创建的 IAM 角色担任。
您可以使用此角色来指定用户定义的 Lambda 函数和连接器访问 AWS 服务(例如 DynamoDB)所需的访问权限。您还可以使用它 AWS IoT Greengrass 来允许将流管理器流导出到 AWS 服务并写入 CloudWatch 日志。有关更多信息,请参阅 Greengrass 组角色。
注意
AWS IoT Greengrass 不使用中为 Lambda 函数的云版本指定的 Lambda 执行角色。 AWS Lambda
- E - MQTT 服务器证书
-
用于 Greengrass 核心设备与 Greengrass 组中的客户端设备之间传输层安全性协议(TLS)相互身份验证的证书。该证书由存储在 AWS Cloud中的组 CA 证书签名。
设备连接工作流程
本节介绍客户端设备如何连接到 AWS IoT Greengrass 服务和 Greengrass 核心设备。客户端设备是与核心 AWS IoT Core 设备属于同一 Greengrass 组的注册设备。
-
Greengrass 核心设备使用其设备证书、私钥和根 CA 证书 AWS IoT Core 来连接服务。 AWS IoT Greengrass 在核心设备上,配置文件中的
crypto
对象指定这些项目的文件路径。 -
Greengrass 核心设备从 AWS IoT Greengrass 服务下载组成员信息。
-
部署 Greengrass 核心设备时,Device Certificate Manager (DCM) 会处理 Greengrass 核心设备的本地服务器证书管理。
-
客户端设备使用其设备证书、私钥和 AWS IoT Core 根 CA 证书连接到 AWS IoT Greengrass 服务。连接后,客户端设备会使用 Greengrass 发现服务查找其 Greengrass 核心设备的 IP 地址。客户端设备还会下载组 CA 证书,此证书用于与 Greengrass 核心设备进行 TLS 相互身份验证。
-
客户端设备会尝试连接到 Greengrass 核心设备,并传递其设备证书和客户端 ID。如果客户端 ID 与客户端设备的事物名称匹配并且证书有效(属于 Greengrass 组),将进行连接。否则,将终止连接。
客户端设备的 AWS IoT 策略必须授予greengrass:Discover
允许客户端设备发现核心连接信息的权限。有关策略语句的更多信息,请参阅发现授权。
配置 AWS IoT Greengrass 安全性
要配置您的 Greengrass 应用程序的安全性,请执行以下操作:
-
为你的 Greengrass 核心设备创建一个 AWS IoT Core 东西。
-
为您的 Greengrass 核心设备生成密钥对和设备证书。
-
创建 AWS IoT 策略并将其附加到设备证书。该证书和政策允许 Greengrass 核心设备访问和服务。 AWS IoT Core AWS IoT Greengrass 有关更多信息,请参阅 核心设备的最低 AWS IoT 策略。
注意
不支持在核心设备的策略中使用事物 AWS IoT 策略变量 (
iot:Connection.Thing.
)。核心使用相同的设备证书与之建立多个连接, AWS IoT Core 但是连接中的客户端 ID 可能与核心事物名称不完全匹配。*
-
创建 Greengrass 服务角色。此 IAM 角色 AWS IoT Greengrass 授权代表您访问其他 AWS 服务的资源。这 AWS IoT Greengrass 允许执行基本任务,例如检索 AWS Lambda 功能和管理设备影子。
您可以跨 AWS 区域使用相同的服务角色,但在您使用的每个 AWS 区域 位置都必须与您的 AWS 账户 服务角色相关联 AWS IoT Greengrass。
-
(可选)创建 Greengrass 组角色。此 IAM 角色向在 Greengrass 核心上运行的 Lambda 函数和连接器授予调用服务的权限。 AWS 例如,Kinesis Firehose 连接器需要权限才能将记录写入亚马逊数据 Firehos e 传输流。
您只能将一个角色附加到 Greengrass 组。
-
为每台连接到 Greengrass 核心的设备创建一个 AWS IoT Core 东西。
注意
你也可以使用现有的 AWS IoT Core 东西和证书。
-
为连接到 Greengrass 核心的每台设备创建设备证书、密钥对和 AWS IoT 策略。
AWS IoT Greengrass 核心安全主体
Greengrass 核心使用以下安全原则 AWS IoT :客户端、本地 MQTT 服务器和本地密钥管理器。这些委托人的配置存储在 config.json
配置文件的 crypto
对象中。有关更多信息,请参阅 AWS IoT Greengrass 核心配置文件。
此配置包含用于身份验证和加密的主要组件使用的私有密钥的路径。 AWS IoT Greengrass 支持两种模式的私有密钥存储:基于硬件或基于文件系统(默认)。有关在硬件安全模块上存储密钥的更多信息,请参阅硬件安全性集成。
- AWS IoT 客户端
-
AWS IoT 客户端(物联网客户端)通过互联网管理Greengrass核心和之间的通信。 AWS IoT Core AWS IoT Greengrass 在为此通信建立 TLS 连接时,使用带有公钥和私钥的 X.509 证书进行相互身份验证。有关更多信息,请参阅《AWS IoT Core 开发人员指南》中的 X.509 证书和 AWS IoT Core。
该 IoT 客户端支持 RSA 和 EC 证书和密钥。该证书和私有密钥是为
config.json
中的IoTCertificate
委托人指定的。 - MQTT 服务器
-
本地 MQTT 服务器通过本地网络管理 Greengrass 核心与组中客户端设备之间的通信。 AWS IoT Greengrass 在为此通信建立 TLS 连接时,使用带有公钥和私钥的 X.509 证书进行相互身份验证。
默认情况下, AWS IoT Greengrass 会为您生成 RSA 私钥。要将核心配置为使用其他私有密钥,您必须为
config.json
中的MQTTServerCertificate
委托人提供关键路径。您负责轮换客户提供的密钥。私有密钥支持 RSA 密钥 EC 密钥 密钥类型 支持 支持 关键参数 最小长度为 2048 位 NIST P-256 或 NIST P-384 曲线 磁盘格式 PKCS#1、PKCS#8 SECG1、PKCS#8 最低 GGC 版本 使用默认 RSA 密钥:1.0
指定 RSA 密钥:1.7
指定 EC 密钥:1.9
私有密钥的配置决定了相关过程。有关 Greengrass 核心作为服务器支持的密码套件的列表,请参阅 TLS 密码套件支持。
- 如果未指定私有密钥(默认)
-
AWS 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
-
本地密钥管理器可以安全地管理您在中创建的密钥的本地副本 AWS Secrets Manager。它使用私有密钥来保护用于对密钥进行加密的数据密钥。有关更多信息,请参阅 将密钥部署到 AWS IoT Greengrass 核心。
默认情况下将使用 IoT 客户端私有密钥,但您可以为
config.json
中的SecretsManager
委托人指定其他私有密钥。仅支持 RSA 密钥类型。有关更多信息,请参阅 指定用于密钥加密的私有密钥。注意
当前,仅 AWS IoT Greengrass 支持 PKCS #1 v1.5
填充机制,用于在使用基于硬件的私钥时加密和解密本地机密。如果您按照供应商提供的说明手动生成基于硬件的私钥,请务必选择 PKCS #1 v1.5。 AWS IoT Greengrass 不支持最佳非对称加密填充 (OAEP)。 私有密钥支持 RSA 密钥 EC 密钥 密钥类型 支持 不支持 关键参数 最小长度为 2048 位 不适用 磁盘格式 PKCS#1、PKCS#8 不适用 最低 GGC 版本 1.7 不适用
MQTT 消息传递工作流中的托管订阅
AWS IoT Greengrass 使用订阅表来定义如何在 Greengrass 组中的客户端设备、函数和连接器之间以及 AWS IoT Core 如何与本地影子服务交换 MQTT 消息。每次订阅都指定了发送或接收消息的来源、目标和 MQTT 主题(或主题)。 AWS IoT Greengrass 仅当定义了相应的订阅时,才允许将消息从源发送到目标。
订阅仅定义从源到目标的单向消息流。要支持双向消息交换,您必须创建两个订阅,每个订阅针对一个方向。
TLS 密码套件支持
AWS IoT Greengrass 使用 AWS IoT Core 传输安全模型通过 TLS
用于本地网络通信的受支持密码套件
相反 AWS IoT Core,该 AWS IoT Greengrass 内核支持以下用于证书签名算法的本地网络 TLS 密码套件。当私有密钥存储在文件系统上时,所有这些密码套件都受支持。当核心被配置为使用硬件安全模块 (HSM) 时,子集将受支持。有关更多信息,请参阅 AWS IoT Greengrass 核心安全主体 和 硬件安全性集成。该表还包括支持所需的 AWS IoT Greengrass 核心软件的最低版本。
密码 | HSM 支持 | 最低 GGC 版本 | |
---|---|---|---|
TLSv1.2 | TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA | 支持 | 1.0 |
TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA | 支持 | 1.0 | |
TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384 | 支持 | 1.0 | |
TLS_RSA_WITH_AES_128_CBC_SHA | 不支持 | 1.0 | |
TLS_RSA_WITH_AES_128_GCM_SHA256 | 不支持 | 1.0 | |
TLS_RSA_WITH_AES_256_CBC_SHA | 不支持 | 1.0 | |
TLS_RSA_WITH_AES_256_GCM_SHA384 | 不支持 | 1.0 | |
TLS_ECDHE_ECDSA_WITH_AES_128_GCM_SHA256 | 支持 | 1.9 | |
TLS_ECDHE_ECDSA_WITH_AES_256_GCM_SHA384 | 支持 | 1.9 | |
TLSv1.1 | TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA | 支持 | 1.0 |
TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA | 支持 | 1.0 | |
TLS_RSA_WITH_AES_128_CBC_SHA | 不支持 | 1.0 | |
TLS_RSA_WITH_AES_256_CBC_SHA | 不支持 | 1.0 | |
TLSv1.0 | TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA | 支持 | 1.0 |
TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA | 支持 | 1.0 | |
TLS_RSA_WITH_AES_128_CBC_SHA | 不支持 | 1.0 | |
TLS_RSA_WITH_AES_256_CBC_SHA | 不支持 | 1.0 |