

本文為英文版的機器翻譯版本，如內容有任何歧義或不一致之處，概以英文版為準。

# 設定 Greengrass 核心裝置的 AWS IoT 機群佈建
<a name="fleet-provisioning-setup"></a>

若要[使用機群佈建安裝 AWS IoT Greengrass 核心軟體](fleet-provisioning.md)，您必須先在 中設定下列資源 AWS 帳戶。這些資源可讓裝置向 註冊， AWS IoT 並以 Greengrass 核心裝置的形式運作。請遵循本節中的步驟，在 中建立和設定這些資源 AWS 帳戶。
+ 權杖交換 IAM 角色，核心裝置會使用該角色來授權對 AWS 服務的呼叫。
+ 指向字符交換角色 AWS IoT 的角色別名。
+ （選用） 政策，核心裝置會使用該 AWS IoT 政策來授權對 AWS IoT 和 AWS IoT Greengrass 服務的呼叫。此 AWS IoT 政策必須允許指向字符交換 AWS IoT 角色的角色別名`iot:AssumeRoleWithCertificate`許可。

  您可以針對機群中的所有核心裝置使用單一 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，以確認裝置具有佈建的許可。如需詳細資訊，請參閱[《 開發人員指南》中的預先佈建掛](https://docs.aws.amazon.com/iot/latest/developerguide/pre-provisioning-hook.html)鉤。 *AWS IoT Core *
+ 您連接到佈建宣告憑證 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 登入資料，允許裝置與 互動 AWS IoT、將日誌傳送至 Amazon CloudWatch Logs，以及從 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 複製到 檔案。
     + 以您在上一節中建立 AWS IoT 的角色別名 ARN 取代`iot:AssumeRoleWithCertificate`資源。

------
#### [ 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 提供受管政策 [AWSIoTThingsRegistration](https://console.aws.amazon.com/iam/home#/policies/arn:aws:iam::aws:policy/service-role/AWSIoTThingsRegistration)，允許存取佈建裝置時 AWS IoT 可能使用的所有許可。您可以使用此受管政策，或建立自訂政策，針對您的使用案例縮小受管政策中的許可範圍。

在本節中，您會建立允許 AWS IoT 佈建裝置資源的 IAM 角色，並建立使用該 IAM 角色的機群佈建範本。

**建立機群佈建範本**

1. 建立 AWS IoT 可在 中佈建資源的 IAM 角色 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. 檢閱 [AWSIoTThingsRegistration](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 複製到 檔案。
      + 將每個*區域*執行個體取代為您設定機群佈建 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 核心裝置。您可以在製造期間將宣告憑證和私有金鑰嵌入裝置，或在安裝 AWS IoT Greengrass 核心軟體之前將憑證和金鑰複製到裝置。如需詳細資訊，請參閱[使用 AWS IoT 機群佈建安裝 AWS IoT Greengrass 核心軟體](fleet-provisioning.md)。