

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

# 安装具有 AWS IoT 队列配置功能的 C AWS IoT Greengrass ore 软件
<a name="fleet-provisioning"></a>

此功能适用于 [Greengrass Nucleus 组件](greengrass-nucleus-component.md)的 v2.4.0 及更高版本。

借助 AWS IoT 队列配置，您可以配置 AWS IoT 为在设备首次连接时生成 X.509 设备证书和私钥并将其安全地交付 AWS IoT 给设备。 AWS IoT 提供由 Amazon 根证书颁发机构 (CA) 签署的客户证书。您还可以进行配置， AWS IoT 为使用队列配置配置的 Greengrass 核心设备指定事物组、事物类型和权限。您可以定义*配置模板*来定义如何配置 AWS IoT 每台设备。预置模板指定在预置时要为设备创建的事物、策略和证书资源。有关更多信息，请参阅《AWS IoT Core 开发人员指南》中的[预置模板](https://docs.aws.amazon.com/iot/latest/developerguide/provision-template.html)。**

AWS IoT Greengrass 提供了一个 AWS IoT 队列配置插件，您可以使用该插件使用 AWS IoT 队列配置创建的 AWS 资源来安装 AWS IoT Greengrass 核心软件。实例集预置插件使用*通过声明进行预置*。设备使用预置声明证书和私钥来获取可用于常规操作的唯一 X.509 设备证书和私钥。在制造过程中，您可以将声明证书和私钥嵌入每台设备，这样您的客户便可以在每台设备联机后激活设备。您可以为多台设备使用相同的声明证书和私钥。有关更多信息，请参阅《AWS IoT Core 开发人员指南》中的[通过声明进行预置](https://docs.aws.amazon.com/iot/latest/developerguide/provision-wo-cert.html#claim-based)。**

**注意**  
实例集预置插件目前不支持在硬件安全模块（HSM）中存储私钥和证书文件。要使用 HSM，[请使用手动配置来安装 AWS IoT Greengrass Core 软件](manual-installation.md)。

要安装具有 AWS IoT 队列配置功能的 AWS IoT Greengrass Core 软件，您必须在中设置用于配置 Gre AWS IoT engrass 核心设备的资源。 AWS 账户 这些资源包括预置模板、声明证书和[令牌交换 IAM 角色](device-service-role.md)。创建这些资源后，您可以重复使用资源来预置实例集中的多个核心设备。有关更多信息，请参阅 [为 Greengrass 核心 AWS IoT 设备设置队列配置](fleet-provisioning-setup.md)。

**重要**  <a name="install-greengrass-core-requirements-note"></a>
在下载 AWS IoT Greengrass 酷睿软件之前，请检查您的核心设备是否满足安装和运行 AWS IoT Greengrass 酷睿软件 v2.0 的[要求](greengrass-nucleus-component.md#greengrass-v2-requirements)。

**Topics**
+ [先决条件](#fleet-provisioning-prerequisites)
+ [检索 AWS IoT 端点](#retrieve-iot-endpoints)
+ [将证书下载到设备](#download-claim-certificates)
+ [设置设备环境](#set-up-device-environment)
+ [下载 AWS IoT Greengrass 核心软件](#download-greengrass-core-v2)
+ [下载 AWS IoT 舰队配置插件](#download-fleet-provisioning-plugin)
+ [安装 AWS IoT Greengrass 核心软件](#run-greengrass-core-v2-installer-fleet)
+ [为 Greengrass 核心 AWS IoT 设备设置队列配置](fleet-provisioning-setup.md)
+ [配置 AWS IoT 舰队配置插件](fleet-provisioning-configuration.md)
+ [AWS IoT 实例集预置插件更改日志](fleet-provisioning-changelog.md)

## 先决条件
<a name="fleet-provisioning-prerequisites"></a>

要安装具有 AWS IoT 队列配置功能的 AWS IoT Greengrass Core 软件，必须先[为 Greengrass 核心 AWS IoT 设备设置队列配置](fleet-provisioning-setup.md)。完成这些步骤后，您可以使用队列配置在任意数量的设备上安装 AWS IoT Greengrass 核心软件。

## 检索 AWS IoT 端点
<a name="retrieve-iot-endpoints"></a>

获取您的终 AWS IoT 端节点 AWS 账户，然后将其保存以备后用。您的设备使用这些端点来连接 AWS IoT。执行以下操作：

1. 获取您的 AWS IoT 数据端点 AWS 账户。

   ```
   aws iot describe-endpoint --endpoint-type iot:Data-ATS
   ```

   如果请求成功，响应类似如下示例。

   ```
   {
     "endpointAddress": "device-data-prefix-ats.iot.us-west-2.amazonaws.com"
   }
   ```

1. 获取您的 AWS IoT 凭证终端节点 AWS 账户。

   ```
   aws iot describe-endpoint --endpoint-type iot:CredentialProvider
   ```

   如果请求成功，响应类似如下示例。

   ```
   {
     "endpointAddress": "device-credentials-prefix.credentials.iot.us-west-2.amazonaws.com"
   }
   ```

## 将证书下载到设备
<a name="download-claim-certificates"></a>

设备使用索赔证书和私钥来验证其 AWS 调配资源和获取 X.509 设备证书的请求。您可以在制造过程中将声明证书和私钥嵌入设备中，也可以在安装过程中将证书和密钥复制到设备。在本节中，您需将声明证书和私有密钥复制到设备。您还需将 Amazon 根证书颁发机构（CA）证书下载到设备。

**重要**  <a name="installation-fleet-provisioning-secure-claim-private-keys"></a>
预置声明私钥应始终得到保护，包括在 Greengrass 核心设备上时。我们建议您使用 Amazon CloudWatch 指标和日志来监控是否存在滥用迹象，例如未经授权使用索赔证书来配置设备。如果您检测到滥用，请禁用预置声明证书，以使其不能用于设备预置。有关更多信息，请参阅 *AWS IoT Core 开发人员指南* 中的 [监控 AWS IoT](https://docs.aws.amazon.com/iot/latest/developerguide/monitoring_overview.html)。  
为了帮助您更好地管理自己在您的设备中注册的设备数量和设备 AWS 账户，您可以在创建队列配置模板时指定预配置挂钩。预配置挂钩是一种验证设备在注册期间提供的模板参数的 AWS Lambda 功能。例如，您可以创建一个预置前钩子，根据数据库检查设备 ID，以验证设备是否有权进行预置。有关更多信息，请参阅《AWS IoT Core 开发人员指南》中的[预置前钩子](https://docs.aws.amazon.com/iot/latest/developerguide/pre-provisioning-hook.html)。**

**将声明证书下载到设备**

1. 将声明证书和私钥复制到设备。如果在开发计算机和设备上启用了 SSH 和 SCP，则可以在开发计算机上使用 `scp` 命令传输声明证书和私钥。以下示例命令会将开发计算机上名为 `claim-certs` 的文件夹中的这些文件传输到设备。*device-ip-address*替换为设备的 IP 地址。

   ```
   scp -r claim-certs/ device-ip-address:~
   ```

1. <a name="installation-create-greengrass-root-folder"></a>在设备上创建 Greengrass 根文件夹。稍后，您将将 AWS IoT Greengrass Core 软件安装到此文件夹。
**注意**  
Windows 的路径长度限制为 260 个字符。如果您使用的是 Windows，请使用 `C:\greengrass\v2` 或 `D:\greengrass\v2` 等根文件夹，将 Greengrass 组件的路径保持在 260 个字符的限制以下。

------
#### [ Linux or Unix ]
   + 将 `/greengrass/v2` 替换为要使用的文件夹。

   ```
   sudo mkdir -p /greengrass/v2
   ```

------
#### [ Windows Command Prompt ]
   + 将 *C:\$1greengrass\$1v2* 替换为要使用的文件夹。

   ```
   mkdir C:\greengrass\v2
   ```

------
#### [ PowerShell ]
   + 将 *C:\$1greengrass\$1v2* 替换为要使用的文件夹。

   ```
   mkdir C:\greengrass\v2
   ```

------

1. <a name="installation-set-greengrass-root-folder-permissions"></a>（仅限 Linux）设置 Greengrass 根文件夹的父文件夹的权限。
   + */greengrass*替换为根文件夹的父文件夹。

   ```
   sudo chmod 755 /greengrass
   ```

1. 将声明证书移动到 Greengrass 根文件夹。
   + 用 Greengrass 根文件夹替换`/greengrass/v2`或*C:\$1greengrass\$1v2*。

------
#### [ Linux or Unix ]

   ```
   sudo mv ~/claim-certs /greengrass/v2
   ```

------
#### [ Windows Command Prompt (CMD) ]

   ```
   move %USERPROFILE%\claim-certs C:\greengrass\v2
   ```

------
#### [ PowerShell ]

   ```
   mv -Path ~\claim-certs -Destination C:\greengrass\v2
   ```

------

1. <a name="installation-download-root-ca-certificate"></a>下载 Amazon 根证书颁发机构 (CA) 证书。 AWS IoT 默认情况下，证书与亚马逊的根 CA 证书相关联。

------
#### [ Linux or Unix ]

   ```
   sudo curl -o /greengrass/v2/AmazonRootCA1.pem https://www.amazontrust.com/repository/AmazonRootCA1.pem
   ```

------
#### [ Windows Command Prompt (CMD) ]

   ```
   curl -o C:\greengrass\v2\\AmazonRootCA1.pem https://www.amazontrust.com/repository/AmazonRootCA1.pem
   ```

------
#### [ PowerShell ]

   ```
   iwr -Uri https://www.amazontrust.com/repository/AmazonRootCA1.pem -OutFile C:\greengrass\v2\\AmazonRootCA1.pem
   ```

------

## 设置设备环境
<a name="set-up-device-environment"></a>

按照本节中的步骤，将 Linux 或 Windows 设备设置为您的 AWS IoT Greengrass 核心设备。

### 设置 Linux 设备
<a name="set-up-linux-device-environment"></a><a name="set-up-linux-device-environment-procedure"></a>

**设置 Linux 设备用于 AWS IoT Greengrass V2**

1. 安装 Java 运行时， AWS IoT Greengrass 核心软件需要运行该运行时。我们建议您使用 [Amazon Corretto](https://aws.amazon.com/corretto/) 或 [OpenJDK](https://openjdk.java.net/) 长期支持版本。需要版本 8 或更高版本。以下命令向您展示如何在您的设备上安装 OpenJDK。
   + 对于基于 Debian 或基于 Ubuntua 的发行版：

     ```
     sudo apt install default-jdk
     ```
   + 对于基于 Red Hat 的发行版：

     ```
     sudo yum install java-11-openjdk-devel
     ```
   + 对于 Amazon Linux 2：

     ```
     sudo amazon-linux-extras install java-openjdk11
     ```
   + 对于 Amazon Linux 2023：

     ```
     sudo dnf install java-11-amazon-corretto -y
     ```

   安装完成后，运行以下命令以验证 Java 是否在您的 Linux 设备上运行。

   ```
   java -version
   ```

   此命令会打印设备上运行的 Java 版本。例如，在基于 Debian 的发行版上，输出可能与以下示例类似。

   ```
   openjdk version "11.0.9.1" 2020-11-04
   OpenJDK Runtime Environment (build 11.0.9.1+1-post-Debian-1deb10u2)
   OpenJDK 64-Bit Server VM (build 11.0.9.1+1-post-Debian-1deb10u2, mixed mode)
   ```

1. （可选）创建在设备上运行组件的默认系统用户和组。您也可以选择让 AWS IoT Greengrass 核心软件安装程序在安装过程中使用安装程序参数创建此用户和组。`--component-default-user`有关更多信息，请参阅 [安装程序参数](configure-installer.md)。

   ```
   sudo useradd --system --create-home ggc_user
   sudo groupadd --system ggc_group
   ```

1. 验证运行 AWS IoT Greengrass Core 软件的用户（通常`root`）是否有权`sudo`与任何用户和任何组一起运行。

   1. 运行以下命令以打开 `/etc/sudoers` 文件。

      ```
      sudo visudo
      ```

   1. 验证用户的权限是否如以下示例所示。

      ```
      root    ALL=(ALL:ALL) ALL
      ```

1. （可选）要[运行容器化 Lambda 函数](run-lambda-functions.md)，必须启用 [cgroups](https://en.wikipedia.org/wiki/Cgroups) v1，且必须启用并装载*内存*和*设备* cgroups。如果您不打算运行容器化 Lambda 函数，则可跳过此步骤。

   要启用这些 cgroups 选项，请使用以下 Linux 内核参数启动设备。

   ```
   cgroup_enable=memory cgroup_memory=1 systemd.unified_cgroup_hierarchy=0
   ```

   有关查看和设置设备内核参数的信息，请参阅适用于您操作系统和启动加载程序的文档。按照说明永久设置内核参数。

1. 按照 [设备要求](greengrass-nucleus-component.md#greengrass-v2-requirements) 中的要求列表所示，在您的设备上安装所有其他必需的依赖关系。

### 设置 Windows 设备
<a name="set-up-windows-device-environment"></a>

**注意**  
此功能适用于 [Greengrass Nucleus 组件](greengrass-nucleus-component.md) v2.5.0 及更高版本。<a name="set-up-windows-device-environment-procedure"></a>

**要将 Windows 设备设置为 AWS IoT Greengrass V2**

1. 安装 Java 运行时， AWS IoT Greengrass 核心软件需要运行该运行时。我们建议您使用 [Amazon Corretto](https://aws.amazon.com/corretto/) 或 [OpenJDK](https://openjdk.java.net/) 长期支持版本。需要版本 8 或更高版本。

1. 检查在 [PATH](https://en.wikipedia.org/wiki/PATH_(variable)) 系统变量上是否有 Java 可用，如果没有，请进行添加。该 LocalSystem 帐户运行 AWS IoT Greengrass Core 软件，因此您必须将 Java 添加到 PATH 系统变量中，而不是用户的 PATH 用户变量。执行以下操作：

   1. 按下 Windows 键打开开始菜单。

   1. 键入 **environment variables** 以从开始菜单中搜索系统选项。

   1. 在开始菜单搜索结果中，选择**编辑系统环境变量**，以打开**系统属性**窗口。

   1. 选择**环境变量...**，打开**环境变量**窗口。

   1. 在**系统变量**下，选择**路径**，然后选择**编辑**。在**编辑环境变量**窗口中，您可以分行查看每个路径。

   1. 检查 Java 安装的 `bin` 文件夹的路径是否存在。路径可能与以下示例类似。

      ```
      C:\\Program Files\\Amazon Corretto\\jdk11.0.13_8\\bin
      ```

   1. 如果**路径**中缺少 Java 安装的 `bin` 文件夹，请选择**新建**，添加该文件夹，然后选择**确定**。

1. <a name="set-up-windows-device-environment-open-cmd"></a>以管理员身份打开 Windows 命令提示符 (`cmd.exe`)。

1. <a name="set-up-windows-device-environment-create"></a>在 Windows 设备上的 LocalSystem 帐户中创建默认用户。*password*替换为安全密码。

   ```
   net user /add ggc_user password
   ```
**提示**  <a name="windows-password-expiration-tip"></a>
根据您的 Windows 配置，用户密码可能会设置为在将来某个日期过期。为确保您的 Greengrass 应用程序继续运行，请跟踪密码过期时间，并在密码过期之前对其进行更新。您还可以将用户的密码设置为永不过期。  
要检查用户及其密码的过期时间，请运行以下命令。  

     ```
     net user ggc_user | findstr /C:expires
     ```
要将用户密码设置为永不过期，请运行以下命令。  

     ```
     wmic UserAccount where "Name='ggc_user'" set PasswordExpires=False
     ```
如果你使用的是[已弃用该`wmic`命令的](https://learn.microsoft.com/en-us/windows/win32/wmisdk/wmic) Windows 10 或更高版本，请运行以下 PowerShell 命令。  

     ```
     Get-CimInstance -Query "SELECT * from Win32_UserAccount WHERE name = 'ggc_user'" | Set-CimInstance -Property @{PasswordExpires="False"}
     ```

1. <a name="set-up-windows-device-psexec"></a>从微软下载该[PsExec实用程序](https://docs.microsoft.com/en-us/sysinternals/downloads/psexec)并将其安装到设备上。

1. <a name="set-up-windows-device-credentials"></a>使用该 PsExec 实用程序将默认用户的用户名和密码存储在 LocalSystem 账户的凭据管理器实例中。*password*替换为您之前设置的用户密码。

   ```
   psexec -s cmd /c cmdkey /generic:ggc_user /user:ggc_user /pass:password
   ```

   如果系统打开 **PsExec License Agreement**，请选择 **Accept** 以同意许可并运行命令。
**注意**  
在 Windows 设备上，该 LocalSystem 帐户运行 Greengrass 核心，您必须使用 PsExec 该实用程序在帐户中存储默认用户信息。 LocalSystem 使用凭据管理器应用程序将此信息存储在当前登录用户的 Windows 帐户中，而不是 LocalSystem 帐户中。

## 下载 AWS IoT Greengrass 核心软件
<a name="download-greengrass-core-v2"></a>

您可以从以下位置下载最新版本的 AWS IoT Greengrass Core 软件：
+ [https://d2s8p88vqu9w66.cloudfront。 net/releases/greengrass](https://d2s8p88vqu9w66.cloudfront.net/releases/greengrass-nucleus-latest.zip)-nucleus-latest.zip

**注意**  
您可以从以下位置下载特定版本的 AWS IoT Greengrass Core 软件。*version*替换为要下载的版本。  

```
https://d2s8p88vqu9w66.cloudfront.net/releases/greengrass-version.zip
```

**下载 AWS IoT Greengrass 核心软件**

1. <a name="installation-download-ggc-software-step"></a>在您的核心设备上，将 AWS IoT Greengrass Core 软件下载到名为的文件中`greengrass-nucleus-latest.zip`。

------
#### [ Linux or Unix ]

   ```
   curl -s https://d2s8p88vqu9w66.cloudfront.net/releases/greengrass-nucleus-latest.zip > greengrass-nucleus-latest.zip
   ```

------
#### [ Windows Command Prompt (CMD) ]

   ```
   curl -s https://d2s8p88vqu9w66.cloudfront.net/releases/greengrass-nucleus-latest.zip > greengrass-nucleus-latest.zip
   ```

------
#### [ PowerShell ]

   ```
   iwr -Uri https://d2s8p88vqu9w66.cloudfront.net/releases/greengrass-nucleus-latest.zip -OutFile greengrass-nucleus-latest.zip
   ```

------

   <a name="core-software-license"></a>下载此软件即表示您同意[Greengrass Core 软件许可协议](https://greengrass-release-license.s3.us-west-2.amazonaws.com/greengrass-license-v1.pdf)。

1. <a name="verify-gg-nucleus-signature"></a>（可选）验证 Greengrass Nucleus 软件签名
**注意**  
此功能适用于 Greengrass Nucleus 版本 2.9.5 及更高版本。

   1. 使用以下命令验证您 Greengrass Nucleus 构件的签名：

------
#### [ Linux or Unix ]

      ```
      jarsigner -verify -certs -verbose greengrass-nucleus-latest.zip
      ```

------
#### [ Windows Command Prompt (CMD) ]

      根据您安装的 JDK 版本，文件名可能有所不同。将 *`jdk17.0.6_10`* 替换为您安装的 JDK 版本。

      ```
      "C:\\Program Files\\Amazon Corretto\\jdk17.0.6_10\\bin\\jarsigner.exe" -verify -certs -verbose greengrass-nucleus-latest.zip
      ```

------
#### [ PowerShell ]

      根据您安装的 JDK 版本，文件名可能有所不同。将 *`jdk17.0.6_10`* 替换为您安装的 JDK 版本。

      ```
      'C:\\Program Files\\Amazon Corretto\\jdk17.0.6_10\\bin\\jarsigner.exe' -verify -certs -verbose greengrass-nucleus-latest.zip
      ```

------

   1. `jarsigner` 调用会生成输出，指示验证结果。

      1. 如果 Greengrass Nucleus ZIP 文件已签署，则输出将包含以下语句：

         ```
         jar verified.
         ```

      1. 如果 Greengrass Nucleus ZIP 文件未签署，则输出将包含以下语句：

         ```
         jar is unsigned.
         ```

   1. 如果您提供了 Jarsigner `-certs` 选项以及 `-verify` 和 `-verbose` 选项，则输出还将包含详细的签名者证书信息。

1. <a name="installation-unzip-ggc-software-step"></a>将 AWS IoT Greengrass Core 软件解压缩到设备上的某个文件夹。*GreengrassInstaller*替换为要使用的文件夹。

------
#### [ Linux or Unix ]

   ```
   unzip greengrass-nucleus-latest.zip -d GreengrassInstaller && rm greengrass-nucleus-latest.zip
   ```

------
#### [ Windows Command Prompt (CMD) ]

   ```
   mkdir GreengrassInstaller && tar -xf greengrass-nucleus-latest.zip -C GreengrassInstaller && del greengrass-nucleus-latest.zip
   ```

------
#### [ PowerShell ]

   ```
   Expand-Archive -Path greengrass-nucleus-latest.zip -DestinationPath .\\GreengrassInstaller
   rm greengrass-nucleus-latest.zip
   ```

------

1. （可选）运行以下命令以查看 AWS IoT Greengrass Core 软件的版本。

   ```
   java -jar ./GreengrassInstaller/lib/Greengrass.jar --version
   ```

**重要**  <a name="installer-folder-2.4.0-warning"></a>
如果您安装了 v2.4.0 之前的 Greengrass nucleus 版本，则在安装 Core 软件后请勿删除此文件夹。 AWS IoT Greengrass C AWS IoT Greengrass ore 软件使用此文件夹中的文件运行。  
如果您下载的是最新版本的软件，则需要安装 v2.4.0 或更高版本，并且可以在安装 C AWS IoT Greengrass ore 软件后删除此文件夹。

## 下载 AWS IoT 舰队配置插件
<a name="download-fleet-provisioning-plugin"></a>

您可以从以下位置下载最新版本的 AWS IoT 舰队配置插件：
+ [https://d2s8p88vqu9w66.cloudfront。 net/releases/aws-greengrass-FleetProvisioningByClaim/fleetprovisioningbyclaim](https://d2s8p88vqu9w66.cloudfront.net/releases/aws-greengrass-FleetProvisioningByClaim/fleetprovisioningbyclaim-latest.jar)-latest.jar

**注意**  
您可以从以下位置下载特定版本的 AWS IoT 舰队配置插件。*version*替换为要下载的版本。有关各版本实例集预置插件的更多信息，请参阅 [AWS IoT 实例集预置插件更改日志](fleet-provisioning-changelog.md)。  

```
https://d2s8p88vqu9w66.cloudfront.net/releases/aws-greengrass-FleetProvisioningByClaim/fleetprovisioningbyclaim-version.jar
```

实例集预置插件是开源插件。要查看其源代码，请参阅上的[AWS IoT 舰队配置插件](https://github.com/aws-greengrass/aws-greengrass-fleet-provisioning-by-claim) GitHub。

**下载 AWS IoT 舰队配置插件**
+ 在您的设备上，将 AWS IoT 队列配置插件下载到名为的文件中`aws.greengrass.FleetProvisioningByClaim.jar`。*GreengrassInstaller*替换为要使用的文件夹。

------
#### [ Linux or Unix ]

  ```
  curl -s https://d2s8p88vqu9w66.cloudfront.net/releases/aws-greengrass-FleetProvisioningByClaim/fleetprovisioningbyclaim-latest.jar > GreengrassInstaller/aws.greengrass.FleetProvisioningByClaim.jar
  ```

------
#### [ Windows Command Prompt (CMD) ]

  ```
  curl -s https://d2s8p88vqu9w66.cloudfront.net/releases/aws-greengrass-FleetProvisioningByClaim/fleetprovisioningbyclaim-latest.jar > GreengrassInstaller/aws.greengrass.FleetProvisioningByClaim.jar
  ```

------
#### [ PowerShell ]

  ```
  iwr -Uri https://d2s8p88vqu9w66.cloudfront.net/releases/aws-greengrass-FleetProvisioningByClaim/fleetprovisioningbyclaim-latest.jar -OutFile GreengrassInstaller/aws.greengrass.FleetProvisioningByClaim.jar
  ```

------

  <a name="core-software-license"></a>下载此软件即表示您同意[Greengrass Core 软件许可协议](https://greengrass-release-license.s3.us-west-2.amazonaws.com/greengrass-license-v1.pdf)。

## 安装 AWS IoT Greengrass 核心软件
<a name="run-greengrass-core-v2-installer-fleet"></a>

使用可指定以下操作的参数运行安装程序：
+ 从部分配置文件进行安装，该文件指定使用队列配置插件来配置 AWS 资源。 AWS IoT Greengrass Core 软件使用配置文件来指定设备上每个 Greengrass 组件的配置。安装程序会根据您提供的部分配置文件，以及实例集预置插件创建的 AWS 资源来创建完整的配置文件。
+ <a name="install-argument-component-default-user"></a>指定使用 `ggc_user` 系统用户在核心设备上运行软件组件。在 Linux 设备上，此命令还指定使用 `ggc_group` 系统组，安装程序会为您创建系统用户和组。
+ <a name="install-argument-system-service"></a>将 AWS IoT Greengrass Core 软件设置为启动时运行的系统服务。在 Linux 设备上，这需要 [Systemd](https://en.wikipedia.org/wiki/Systemd) 初始化系统。
**重要**  <a name="windows-system-service-requirement-important-note"></a>
在 Windows 核心设备上，必须将 AWS IoT Greengrass 核心软件设置为系统服务。

有关您可以指定的参数的更多信息，请参阅[安装程序参数](configure-installer.md)。

**注意**  
<a name="jvm-tuning-note"></a>如果您在内存有限的设备 AWS IoT Greengrass 上运行，则可以控制 AWS IoT Greengrass 酷睿软件使用的内存量。要控制内存分配，您可以在 Nucleus 组件的 `jvmOptions` 配置参数中设置 JVM 堆大小选项。有关更多信息，请参阅 [使用 JVM 选项控制内存分配](configure-greengrass-core-v2.md#jvm-tuning)。

**安装 AWS IoT Greengrass 核心软件**

1. <a name="installer-check-greengrass-core-software-version"></a>检查 AWS IoT Greengrass 核心软件的版本。
   + *GreengrassInstaller*替换为包含该软件的文件夹的路径。

   ```
   java -jar ./GreengrassInstaller/lib/Greengrass.jar --version
   ```

1. 使用文本编辑器创建名为 `config.yaml` 的配置文件，以提供给安装程序。

   <a name="nano-command-intro"></a>例如，在基于 Linux 的系统上，您可以运行以下命令来使用 GNU nano 创建该文件。

   ```
   nano GreengrassInstaller/config.yaml
   ```

   将以下 YAML 内容复制到该文件中。此部分配置文件会指定实例集预置插件的参数。有关可以指定的选项的更多信息，请参阅[配置 AWS IoT 舰队配置插件](fleet-provisioning-configuration.md)。

------
#### [ Linux or Unix ]

   ```
   ---
   services:
     aws.greengrass.Nucleus:
       version: "2.16.1"
     aws.greengrass.FleetProvisioningByClaim:
       configuration:
         rootPath: "/greengrass/v2"
         awsRegion: "us-west-2"
         iotDataEndpoint: "device-data-prefix-ats.iot.us-west-2.amazonaws.com"
         iotCredentialEndpoint: "device-credentials-prefix.credentials.iot.us-west-2.amazonaws.com"
         iotRoleAlias: "GreengrassCoreTokenExchangeRoleAlias"
         provisioningTemplate: "GreengrassFleetProvisioningTemplate"
         claimCertificatePath: "/greengrass/v2/claim-certs/claim.pem.crt"
         claimCertificatePrivateKeyPath: "/greengrass/v2/claim-certs/claim.private.pem.key"
         rootCaPath: "/greengrass/v2/AmazonRootCA1.pem"
         templateParameters:
           ThingName: "MyGreengrassCore"
           ThingGroupName: "MyGreengrassCoreGroup"
   ```

------
#### [ Windows ]

   ```
   ---
   services:
     aws.greengrass.Nucleus:
       version: "2.16.1"
     aws.greengrass.FleetProvisioningByClaim:
       configuration:
         rootPath: "C:\\greengrass\\v2"
         awsRegion: "us-west-2"
         iotDataEndpoint: "device-data-prefix-ats.iot.us-west-2.amazonaws.com"
         iotCredentialEndpoint: "device-credentials-prefix.credentials.iot.us-west-2.amazonaws.com"
         iotRoleAlias: "GreengrassCoreTokenExchangeRoleAlias"
         provisioningTemplate: "GreengrassFleetProvisioningTemplate"
         claimCertificatePath: "C:\\greengrass\\v2\\claim-certs\\claim.pem.crt"
         claimCertificatePrivateKeyPath: "C:\\greengrass\\v2\\claim-certs\\claim.private.pem.key"
         rootCaPath: "C:\\greengrass\\v2\\AmazonRootCA1.pem"
         templateParameters:
           ThingName: "MyGreengrassCore"
           ThingGroupName: "MyGreengrassCoreGroup"
   ```

------

   然后执行以下操作：
   + *2.16.1*替换为 AWS IoT Greengrass 核心软件的版本。
   + 用 Greengrass 根*C:\$1greengrass\$1v2*文件夹替换`/greengrass/v2`或的每个实例。
**注意**  
在 Windows 设备上，您必须将路径分隔符指定为双反斜杠 (`\\`)，例如 `C:\\greengrass\\v2`。
   + *us-west-2*替换为您创建置备模板和其他资源的 AWS 区域。
   + `iotDataEndpoint`用您的 AWS IoT 数据端点替换。
   + 用您的`iotCredentialEndpoint` AWS IoT 凭证终端节点替换。
   + *GreengrassCoreTokenExchangeRoleAlias*替换为令牌交换角色别名的名称。
   + *GreengrassFleetProvisioningTemplate*替换为队列配置模板的名称。
   + 将 `claimCertificatePath` 替换为设备上声明证书的路径。
   + 将 `claimCertificatePrivateKeyPath` 替换为设备上声明证书私钥的路径。
   + 将模板参数（`templateParameters`）替换为用于预置设备的值。此示例参考用于定义 `ThingName` 和 `ThingGroupName` 参数的[示例模板](fleet-provisioning-setup.md#example-fleet-provisioning-template)。
**注意**  
在此配置文件中，您可以自定义其他配置选项（例如要使用的端口和网络代理），如以下示例所示。有关更多信息，请参阅 [Greengrass Nucleus 配置](greengrass-nucleus-component.md#greengrass-nucleus-component-configuration)。  

   ```
   ---
   services:
     aws.greengrass.Nucleus:
       version: "2.16.1"
       configuration:
         mqtt:
           port: 443
         greengrassDataPlanePort: 443
         networkProxy:
           noProxyAddresses: "http://192.168.0.1,www.example.com"
           proxy:
             url: "http://my-proxy-server:1100"
             username: "Mary_Major"
             password: "pass@word1357"
     aws.greengrass.FleetProvisioningByClaim:
       configuration:
         rootPath: "/greengrass/v2"
         awsRegion: "us-west-2"
         iotDataEndpoint: "device-data-prefix-ats.iot.us-west-2.amazonaws.com"
         iotCredentialEndpoint: "device-credentials-prefix.credentials.iot.us-west-2.amazonaws.com"
         iotRoleAlias: "GreengrassCoreTokenExchangeRoleAlias"
         provisioningTemplate: "GreengrassFleetProvisioningTemplate"
         claimCertificatePath: "/greengrass/v2/claim-certs/claim.pem.crt"
         claimCertificatePrivateKeyPath: "/greengrass/v2/claim-certs/claim.private.pem.key"
         rootCaPath: "/greengrass/v2/AmazonRootCA1.pem"
         templateParameters:
           ThingName: "MyGreengrassCore"
           ThingGroupName: "MyGreengrassCoreGroup"
         mqttPort: 443
         proxyUrl: "http://my-proxy-server:1100"
         proxyUserName: "Mary_Major"
         proxyPassword: "pass@word1357"
   ```

   ```
   ---
   services:
     aws.greengrass.Nucleus:
       version: "2.16.1"
       configuration:
         mqtt:
           port: 443
         greengrassDataPlanePort: 443
         networkProxy:
           noProxyAddresses: "http://192.168.0.1,www.example.com"
           proxy:
             url: "http://my-proxy-server:1100"
             username: "Mary_Major"
             password: "pass@word1357"
     aws.greengrass.FleetProvisioningByClaim:
       configuration:
         rootPath: "C:\\greengrass\\v2"
         awsRegion: "us-west-2"
         iotDataEndpoint: "device-data-prefix-ats.iot.us-west-2.amazonaws.com"
         iotCredentialEndpoint: "device-credentials-prefix.credentials.iot.us-west-2.amazonaws.com"
         iotRoleAlias: "GreengrassCoreTokenExchangeRoleAlias"
         provisioningTemplate: "GreengrassFleetProvisioningTemplate"
         claimCertificatePath: "C:\\greengrass\\v2\\claim-certs\\claim.pem.crt"
         claimCertificatePrivateKeyPath: "C:\\greengrass\\v2\\claim-certs\\claim.private.pem.key"
         rootCaPath: "C:\\greengrass\\v2\\AmazonRootCA1.pem"
         templateParameters:
           ThingName: "MyGreengrassCore"
           ThingGroupName: "MyGreengrassCoreGroup"
         mqttPort: 443
         proxyUrl: "http://my-proxy-server:1100"
         proxyUserName: "Mary_Major"
         proxyPassword: "pass@word1357"
   ```
要使用 HTTPS 代理，您必须使用 1.1.0 版本或更高版本的实例集预置插件。您还必须在 `system` 下指定 `rootCaPath`，如以下示例所示。  

   ```
   ---
   system:
     rootCaPath: "/greengrass/v2/AmazonRootCA1.pem"
   services:
     ...
   ```

   ```
   ---
   system:
     rootCaPath: "C:\\greengrass\\v2\\AmazonRootCA1.pem"
   services:
     ...
   ```

1. 运行安装程序。指定 `--trusted-plugin` 来提供实例集预置插件，并指定 `--init-config` 来提供配置文件。
   + 将 `/greengrass/v2` 替换为 Greengrass 根文件夹。
   + 将的*GreengrassInstaller*每个实例替换为解压安装程序所在的文件夹。

------
#### [ Linux or Unix ]

   ```
   sudo -E java -Droot="/greengrass/v2" -Dlog.store=FILE \
     -jar ./GreengrassInstaller/lib/Greengrass.jar \
     --trusted-plugin ./GreengrassInstaller/aws.greengrass.FleetProvisioningByClaim.jar \
     --init-config ./GreengrassInstaller/config.yaml \
     --component-default-user ggc_user:ggc_group \
     --setup-system-service true
   ```

------
#### [ Windows Command Prompt (CMD) ]

   ```
   java -Droot="C:\greengrass\v2" "-Dlog.store=FILE" ^
     -jar ./GreengrassInstaller/lib/Greengrass.jar ^
     --trusted-plugin ./GreengrassInstaller/aws.greengrass.FleetProvisioningByClaim.jar ^
     --init-config ./GreengrassInstaller/config.yaml ^
     --component-default-user ggc_user ^
     --setup-system-service true
   ```

------
#### [ PowerShell ]

   ```
   java -Droot="C:\greengrass\v2" "-Dlog.store=FILE" `
     -jar ./GreengrassInstaller/lib/Greengrass.jar `
     --trusted-plugin ./GreengrassInstaller/aws.greengrass.FleetProvisioningByClaim.jar `
     --init-config ./GreengrassInstaller/config.yaml `
     --component-default-user ggc_user `
     --setup-system-service true
   ```

------
**重要**  <a name="windows-system-service-installer-argument-important-note"></a>
在 Windows 核心设备上，`--setup-system-service true`必须指定将 AWS IoT Greengrass 核心软件设置为系统服务。

   <a name="installer-setup-system-service-output-message"></a>如果指定 `--setup-system-service true`，则安装程序会在将软件设置为系统服务并运行后打印 `Successfully set up Nucleus as a system service`。否则，如果安装程序成功安装软件，则不会输出任何消息。
**注意**  <a name="installer-deploy-dev-tools-without-provision"></a>
在没有 `deploy-dev-tools` 参数的情况下运行安装程序时，您不能使用 `--provision true` 参数来部署本地开发工具。有关直接在您的设备上部署 Greengrass CLI 的信息，请参阅 [Greengrass 命令行界面](gg-cli.md)。

1. <a name="installer-verify-installation"></a>通过查看根文件夹中的文件来验证安装情况。

------
#### [ Linux or Unix ]

   ```
   ls /greengrass/v2
   ```

------
#### [ Windows Command Prompt (CMD) ]

   ```
   dir C:\greengrass\v2
   ```

------
#### [ PowerShell ]

   ```
   ls C:\greengrass\v2
   ```

------

   如果安装成功，则根文件夹中包含多个文件夹，例如 `config`、`packages` 和 `logs`。

<a name="install-greengrass-core-run-software"></a>如果您将 AWS IoT Greengrass Core 软件作为系统服务安装，则安装程序会为您运行该软件。否则，您必须手动运行该软件。有关更多信息，请参阅 [运行 AWS IoT Greengrass 核心软件](run-greengrass-core-v2.md)。

<a name="install-greengrass-core-next-steps-intro"></a>有关如何配置和使用软件的更多信息 AWS IoT Greengrass，请参阅以下内容：<a name="install-greengrass-core-next-steps-links"></a>
+ [配置 AWS IoT Greengrass 核心软件](configure-greengrass-core-v2.md)
+ [开发 AWS IoT Greengrass 组件](develop-greengrass-components.md)
+ [将 AWS IoT Greengrass 组件部署到设备](manage-deployments.md)
+ [Greengrass 命令行界面](gg-cli.md)

# 为 Greengrass 核心 AWS IoT 设备设置队列配置
<a name="fleet-provisioning-setup"></a>

要[安装具有队列配置功能的 AWS IoT Greengrass Core 软件](fleet-provisioning.md)，必须先在中设置以下资源 AWS 账户。这些资源使设备能够在 Greengrass 核心设备上注册 AWS IoT 并作为 Greengrass 核心设备运行。只需按照本节中的步骤操作一次，即可在 AWS 账户中创建和配置这些资源。
+ 令牌交换 IAM 角色，即核心设备授权调用 AWS 服务时使用的角色。
+ 指向代币交换 AWS IoT 角色的角色别名。
+ （可选）一项 AWS IoT 策略，核心设备使用该策略来授权对 AWS IoT 和 AWS IoT Greengrass 服务的调用。此 AWS IoT 策略必须`iot:AssumeRoleWithCertificate`允许指向令牌交换 AWS IoT 角色的角色别名的权限。

  您可以对队列中的所有核心设备使用单一 AWS IoT 策略，也可以配置队列配置模板为每台核心设备创建 AWS IoT 策略。
+  AWS IoT 舰队配置模板。此模板必须指定以下各项：<a name="installation-fleet-provisioning-template-requirements"></a>
  +  AWS IoT 事物资源。您可以指定一系列现有事物组，在每台设备联机时为设备部署组件。
  + 一种 AWS IoT 策略资源。此资源可以定义下列属性之一：
    + 现有 AWS IoT 策略的名称。如果选择此选项，则根据此模板创建的核心设备将使用相同的 AWS IoT 策略，并且您可以像队列一样管理它们的权限。
    + 一份 AWS IoT 政策文件。如果选择此选项，则根据此模板创建的每台核心设备都使用唯一的 AWS IoT 策略，并且您可以管理每台核心设备的权限。
  +  AWS IoT 证书资源。此证书资源必须使用 `AWS::IoT::Certificate::Id` 参数将证书附加到核心设备。有关更多信息，请参阅《*AWS IoT 开发人员指南*》中的[Just-in-time 配置](https://docs.aws.amazon.com/iot/latest/developerguide/jit-provisioning.html)。
+ 队列 AWS IoT 配置模板的配置声明证书和私钥。您可以在制造过程中将此证书和私钥嵌入设备中，这样设备就可以在联机时自行注册和预置。
**重要**  <a name="installation-fleet-provisioning-secure-claim-private-keys"></a>
预置声明私钥应始终得到保护，包括在 Greengrass 核心设备上时。我们建议您使用 Amazon CloudWatch 指标和日志来监控是否存在滥用迹象，例如未经授权使用索赔证书来配置设备。如果您检测到滥用，请禁用预置声明证书，以使其不能用于设备预置。有关更多信息，请参阅 *AWS IoT Core 开发人员指南* 中的 [监控 AWS IoT](https://docs.aws.amazon.com/iot/latest/developerguide/monitoring_overview.html)。  
为了帮助您更好地管理自己在您的设备中注册的设备数量和设备 AWS 账户，您可以在创建队列配置模板时指定预配置挂钩。预配置挂钩是一种验证设备在注册期间提供的模板参数的 AWS Lambda 功能。例如，您可以创建一个预置前钩子，根据数据库检查设备 ID，以验证设备是否有权进行预置。有关更多信息，请参阅《AWS IoT Core 开发人员指南》中的[预置前钩子](https://docs.aws.amazon.com/iot/latest/developerguide/pre-provisioning-hook.html)。**
+ 您附加到配置声明证书的 AWS IoT 策略，允许设备注册和使用队列配置模板。

**Topics**
+ [创建令牌交换角色](#create-token-exchange-role)
+ [创建 AWS IoT 策略](#create-iot-policy)
+ [创建实例集预置模板](#create-provisioning-template)
+ [创建预置声明证书和私钥](#create-claim-certificates)

## 创建令牌交换角色
<a name="create-token-exchange-role"></a>

<a name="installation-create-token-exchange-role-intro"></a>Greengrass 核心设备使用 IAM 服务角色（称为*令牌交换角色）来授权对*服务的调用。 AWS 设备使用 AWS IoT 证书提供程序来获取此角色的临时 AWS 证书，从而允许设备与 Amazon Logs 进行交互 AWS IoT、向 Amazon Logs 发送 CloudWatch 日志以及从 Amazon S3 下载自定义组件项目。有关更多信息，请参阅 [授权核心设备与 AWS 服务交互](device-service-role.md)。

<a name="installation-create-token-exchange-role-alias-intro"></a>您可以使用 AWS IoT *角色别名*为 Greengrass 核心设备配置令牌交换角色。角色别名允许您更改设备的令牌交换角色，但设备配置保持不变。有关更多信息，请参阅《AWS IoT Core 开发人员指南》**中的[授权直接调用 AWS 服务](https://docs.aws.amazon.com/iot/latest/developerguide/authorizing-direct-aws.html)。

在本节中，您将创建一个令牌交换 IAM 角色和一个指向该 AWS IoT 角色的角色别名。如果您已经设置了 Greengrass 核心设备，则可以使用其令牌交换角色和角色别名，而不必新建。

**创建令牌交换 IAM 角色**

1. <a name="create-token-exchange-role-create-iam-role"></a>创建设备可将其用作令牌交换角色的 IAM 角色。执行以下操作：

   1. 创建包含令牌交换角色所需的信任策略文档的文件。

      <a name="nano-command-intro"></a>例如，在基于 Linux 的系统上，您可以运行以下命令来使用 GNU nano 创建该文件。

      ```
      nano device-role-trust-policy.json
      ```

      将以下 JSON 复制到该文件中。

      ```
      {
        "Version": "2012-10-17",		 	 	 
        "Statement": [
          {
            "Effect": "Allow",
            "Principal": {
              "Service": "credentials.iot.amazonaws.com"
            },
            "Action": "sts:AssumeRole"
          }
        ]
      }
      ```

   1. 通过信任策略文档创建令牌交换角色。
      + *GreengrassV2TokenExchangeRole*替换为要创建的 IAM 角色的名称。

      ```
      aws iam create-role --role-name GreengrassV2TokenExchangeRole --assume-role-policy-document file://device-role-trust-policy.json
      ```

      如果请求成功，响应类似如下示例。

      ```
      {
        "Role": {
          "Path": "/",
          "RoleName": "GreengrassV2TokenExchangeRole",
          "RoleId": "AROAZ2YMUHYHK5OKM77FB",
          "Arn": "arn:aws:iam::123456789012:role/GreengrassV2TokenExchangeRole",
          "CreateDate": "2021-02-06T00:13:29+00:00",
          "AssumeRolePolicyDocument": {
            "Version": "2012-10-17",		 	 	 
            "Statement": [
              {
                "Effect": "Allow",
                "Principal": {
                  "Service": "credentials.iot.amazonaws.com"
                },
                "Action": "sts:AssumeRole"
              }
            ]
          }
        }
      ```

   1. 创建一个包含令牌交换角色所需的访问策略文档的文件。

      <a name="nano-command-intro"></a>例如，在基于 Linux 的系统上，您可以运行以下命令来使用 GNU nano 创建该文件。

      ```
      nano device-role-access-policy.json
      ```

      将以下 JSON 复制到该文件中。

      ```
      {
        "Version": "2012-10-17",		 	 	 
        "Statement": [
          {
            "Effect": "Allow",
            "Action": [
              "logs:CreateLogGroup",
              "logs:CreateLogStream",
              "logs:PutLogEvents",
              "logs:DescribeLogStreams",
              "s3:GetBucketLocation"
            ],
            "Resource": "*"
          }
        ]
      }
      ```
**注意**  
此访问策略不允许访问 S3 存储桶中的组件构件。要在 Amazon S3 中部署可定义构件的自定义组件，您必须为该角色添加权限以允许核心设备检索组件构件。有关更多信息，请参阅 [允许访问 S3 存储桶中的组件构件](device-service-role.md#device-service-role-access-s3-bucket)。  
如果您还没有适用于组件构件的 S3 存储桶，则可以在创建存储桶后添加这些权限。

   1. 通过策略文档创建 IAM 策略
      + *GreengrassV2TokenExchangeRoleAccess*替换为要创建的 IAM 策略的名称。

      ```
      aws iam create-policy --policy-name GreengrassV2TokenExchangeRoleAccess --policy-document file://device-role-access-policy.json
      ```

      如果请求成功，响应类似如下示例。

      ```
      {
        "Policy": {
          "PolicyName": "GreengrassV2TokenExchangeRoleAccess",
          "PolicyId": "ANPAZ2YMUHYHACI7C5Z66",
          "Arn": "arn:aws:iam::123456789012:policy/GreengrassV2TokenExchangeRoleAccess",
          "Path": "/",
          "DefaultVersionId": "v1",
          "AttachmentCount": 0,
          "PermissionsBoundaryUsageCount": 0,
          "IsAttachable": true,
          "CreateDate": "2021-02-06T00:37:17+00:00",
          "UpdateDate": "2021-02-06T00:37:17+00:00"
        }
      }
      ```

   1. 将 IAM 策略附加到令牌交换角色。
      + 将 *GreengrassV2TokenExchangeRole* 替换为 IAM 角色的名称。
      + 将策略 ARN 替换为您在上一步中创建的 IAM 策略的 ARN。

      ```
      aws iam attach-role-policy --role-name GreengrassV2TokenExchangeRole --policy-arn arn:aws:iam::123456789012:policy/GreengrassV2TokenExchangeRoleAccess
      ```

      如果请求成功，则该命令没有任何输出。

1. <a name="create-token-exchange-role-create-iot-role-alias"></a>创建 AWS IoT 指向代币交换角色的角色别名。
   + *GreengrassCoreTokenExchangeRoleAlias*替换为要创建的角色别名的名称。
   + 将角色 ARN 替换为您在上一步中创建的 IAM 角色的 ARN。

   ```
   aws iot create-role-alias --role-alias GreengrassCoreTokenExchangeRoleAlias --role-arn arn:aws:iam::123456789012:role/GreengrassV2TokenExchangeRole
   ```

   如果请求成功，响应类似如下示例。

   ```
   {
     "roleAlias": "GreengrassCoreTokenExchangeRoleAlias",
     "roleAliasArn": "arn:aws:iot:us-west-2:123456789012:rolealias/GreengrassCoreTokenExchangeRoleAlias"
   }
   ```
**注意**  
要创建角色别名，您必须有权将令牌交换 IAM 角色传递到 AWS IoT。如果您在尝试创建角色别名时收到错误消息，请检查您的 AWS 用户是否具有此权限。有关更多信息，请参阅[《用户*指南》中的授予AWS Identity and Access Management 用户*向 AWS 服务传递角色的权限](https://docs.aws.amazon.com/IAM/latest/UserGuide/id_roles_use_passrole.html)。

## 创建 AWS IoT 策略
<a name="create-iot-policy"></a>

将设备注册为 AWS IoT 事物后，该设备可以使用数字证书进行身份验证 AWS。该证书包含一个或多个 AWS IoT 策略，这些策略定义了设备可以与证书一起使用的权限。这些策略允许设备与 AWS IoT 和通信 AWS IoT Greengrass。

通过 AWS IoT 队列配置，设备可以 AWS IoT 连接到以创建和下载设备证书。在下一节中创建的队列配置模板中，您可以指定是将相同的 AWS IoT 策略 AWS IoT 附加到所有设备的证书，还是为每台设备创建新策略。

在本节中，您将创建一个 AWS IoT 附加到所有设备证书的 AWS IoT 策略。通过这种方法，您可以以实例集的形式管理所有设备的权限。如果您想为每台设备创建新 AWS IoT 策略，则可以跳过本节，在定义队列模板时参考其中的策略。

**创建 AWS IoT 策略**
+ 创建 AWS IoT 策略来定义您的 Greengrass 核心设备队列的 AWS IoT 权限。以下策略允许访问所有 MQTT 主题和 Greengrass 操作，因此您的设备可以处理需要新 Greengrass 操作的自定义应用程序和未来更改。此策略还允许 `iot:AssumeRoleWithCertificate` 权限，允许您的设备使用您在上一节中创建的令牌交换角色。您可以根据自己的使用案例来限制此策略。有关更多信息，请参阅 [AWS IoT Greengrass V2 核心设备的最低 AWS IoT 政策](device-auth.md#greengrass-core-minimal-iot-policy)。

  执行以下操作：

  1. 创建一个包含 Greengrass 核心设备所需的 AWS IoT 策略文档的文件。

     <a name="nano-command-intro"></a>例如，在基于 Linux 的系统上，您可以运行以下命令来使用 GNU nano 创建该文件。

     ```
     nano greengrass-v2-iot-policy.json
     ```

     将以下 JSON 复制到该文件中。
     + 将`iot:AssumeRoleWithCertificate`资源替换为您在上一节中创建的 AWS IoT 角色别名的 ARN。

------
#### [ JSON ]

****  

     ```
     {
       "Version":"2012-10-17",		 	 	 
       "Statement": [
         {
           "Effect": "Allow",
           "Action": [
             "iot:Publish",
             "iot:Subscribe",
             "iot:Receive",
             "iot:Connect",
             "greengrass:*"
           ],
           "Resource": [
             "*"
           ]
         },
         {
           "Effect": "Allow",
           "Action": "iot:AssumeRoleWithCertificate",
           "Resource": "arn:aws:iot:us-east-1:123456789012:rolealias/GreengrassCoreTokenExchangeRoleAlias"
         }
       ]
     }
     ```

------

  1. 根据 AWS IoT 策略文档创建策略。
     + *GreengrassV2IoTThingPolicy*替换为要创建的策略的名称。

     ```
     aws iot create-policy --policy-name GreengrassV2IoTThingPolicy --policy-document file://greengrass-v2-iot-policy.json
     ```

     如果请求成功，响应类似如下示例。

------
#### [ JSON ]

****  

     ```
     {
       "policyName": "GreengrassV2IoTThingPolicy",
       "policyArn": "arn:aws:iot:us-west-2:123456789012:policy/GreengrassV2IoTThingPolicy",
       "policyDocument": "{
         \"Version\": \"2012-10-17\",
         \"Statement\": [
           {
             \"Effect\": \"Allow\",
             \"Action\": [
               \"iot:Publish\",
               \"iot:Subscribe\",
               \"iot:Receive\",
               \"iot:Connect\",
               \"greengrass:*\"
             ],
             \"Resource\": [
               \"*\"
             ]
           },
           {
             \"Effect\": \"Allow\",
             \"Action\": \"iot:AssumeRoleWithCertificate\",
             \"Resource\": \"arn:aws:iot:us-west-2:123456789012:rolealias/GreengrassCoreTokenExchangeRoleAlias\"
           }
         ]
       }",
       "policyVersionId": "1"
     }
     ```

------

## 创建实例集预置模板
<a name="create-provisioning-template"></a>

AWS IoT 舰队配置模板定义了如何配置 AWS IoT 内容、策略和证书。要使用实例集预置插件预置 Greengrass 核心设备，您必须创建一个模板，指定以下各项：<a name="installation-fleet-provisioning-template-requirements"></a>
+  AWS IoT 事物资源。您可以指定一系列现有事物组，在每台设备联机时为设备部署组件。
+ 一种 AWS IoT 策略资源。此资源可以定义下列属性之一：
  + 现有 AWS IoT 策略的名称。如果选择此选项，则根据此模板创建的核心设备将使用相同的 AWS IoT 策略，并且您可以像队列一样管理它们的权限。
  + 一份 AWS IoT 政策文件。如果选择此选项，则根据此模板创建的每台核心设备都使用唯一的 AWS IoT 策略，并且您可以管理每台核心设备的权限。
+  AWS IoT 证书资源。此证书资源必须使用 `AWS::IoT::Certificate::Id` 参数将证书附加到核心设备。有关更多信息，请参阅《*AWS IoT 开发人员指南*》中的[Just-in-time 配置](https://docs.aws.amazon.com/iot/latest/developerguide/jit-provisioning.html)。

在模板中，您可以指定将 AWS IoT 事物添加到现有事物组列表中。当核心设备首次连接到 AWS IoT Greengrass 时，它会收到其所属的每个事物组的 Greengrass 部署。您可以使用事物组，在每台设备联机后立即为设备部署最新的软件。有关更多信息，请参阅 [将 AWS IoT Greengrass 组件部署到设备](manage-deployments.md)。

在配置设备 AWS 账户 时，该 AWS IoT 服务需要权限才能在您中创建和更新 AWS IoT 资源。要授予 AWS IoT 服务访问权限，您需要创建一个 IAM 角色并在创建模板时提供该角色。 AWS IoT 提供了一个名为 “[AWSIoTThings注册](https://console.aws.amazon.com/iam/home#/policies/arn:aws:iam::aws:policy/service-role/AWSIoTThingsRegistration)” 的托管策略，允许访问在配置设备时 AWS IoT 可能使用的所有权限。您可以使用此托管策略，也可以创建自定义策略，根据您的使用案例缩小托管策略中的权限范围。

在本节中，您将创建一个允许 AWS IoT 为设备配置资源的 IAM 角色，并创建使用该 IAM 角色的队列配置模板。

**创建实例集预置模板**

1. 创建一个 IAM 角色，该角色 AWS IoT 可以代入在您的中配置资源 AWS 账户。执行以下操作：

   1. 创建一个包含允许 AWS IoT 担任该角色的信任策略文档的文件。

      <a name="nano-command-intro"></a>例如，在基于 Linux 的系统上，您可以运行以下命令来使用 GNU nano 创建该文件。

      ```
      nano aws-iot-trust-policy.json
      ```

      将以下 JSON 复制到该文件中。

------
#### [ JSON ]

****  

      ```
      {
        "Version":"2012-10-17",		 	 	 
        "Statement": [
          {
            "Effect": "Allow",
            "Principal": {
              "Service": "iot.amazonaws.com"
            },
            "Action": "sts:AssumeRole"
          }
        ]
      }
      ```

------

   1. 使用信任策略文档创建 IAM 角色。
      + *GreengrassFleetProvisioningRole*替换为要创建的 IAM 角色的名称。

      ```
      aws iam create-role --role-name GreengrassFleetProvisioningRole --assume-role-policy-document file://aws-iot-trust-policy.json
      ```

      如果请求成功，响应类似如下示例。

------
#### [ JSON ]

****  

      ```
      {
        "Version":"2012-10-17",		 	 	 
        "Statement": [
          {
            "Effect": "Allow",
            "Action": [
              "iot:Connect",
              "iot:Publish",
              "iot:Subscribe",
              "iot:Receive"
            ],
            "Resource": "*"
          }
        ]
      }
      ```

------

   1. 查看[AWSIoTThings注册](https://console.aws.amazon.com/iam/home#/policies/arn:aws:iam::aws:policy/service-role/AWSIoTThingsRegistration)策略，该策略允许访问配置设备时 AWS IoT 可能使用的所有权限。您可以使用此托管策略，也可以创建自定义策略，为您的使用案例定义缩小范围的权限。如果您选择创建自定义策略，请立即创建。

   1. 将 IAM 策略附加到实例集预置角色。
      + 将 *GreengrassFleetProvisioningRole* 替换为 IAM 角色的名称。
      + 如果您在上一步中创建了自定义策略，请将策略 ARN 替换为要使用的 IAM 策略的 ARN。

      ```
      aws iam attach-role-policy --role-name GreengrassFleetProvisioningRole --policy-arn arn:aws:iam::aws:policy/service-role/AWSIoTThingsRegistration
      ```

      如果请求成功，则该命令没有任何输出。

1. （可选）创建一个*预置前钩子*，该钩子是 AWS Lambda 函数，用于验证设备在注册期间提供的模板参数。您可以使用预置前钩子来更好地控制您的 AWS 账户中注册的设备和设备数量。有关更多信息，请参阅《AWS IoT Core 开发人员指南》中的[预置前钩子](https://docs.aws.amazon.com/iot/latest/developerguide/pre-provisioning-hook.html)。**

1. 创建实例集预置模板。执行以下操作：

   1. 创建一个文件以包含预置模版文档。

      <a name="nano-command-intro"></a>例如，在基于 Linux 的系统上，您可以运行以下命令来使用 GNU nano 创建该文件。

      ```
      nano greengrass-fleet-provisioning-template.json
      ```

      编写一个预置模板文档。您可以从以下示例配置模板开始，该模板指定创建具有以下属性的 AWS IoT 事物：
      + 事物的名称是您在 `ThingName` 模板参数中指定的值。
      + 事物是您在 `ThingGroupName` 模板参数中指定的事物组的成员。事物组必须存在于您的中 AWS 账户。
      + 事物的证书上`GreengrassV2IoTThingPolicy`附有名为的 AWS IoT 策略。

      有关更多信息，请参阅《AWS IoT Core 开发人员指南》中的[预置模板](https://docs.aws.amazon.com/iot/latest/developerguide/provision-template.html)。**

      ```
      {
        "Parameters": {
          "ThingName": {
            "Type": "String"
          },
          "ThingGroupName": {
            "Type": "String"
          },
          "AWS::IoT::Certificate::Id": {
            "Type": "String"
          }
        },
        "Resources": {
          "MyThing": {
            "OverrideSettings": {
              "AttributePayload": "REPLACE",
              "ThingGroups": "REPLACE",
              "ThingTypeName": "REPLACE"
            },
            "Properties": {
              "AttributePayload": {},
              "ThingGroups": [
                {
                  "Ref": "ThingGroupName"
                }
              ],
              "ThingName": {
                "Ref": "ThingName"
              }
            },
            "Type": "AWS::IoT::Thing"
          },
          "MyPolicy": {
            "Properties": {
              "PolicyName": "GreengrassV2IoTThingPolicy"
            },
            "Type": "AWS::IoT::Policy"
          },
          "MyCertificate": {
            "Properties": {
              "CertificateId": {
                "Ref": "AWS::IoT::Certificate::Id"
              },
              "Status": "Active"
            },
            "Type": "AWS::IoT::Certificate"
          }
        }
      }
      ```
**注意**  
*MyThing**MyPolicy*、和*MyCertificate*是任意名称，用于标识队列置备模板中的每个资源规范。 AWS IoT 不会在根据模板创建的资源中使用这些名称。您可以使用这些名称，也可以将其替换为有助于识别模板中每项资源的值。

   1. 通过预置模板文档创建实例集预置模板。
      + 将 *GreengrassFleetProvisioningTemplate* 替换为要创建的模板的名称。
      + 将模板描述替换为您的模板描述。
      + 将预置角色 ARN 替换为您之前创建的角色的 ARN。

------
#### [ Linux or Unix ]

      ```
      aws iot create-provisioning-template \
        --template-name GreengrassFleetProvisioningTemplate \
        --description "A provisioning template for Greengrass core devices." \
        --provisioning-role-arn "arn:aws:iam::123456789012:role/GreengrassFleetProvisioningRole" \
        --template-body file://greengrass-fleet-provisioning-template.json \
        --enabled
      ```

------
#### [ Windows Command Prompt (CMD) ]

      ```
      aws iot create-provisioning-template ^
        --template-name GreengrassFleetProvisioningTemplate ^
        --description "A provisioning template for Greengrass core devices." ^
        --provisioning-role-arn "arn:aws:iam::123456789012:role/GreengrassFleetProvisioningRole" ^
        --template-body file://greengrass-fleet-provisioning-template.json ^
        --enabled
      ```

------
#### [ PowerShell ]

      ```
      aws iot create-provisioning-template `
        --template-name GreengrassFleetProvisioningTemplate `
        --description "A provisioning template for Greengrass core devices." `
        --provisioning-role-arn "arn:aws:iam::123456789012:role/GreengrassFleetProvisioningRole" `
        --template-body file://greengrass-fleet-provisioning-template.json `
        --enabled
      ```

------
**注意**  
如果您创建了预置前钩子，请使用 `--pre-provisioning-hook` 参数指定预置前钩子的 Lambda 函数的 ARN。  

      ```
      --pre-provisioning-hook targetArn=arn:aws:lambda:us-west-2:123456789012:function:GreengrassPreProvisioningHook
      ```

      如果请求成功，响应类似如下示例。

      ```
      {
          "templateArn": "arn:aws:iot:us-west-2:123456789012:provisioningtemplate/GreengrassFleetProvisioningTemplate",
          "templateName": "GreengrassFleetProvisioningTemplate",
          "defaultVersionId": 1
      }
      ```

## 创建预置声明证书和私钥
<a name="create-claim-certificates"></a>

声明证书是 X.509 证书，允许设备注册为 AWS IoT 事物并检索用于常规操作的唯一 X.509 设备证书。创建索赔证书后，您可以附加一个 AWS IoT 策略，允许设备使用该策略来创建唯一的设备证书并使用队列配置模板进行配置。具有声明证书的设备只能使用您在 AWS IoT 策略中允许的预置模板进行预置。

在本节中，您将创建声明证书并为设备配置该证书，以便与您在上一节中创建的实例集预置模版一起使用。

**重要**  <a name="installation-fleet-provisioning-secure-claim-private-keys"></a>
预置声明私钥应始终得到保护，包括在 Greengrass 核心设备上时。我们建议您使用 Amazon CloudWatch 指标和日志来监控是否存在滥用迹象，例如未经授权使用索赔证书来配置设备。如果您检测到滥用，请禁用预置声明证书，以使其不能用于设备预置。有关更多信息，请参阅 *AWS IoT Core 开发人员指南* 中的 [监控 AWS IoT](https://docs.aws.amazon.com/iot/latest/developerguide/monitoring_overview.html)。  
为了帮助您更好地管理自己在您的设备中注册的设备数量和设备 AWS 账户，您可以在创建队列配置模板时指定预配置挂钩。预配置挂钩是一种验证设备在注册期间提供的模板参数的 AWS Lambda 功能。例如，您可以创建一个预置前钩子，根据数据库检查设备 ID，以验证设备是否有权进行预置。有关更多信息，请参阅《AWS IoT Core 开发人员指南》中的[预置前钩子](https://docs.aws.amazon.com/iot/latest/developerguide/pre-provisioning-hook.html)。**

**创建预置声明证书和私钥**

1. 创建一个文件夹，用于下载声明证书和私钥。

   ```
   mkdir claim-certs
   ```

1. 创建并保存用于置备的证书和私钥。 AWS IoT 提供由 Amazon 根证书颁发机构 (CA) 签署的客户证书。

------
#### [ Linux or Unix ]

   ```
   aws iot create-keys-and-certificate \
     --certificate-pem-outfile "claim-certs/claim.pem.crt" \
     --public-key-outfile "claim-certs/claim.public.pem.key" \
     --private-key-outfile "claim-certs/claim.private.pem.key" \
     --set-as-active
   ```

------
#### [ Windows Command Prompt (CMD) ]

   ```
   aws iot create-keys-and-certificate ^
     --certificate-pem-outfile "claim-certs/claim.pem.crt" ^
     --public-key-outfile "claim-certs/claim.public.pem.key" ^
     --private-key-outfile "claim-certs/claim.private.pem.key" ^
     --set-as-active
   ```

------
#### [ PowerShell ]

   ```
   aws iot create-keys-and-certificate `
     --certificate-pem-outfile "claim-certs/claim.pem.crt" `
     --public-key-outfile "claim-certs/claim.public.pem.key" `
     --private-key-outfile "claim-certs/claim.private.pem.key" `
     --set-as-active
   ```

------

   如果请求成功，则响应将包含有关证书的信息。保存证书的 ARN 以供将来使用。

1. 创建并附加一项 AWS IoT 策略，允许设备使用该证书创建唯一的设备证书，并使用队列配置模板进行配置。以下策略允许访问设备预置 MQTT API。有关更多信息，请参阅《AWS IoT Core 开发人员指南》中的[设备预置 MQTT API](https://docs.aws.amazon.com/iot/latest/developerguide/fleet-provision-api.html)。**

   执行以下操作：

   1. 创建一个包含 Greengrass 核心设备所需的 AWS IoT 策略文档的文件。

      <a name="nano-command-intro"></a>例如，在基于 Linux 的系统上，您可以运行以下命令来使用 GNU nano 创建该文件。

      ```
      nano greengrass-provisioning-claim-iot-policy.json
      ```

      将以下 JSON 复制到该文件中。
      + 将的*region*每个实例替换为您设置队列配置 AWS 区域 的位置。
      + 将的*account-id*每个实例替换为您的 AWS 账户 ID。
      + 将的*GreengrassFleetProvisioningTemplate*每个实例替换为您在上一节中创建的队列配置模板的名称。

------
#### [ JSON ]

****  

      ```
      {
        "Version":"2012-10-17",		 	 	 
        "Statement": [
          {
            "Effect": "Allow",
            "Action": "iot:Connect",
            "Resource": "*"
          },
          {
            "Effect": "Allow",
            "Action": [
              "iot:Publish",
              "iot:Receive"
            ],
            "Resource": [
            "arn:aws:iot:us-east-1:123456789012:topic/$aws/certificates/create/*",
        "arn:aws:iot:us-east-1:123456789012:topic/$aws/provisioning-templates/GreengrassFleetProvisioningTemplate/provision/*"
            ]
          },
          {
            "Effect": "Allow",
            "Action": "iot:Subscribe",
            "Resource": [
            "arn:aws:iot:us-east-1:123456789012:topicfilter/$aws/certificates/create/*",
        "arn:aws:iot:us-east-1:123456789012:topicfilter/$aws/provisioning-templates/GreengrassFleetProvisioningTemplate/provision/*"
            ]
          }
        ]
      }
      ```

------

   1. 根据 AWS IoT 策略文档创建策略。
      + *GreengrassProvisioningClaimPolicy*替换为要创建的策略的名称。

      ```
      aws iot create-policy --policy-name GreengrassProvisioningClaimPolicy --policy-document file://greengrass-provisioning-claim-iot-policy.json
      ```

      如果请求成功，响应类似如下示例。

------
#### [ JSON ]

****  

      ```
      {
        "policyName": "GreengrassProvisioningClaimPolicy",
        "policyArn": "arn:aws:iot:us-west-2:123456789012:policy/GreengrassProvisioningClaimPolicy",
        "policyDocument": "{
          \"Version\": \"2012-10-17\",
          \"Statement\": [
            {
              \"Effect\": \"Allow\",
              \"Action\": \"iot:Connect\",
              \"Resource\": \"*\"
            },
            {
              \"Effect\": \"Allow\",
              \"Action\": [
                \"iot:Publish\",
                \"iot:Receive\"
              ],
              \"Resource\": [
              \"arn:aws:iot:us-east-1:123456789012:topic/$aws/certificates/create/*\",
        \"arn:aws:iot:us-east-1:123456789012:topic/$aws/provisioning-templates/GreengrassFleetProvisioningTemplate/provision/*\"
              ]
            },
            {
              \"Effect\": \"Allow\",
              \"Action\": \"iot:Subscribe\",
              \"Resource\": [
              \"arn:aws:iot:us-east-1:123456789012:topicfilter/$aws/certificates/create/*\",
        \"arn:aws:iot:us-east-1:123456789012:topicfilter/$aws/provisioning-templates/GreengrassFleetProvisioningTemplate/provision/*\"
              ]
            }
          ]
        }",
        "policyVersionId": "1"
      }
      ```

------

1. 将 AWS IoT 策略附加到置备声明证书。
   + *GreengrassProvisioningClaimPolicy*替换为要附加的策略的名称。
   + 将目标 ARN 替换为预置声明证书的 ARN。

   ```
   aws iot attach-policy --policy-name GreengrassProvisioningClaimPolicy --target arn:aws:iot:us-west-2:123456789012:cert/aa0b7958770878eabe251d8a7ddd547f4889c524c9b574ab9fbf65f32248b1d4
   ```

   如果请求成功，则该命令没有任何输出。

现在，您有了配置声明证书和私钥，设备可以使用这些证书和私钥注册 AWS IoT 并配置自己为 Greengrass 核心设备。您可以在制造过程中将索赔证书和私钥嵌入设备中，或者在安装 C AWS IoT Greengrass ore 软件之前将证书和密钥复制到设备。有关更多信息，请参阅 [安装具有 AWS IoT 队列配置功能的 C AWS IoT Greengrass ore 软件](fleet-provisioning.md)。

# 配置 AWS IoT 舰队配置插件
<a name="fleet-provisioning-configuration"></a>

 AWS IoT 队列配置插件提供了以下配置参数，当你[安装带有队列配置的 AWS IoT Greengrass Core 软件时，你可以自定义这些](fleet-provisioning.md)参数。

`rootPath`  
用作 AWS IoT Greengrass 核心软件根目录的文件夹的路径。

`awsRegion`  
舰队配置插件用于配置 AWS 资源的。 AWS 区域 

`iotDataEndpoint`  
<a name="nucleus-component-configuration-iot-data-endpoint"></a>您的 AWS IoT 数据端点 AWS 账户。

`iotCredentialEndpoint`  
<a name="nucleus-component-configuration-iot-cred-endpoint"></a>您的 AWS IoT 凭证终端节点 AWS 账户。

`iotRoleAlias`  
<a name="nucleus-component-configuration-iot-role-alias"></a>指向令牌交换 IAM 角色的角色别名。 AWS IoT AWS IoT 凭证提供者扮演此角色是为了允许 Greengrass 核心设备与服务进行交互。 AWS 有关更多信息，请参阅 [授权核心设备与 AWS 服务交互](device-service-role.md)。

`provisioningTemplate`  
用于配置 AWS 资源的 AWS IoT 队列配置模板。此模板必须指定以下各项：  <a name="installation-fleet-provisioning-template-requirements"></a>
+  AWS IoT 事物资源。您可以指定一系列现有事物组，在每台设备联机时为设备部署组件。
+ 一种 AWS IoT 策略资源。此资源可以定义下列属性之一：
  + 现有 AWS IoT 策略的名称。如果选择此选项，则根据此模板创建的核心设备将使用相同的 AWS IoT 策略，并且您可以像队列一样管理它们的权限。
  + 一份 AWS IoT 政策文件。如果选择此选项，则根据此模板创建的每台核心设备都使用唯一的 AWS IoT 策略，并且您可以管理每台核心设备的权限。
+  AWS IoT 证书资源。此证书资源必须使用 `AWS::IoT::Certificate::Id` 参数将证书附加到核心设备。有关更多信息，请参阅《*AWS IoT 开发人员指南*》中的[Just-in-time 配置](https://docs.aws.amazon.com/iot/latest/developerguide/jit-provisioning.html)。
有关更多信息，请参阅《AWS IoT Core 开发人员指南》中的[预置模板](https://docs.aws.amazon.com/iot/latest/developerguide/provision-template.html)。**

`claimCertificatePath`  
您在 `provisioningTemplate` 中指定的预置模板的预置声明证书的路径。有关更多信息，请参阅《AWS IoT Core API Reference》**中的 [CreateProvisioningClaim](https://docs.aws.amazon.com/iot/latest/apireference/API_CreateProvisioningClaim.html)。

`claimCertificatePrivateKeyPath`  
您在 `provisioningTemplate` 中指定的预置模板的预置声明证书私钥的路径。有关更多信息，请参阅《AWS IoT Core API Reference》**中的 [CreateProvisioningClaim](https://docs.aws.amazon.com/iot/latest/apireference/API_CreateProvisioningClaim.html)。  
预置声明私钥应始终得到保护，包括在 Greengrass 核心设备上时。我们建议您使用 Amazon CloudWatch 指标和日志来监控是否存在滥用迹象，例如未经授权使用索赔证书来配置设备。如果您检测到滥用，请禁用预置声明证书，以使其不能用于设备预置。有关更多信息，请参阅 *AWS IoT Core 开发人员指南* 中的 [监控 AWS IoT](https://docs.aws.amazon.com/iot/latest/developerguide/monitoring_overview.html)。  
为了帮助您更好地管理自己在您的设备中注册的设备数量和设备 AWS 账户，您可以在创建队列配置模板时指定预配置挂钩。预配置挂钩是一种验证设备在注册期间提供的模板参数的 AWS Lambda 功能。例如，您可以创建一个预置前钩子，根据数据库检查设备 ID，以验证设备是否有权进行预置。有关更多信息，请参阅《AWS IoT Core 开发人员指南》中的[预置前钩子](https://docs.aws.amazon.com/iot/latest/developerguide/pre-provisioning-hook.html)。**

`rootCaPath`  
Amazon 根证书颁发机构（CA）证书的路径。

`templateParameters`  
（可选）要提供给实例集预置模板的参数映射。有关更多信息，请参阅《AWS IoT Core 开发人员指南》中的[预置模板的参数部分](https://docs.aws.amazon.com/iot/latest/developerguide/provision-template.html#parameters-section)。**

`deviceId`  
（可选）当实例集预置插件创建与 AWS IoT的 MQTT 连接时，用作客户端 ID 的设备标识符。  
默认：随机的 UUID。

`mqttPort`  
（可选）用于 MQTT 连接的端口。  
默认值：`8883`

`proxyUrl`  
（可选）代理服务器的 URL，格式为 `scheme://userinfo@host:port`。要使用 HTTPS 代理，您必须使用 1.1.0 版本或更高版本的实例集预置插件。  <a name="nucleus-component-configuration-proxy-url-segments"></a>
+ `scheme` – 方案，必须是 `http` 或 `https`。
**重要**  
<a name="https-proxy-greengrass-nucleus-requirement"></a>Greengrass 核心设备必须运行 [Greengrass Nucleus](greengrass-nucleus-component.md) v2.5.0 或更高版本才能使用 HTTPS 代理。  
如果您配置 HTTPS 代理，则必须将代理服务器 CA 证书添加到核心设备的 Amazon 根 CA 证书中。有关更多信息，请参阅 [使核心设备信任 HTTPS 代理](configure-greengrass-core-v2.md#https-proxy-certificate-trust)。
+ `userinfo` –（可选）用户名和密码信息。如果您在 `url` 中指定此信息，则 Greengrass 核心设备将忽略 `username` 和 `password` 字段。
+ `host` – 代理服务器的主机名或 IP 地址。
+ `port` –（可选）端口号。如果您未指定端口，则 Greengrass 核心设备将使用以下默认值：
  + `http` – 80
  + `https` – 443

`proxyUserName`  
（可选）代理服务器进行身份验证时使用的用户名。

`proxyPassword`  
（可选）代理服务器进行身份验证时使用的用户名。

csrPath  
（可选）证书签名请求（CSR）文件的路径，用于通过 CSR 创建设备证书。有关更多信息，请参阅《 AWS IoT Core 开发人员指南》中的[通过声明进行预置](https://docs.aws.amazon.com/iot/latest/developerguide/provision-wo-cert.html#claim-based)。**

csrPrivateKey路径  
（可选，如果声明了 `csrPath`，则必须提供）用于生成 CSR 的私钥的路径。私钥必须已用于生成 CSR。有关更多信息，请参阅《AWS IoT Core 开发人员指南》中的[通过声明进行预置](https://docs.aws.amazon.com/iot/latest/developerguide/provision-wo-cert.html#claim-based)。**

certificatePath  
（可选）可保存下载设备证书的路径。

privateKeyPath  
（可选）可保存已下载设备私钥的路径。

# AWS IoT 实例集预置插件更改日志
<a name="fleet-provisioning-changelog"></a>

下表通过声明插件（`aws.greengrass.FleetProvisioningByClaim`）描述了每个版本的 AWS IoT 实例集预置的更改。


|  版本  |  更改  | 
| --- | --- | 
|  1.2.2  |  [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/zh_cn/greengrass/v2/developerguide/fleet-provisioning-changelog.html)  | 
|  1.2.1  |  [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/zh_cn/greengrass/v2/developerguide/fleet-provisioning-changelog.html)  | 
|  1.2.0  |  [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/zh_cn/greengrass/v2/developerguide/fleet-provisioning-changelog.html)  | 
|  1.1.0  |  [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/zh_cn/greengrass/v2/developerguide/fleet-provisioning-changelog.html)  | 
|  1.0.0  |  初始版本。  | 