

终止支持通知：2026 年 10 月 7 日， AWS 将停止对的支持。 AWS IoT Greengrass Version 1 2026 年 10 月 7 日之后，您将无法再访问这些 AWS IoT Greengrass V1 资源。如需了解更多信息，请访问[迁移自 AWS IoT Greengrass Version 1](https://docs.aws.amazon.com/greengrass/v2/developerguide/migrate-from-v1.html)。

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

# AWS IoT Greengrass 安全概述
<a name="gg-sec"></a>

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

下图显示了 AWS IoT Greengrass 安全模型的组件：

![\[Greengrass 服务架构图显示了 AWS 服务、Greengrass 核心和互联设备以及它们的证书交互。\]](http://docs.aws.amazon.com/zh_cn/greengrass/v1/developerguide/images/gg-security.png)


A - Greengrass 服务角色  
从 AWS IoT Core、 AWS Lambda和其他 AWS 服务访问您的 AWS 资源 AWS IoT Greengrass 时由客户创建的 IAM 角色。有关更多信息，请参阅 [Greengrass 服务角色](service-role.md)。

B - 核心设备证书  
一个 X.509 证书，用于使用和对 Greengrass 内核进行身份验证。 AWS IoT Core AWS IoT Greengrass有关更多信息，请参阅 [设备身份验证和授权 AWS IoT Greengrass](device-auth.md)。

C - 设备证书  
一个 X.509 证书，用于使用和对客户端设备（也称为连接的设备）进行身份验证。 AWS IoT Core AWS IoT Greengrass有关更多信息，请参阅 [设备身份验证和授权 AWS IoT Greengrass](device-auth.md)。

D - 组角色  
从 Greengrass 核心调用 AWS 服务 AWS IoT Greengrass 时由客户创建的 IAM 角色担任。  
您可以使用此角色来指定用户定义的 Lambda 函数和连接器访问 AWS 服务（例如 DynamoDB）所需的访问权限。您还可以使用它 AWS IoT Greengrass 来允许将流管理器流导出到 AWS 服务并写入 CloudWatch 日志。有关更多信息，请参阅 [Greengrass 组角色](group-role.md)。  
AWS IoT Greengrass 不使用中为 Lambda 函数的云版本指定的 Lambda 执行角色。 AWS Lambda 

E - MQTT 服务器证书  
用于 Greengrass 核心设备与 Greengrass 组中的客户端设备之间传输层安全性协议（TLS）相互身份验证的证书。该证书由存储在 AWS Cloud中的组 CA 证书签名。

## 设备连接工作流程
<a name="gg-sec-connection"></a>

本节介绍客户端设备如何连接到 AWS IoT Greengrass 服务和 Greengrass 核心设备。客户端设备是与核心 AWS IoT Core 设备属于同一 Greengrass 组的注册设备。
+ Greengrass 核心设备使用其设备证书、私钥和根 CA 证书 AWS IoT Core 来连接服务。 AWS IoT Greengrass 在核心设备上，[配置文件](gg-core.md#config-json)中的 `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`允许客户端设备发现核心连接信息的权限。有关策略语句的更多信息，请参阅[发现授权](gg-discover-api.md#gg-discover-auth)。

## 配置 AWS IoT Greengrass 安全性
<a name="gg-config-sec"></a>

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

1. 为你的 Greengrass 核心设备创建一 AWS IoT Core 件东西。

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

1. 创建 [AWS IoT 策略](https://docs.aws.amazon.com/iot/latest/developerguide/iot-policies.html)并将其附加到设备证书。该证书和政策允许 Greengrass 核心设备访问和服务。 AWS IoT Core AWS IoT Greengrass 有关更多信息，请参阅 [核心设备的最低 AWS IoT 政策](device-auth.md#gg-config-sec-min-iot-policy)。
**注意**  
<a name="thing-policy-variable-not-supported"></a>不支持在核心设备的[策略中使用事物 AWS IoT 策略变量](https://docs.aws.amazon.com/iot/latest/developerguide/thing-policy-variables.html) (`iot:Connection.Thing.*`)。核心使用相同的设备证书与之建立[多个连接](gg-core.md#connection-client-id)， AWS IoT Core 但是连接中的客户端 ID 可能与核心事物名称不完全匹配。

1. 创建 [Greengrass 服务角色](service-role.md)。此 IAM 角色 AWS IoT Greengrass 授权代表您访问其他 AWS 服务的资源。这 AWS IoT Greengrass 允许执行基本任务，例如检索 AWS Lambda 功能和管理设备影子。

   您可以跨 AWS 区域使用相同的服务角色，但在您使用的每个 AWS 区域 位置都必须与您的 AWS 账户 服务角色相关联 AWS IoT Greengrass。

1. （可选）创建 [Greengrass 组角色](group-role.md)。此 IAM 角色向在 Greengrass 核心上运行的 Lambda 函数和连接器授予调用服务的权限。 AWS 例如，[Kinesis Firehose 连接器](kinesis-firehose-connector.md)需要将记录写入到 Amazon Data Firehose 传输流的权限。

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

1. 为每台连接到 Greengrass 核心的设备创建一个 AWS IoT Core 东西。
**注意**  
你也可以使用现有的 AWS IoT Core 东西和证书。

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

## AWS IoT Greengrass 核心安全主体
<a name="gg-principals"></a>

Greengrass 核心使用以下安全原则 AWS IoT ：客户端、本地 MQTT 服务器和本地密钥管理器。这些委托人的配置存储在 `config.json` 配置文件的 `crypto` 对象中。有关更多信息，请参阅 [AWS IoT Greengrass 核心配置文件](gg-core.md#config-json)。

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

**AWS IoT 客户端**  
 AWS IoT 客户端（物联网客户端）通过互联网管理Greengrass核心和之间的通信。 AWS IoT Core AWS IoT Greengrass 在为此通信建立 TLS 连接时，使用带有公钥和私钥的 X.509 证书进行相互身份验证。有关更多信息，请参阅*《AWS IoT Core 开发人员指南》*中的 [X.509 证书和 AWS IoT Core](https://docs.aws.amazon.com/iot/latest/developerguide/x509-client-certs.html)。  
该 IoT 客户端支持 RSA 和 EC 证书和密钥。该证书和私有密钥是为 `config.json` 中的 `IoTCertificate` 委托人指定的。

**MQTT 服务器**  
本地 MQTT 服务器通过本地网络管理 Greengrass 核心与组中客户端设备之间的通信。 AWS IoT Greengrass 在为此通信建立 TLS 连接时，使用带有公钥和私钥的 X.509 证书进行相互身份验证。  
默认情况下， AWS IoT Greengrass 会为您生成 RSA 私钥。要将核心配置为使用其他私有密钥，您必须为 `config.json` 中的 `MQTTServerCertificate` 委托人提供关键路径。您负责轮换客户提供的密钥。    
**私有密钥支持**    
[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/zh_cn/greengrass/v1/developerguide/gg-sec.html)
私有密钥的配置决定了相关过程。有关 Greengrass 核心作为服务器支持的密码套件的列表，请参阅 [TLS 密码套件支持](#gg-cipher-suites)。    
**如果未指定私有密钥**（默认）  
+ 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 心](secrets.md)。  
默认情况下将使用 IoT 客户端私有密钥，但您可以为 `config.json` 中的 `SecretsManager` 委托人指定其他私有密钥。仅支持 RSA 密钥类型。有关更多信息，请参阅 [指定用于密钥加密的私有密钥](secrets.md#secrets-config-private-key)。  
当前，仅 AWS IoT Greengrass 支持 [PKCS \$11 v1.5](https://tools.ietf.org/html/rfc2313) 填充机制，用于在使用基于硬件的私钥时加密和解密本地机密。如果您按照供应商提供的说明手动生成基于硬件的私钥，请务必选择 PKCS \$11 v1.5。 AWS IoT Greengrass 不支持最佳非对称加密填充 (OAEP)。  
**私有密钥支持**    
<a name="secrets-manager-private-key-support"></a>[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/zh_cn/greengrass/v1/developerguide/gg-sec.html)

## MQTT 消息传递工作流中的托管订阅
<a name="gg-msg-workflow"></a>

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

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

## TLS 密码套件支持
<a name="gg-cipher-suites"></a>

AWS IoT Greengrass 使用 AWS IoT Core 传输安全模型通过 [TLS](https://en.wikipedia.org/wiki/Transport_Layer_Security) [密码](https://en.wikipedia.org/wiki/Cipher_suite)套件对与云的通信进行加密。此外， AWS IoT Greengrass 数据在静态时会被加密（在云中）。有关 AWS IoT Core 传输安全和支持的密码套件的更多信息，请参阅《*AWS IoT Core 开发人员*指南》中的[传输安全](https://docs.aws.amazon.com/iot/latest/developerguide/transport-security.html)。

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

相反 AWS IoT Core，该 AWS IoT Greengrass 内核支持以下用于证书签名算法的*本地网络* TLS 密码套件。当私有密钥存储在文件系统上时，所有这些密码套件都受支持。当核心被配置为使用硬件安全模块 (HSM) 时，子集将受支持。有关更多信息，请参阅[AWS IoT Greengrass 核心安全主体](#gg-principals)和[硬件安全性集成](hardware-security.md)。该表还包括支持所需的 AWS IoT Greengrass 核心软件的最低版本。


|  | 密码 | HSM 支持 | 最低 GGC 版本 | 
| --- |--- |--- |--- |
| TLSv12. | TLS\$1ECDHE\$1RSA\$1WITH\$1AES\$1128\$1CBC\$1SHA | 支持 | 1.0 | 
| --- |--- |--- |--- |
| TLS\$1ECDHE\$1RSA\$1WITH\$1AES\$1256\$1CBC\$1SHA | 支持 | 1.0 | 
| TLS\$1ECDHE\$1RSA\$1WITH\$1AES\$1256\$1GCM\$1 SHA384 | 支持 | 1.0 | 
| TLS\$1RSA\$1WITH\$1AES\$1128\$1CBC\$1SHA | 不支持 | 1.0 | 
| TLS\$1RSA\$1WITH\$1AES\$1128\$1GCM\$1 SHA256 | 不支持 | 1.0 | 
| TLS\$1RSA\$1WITH\$1AES\$1256\$1CBC\$1SHA | 不支持 | 1.0 | 
| TLS\$1RSA\$1WITH\$1AES\$1256\$1GCM\$1 SHA384 | 不支持 | 1.0 | 
| TLS\$1ECDHE\$1ECDSA\$1WITH\$1AES\$1128\$1GCM\$1 SHA256 | 支持 | 1.9 | 
| TLS\$1ECDHE\$1ECDSA\$1WITH\$1AES\$1256\$1GCM\$1 SHA384 | 支持 | 1.9 | 
| TLSv11. | TLS\$1ECDHE\$1RSA\$1WITH\$1AES\$1128\$1CBC\$1SHA | 支持 | 1.0 | 
| --- |--- |--- |--- |
| TLS\$1ECDHE\$1RSA\$1WITH\$1AES\$1256\$1CBC\$1SHA | 支持 | 1.0 | 
| TLS\$1RSA\$1WITH\$1AES\$1128\$1CBC\$1SHA | 不支持 | 1.0 | 
| TLS\$1RSA\$1WITH\$1AES\$1256\$1CBC\$1SHA | 不支持 | 1.0 | 
| TLSv10. | TLS\$1ECDHE\$1RSA\$1WITH\$1AES\$1128\$1CBC\$1SHA | 支持 | 1.0 | 
| --- |--- |--- |--- |
| TLS\$1ECDHE\$1RSA\$1WITH\$1AES\$1256\$1CBC\$1SHA | 支持 | 1.0 | 
| TLS\$1RSA\$1WITH\$1AES\$1128\$1CBC\$1SHA | 不支持 | 1.0 | 
| TLS\$1RSA\$1WITH\$1AES\$1256\$1CBC\$1SHA | 不支持 | 1.0 | 