

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

# AWS IoT Greengrass V2 中的代码完整性
<a name="code-integrity"></a>

AWS IoT Greengrass 将软件组件从 AWS 云 部署到运行 AWS IoT Greengrass Core 软件的设备。这些软件组件包括 [AWS 提供的组件](public-components.md)和您上传到您的 AWS 账户 的[自定义组件](create-components.md)。每个组件都包含一个配方。该配方定义组件的元数据和任意数量的构件，即组件二进制文件，例如编译后的代码和静态资源。组件构件存储在 Amazon S3 中。

在开发和部署 Greengrass 组件时，您需要遵循适用于您的 AWS 账户 和设备上的组件构件的以下基本步骤：

1. 创建项目并将其上传到 S3 桶。

1. 根据 AWS IoT Greengrass 服务中的配方和构件创建组件，由其计算每个构件的[加密哈希值](https://en.wikipedia.org/wiki/Cryptographic_hash_function)。

1. 将组件部署到 Greengrass 核心设备，由其下载并验证每个构件的完整性。

AWS 负责在您将构件上传到 S3 桶后（包括将组件部署到 Greengrass 核心设备时）保持构件的完整性。您负责在将软件构件上传到 S3 桶之前保护构件。您还负责保护对您 AWS 账户 中资源的访问权限，包括您上传组件构件的 S3 桶。

**注意**  
Amazon S3 提供了一项名为 S3 对象锁定的功能，您可以使用该功能来防止您 AWS 账户 的 S3 桶中的组件构件发生更改。您可以使用 S3 对象锁定来防止删除或覆盖组件构件。有关更多信息，请参阅 *Amazon Simple Storage Service 用户指南*中的[使用 S3 对象锁定](https://docs.aws.amazon.com/AmazonS3/latest/userguide/object-lock.html)。

在 AWS 发布公有组件以及在您上传自定义组件时，AWS IoT Greengrass 会计算每个组件构件的加密摘要。AWS IoT Greengrass 会更新组件配方以包括每个构件的摘要和用于计算该摘要的哈希算法。此摘要可以保证构件的完整性，因为如果构件在 AWS 云 中或下载期间发生更改，其文件摘要将与 AWS IoT Greengrass 存储在组件配方中的摘要不匹配。有关更多信息，请参阅[组件配方参考中的构件](component-recipe-reference.md#manifest-artifacts-definition)。

当您将组件部署到核心设备时，AWS IoT Greengrass Core 软件会下载组件配方和配方定义的每个组件构件。AWS IoT Greengrass Core 软件计算每个下载的构件文件的摘要，并将其与配方中该构件的摘要进行比较。如果摘要不匹配，则部署将失败，AWS IoT Greengrass Core 软件会从设备的文件系统中删除下载的构件。有关如何保护核心设备与 AWS IoT Greengrass 之间的连接的更多信息，请参阅 [传输中加密](encryption-in-transit.md)。

您负责保护核心设备文件系统中的组件构件文件。AWS IoT Greengrass Core 软件会将构件保存到 Greengrass 根文件夹中的 `packages` 文件夹。您可以使用 AWS IoT Device Defender 分析、审计和监控核心设备。有关更多信息，请参阅 [中的配置和漏洞分析 AWS IoT Greengrass](vulnerability-analysis-and-management.md)。