

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

# 將用戶端裝置連接至核心裝置
<a name="connect-client-devices"></a>

您可以設定*雲端探索*，將用戶端裝置連線至核心裝置。當您設定雲端探索時，用戶端裝置可以連線至 AWS IoT Greengrass 雲端服務，以擷取其可連線之核心裝置的相關資訊。然後，用戶端裝置可以嘗試連線到每個核心裝置，直到成功連線為止。

若要使用雲端探索，您必須執行下列動作：
+ 將用戶端裝置與其可連線的核心裝置建立關聯。
+ 指定用戶端裝置可以連線到每個核心裝置的 MQTT 代理程式端點。
+ 將元件部署至支援用戶端裝置的核心裝置。

  您也可以部署選用元件來執行下列動作：
  + 在用戶端裝置、Greengrass 元件和 AWS IoT Core 雲端服務之間轉送訊息。
  + 為您自動管理核心裝置 MQTT 代理程式端點。
  + 管理本機用戶端裝置影子，並將影子與 AWS IoT Core 雲端服務同步。

您也必須檢閱和更新核心裝置 AWS IoT 的政策，以確認其具有連線用戶端裝置所需的許可。如需詳細資訊，請參閱[需求](#connect-client-devices-requirements)。

設定雲端探索之後，您可以測試用戶端裝置與核心裝置之間的通訊。如需詳細資訊，請參閱[測試用戶端裝置通訊](test-client-device-communications.md)。

**Topics**
+ [需求](#connect-client-devices-requirements)
+ [用戶端裝置支援的 Greengrass 元件](#cloud-discovery-components)
+ [設定雲端探索 （主控台）](#configure-cloud-discovery-console)
+ [設定雲端探索 (AWS CLI)](#configure-cloud-discovery-cli)
+ [關聯用戶端裝置](associate-client-devices.md)
+ [離線時驗證用戶端](offline-authentication.md)
+ [管理核心裝置端點](manage-core-device-endpoints.md)
+ [選擇 MQTT 代理程式](choose-local-mqtt-broker.md)
+ [使用 MQTT 代理程式將用戶端裝置連接至 AWS IoT Greengrass Core 裝置](connecting-to-mqtt.md)
+ [測試用戶端裝置通訊](test-client-device-communications.md)
+ [Greengrass 探索 RESTful API](greengrass-discover-api.md)

## 需求
<a name="connect-client-devices-requirements"></a>

若要將用戶端裝置連接至核心裝置，您必須具有下列項目：
+ 核心裝置必須執行 [Greengrass 核 v](greengrass-nucleus-component.md)2.2.0 或更新版本。
+ 在核心裝置運作 AWS 帳戶 的 AWS 區域中，與 AWS IoT Greengrass 相關聯的 Greengrass 服務角色。如需詳細資訊，請參閱[設定 Greengrass 服務角色](#configure-service-role-requirement)。
+ 核心裝置的 AWS IoT 政策必須允許下列許可：<a name="core-device-iot-policy-client-device-permissions"></a>
  + <a name="core-device-iot-policy-client-device-permissions-putcertificateauthorities"></a>`greengrass:PutCertificateAuthorities`
  + <a name="core-device-iot-policy-client-device-permissions-verifyclientdeviceidentity"></a>`greengrass:VerifyClientDeviceIdentity`
  + <a name="core-device-iot-policy-client-device-permissions-verifyclientdeviceiotcertificateassociation"></a>`greengrass:VerifyClientDeviceIoTCertificateAssociation`
  + <a name="core-device-iot-policy-client-device-permissions-getconnectivityinfo"></a>`greengrass:GetConnectivityInfo`
  + <a name="core-device-iot-policy-client-device-permissions-updateconnectivityinfo"></a>`greengrass:UpdateConnectivityInfo` – （選用） 需要此許可才能使用 [IP 偵測器元件](ip-detector-component.md)，該元件會將核心裝置的網路連線資訊報告給 AWS IoT Greengrass 雲端服務。
  + <a name="core-device-iot-policy-client-device-permissions-shadows"></a>`iot:GetThingShadow`、 `iot:UpdateThingShadow`和 `iot:DeleteThingShadow` – （選用） 需要這些許可才能使用[影子管理員元件](shadow-manager-component.md)來同步用戶端裝置影子 AWS IoT Core。此功能需要 [Greengrass 核](greengrass-nucleus-component.md) v2.6.0 或更新版本、陰影管理員 v2.2.0 或更新版本，以及 [MQTT 橋接](mqtt-bridge-component.md)器 v2.2.0 或更新版本。

  如需詳細資訊，請參閱[設定 AWS IoT 物件政策](#configure-iot-policy-requirement)。
**注意**  
如果您在[安裝 AWS IoT Greengrass Core 軟體](install-greengrass-core-v2.md)時使用預設 AWS IoT 政策，則核心裝置具有允許存取所有 AWS IoT Greengrass 動作 AWS IoT 的政策 (`greengrass:*`)。
+ AWS IoT 可以做為用戶端裝置連線的物件。如需詳細資訊，請參閱《 *AWS IoT Core 開發人員指南*》中的[建立 AWS IoT 資源](https://docs.aws.amazon.com/iot/latest/developerguide/create-iot-resources.html)。
+ 用戶端裝置必須使用用戶端 ID 連線。用戶端 ID 是物件名稱。不會接受其他用戶端 ID。
+ 每個用戶端裝置的 AWS IoT 政策都必須允許 `greengrass:Discover`許可。如需詳細資訊，請參閱[用戶端裝置的最低 AWS IoT 政策](device-auth.md#client-device-minimal-iot-policy)。

**Topics**
+ [設定 Greengrass 服務角色](#configure-service-role-requirement)
+ [設定 AWS IoT 物件政策](#configure-iot-policy-requirement)

### 設定 Greengrass 服務角色
<a name="configure-service-role-requirement"></a>

<a name="greengrass-service-role-intro"></a>Greengrass 服務角色是 AWS Identity and Access Management (IAM) 服務角色，授權 代表您 AWS IoT Greengrass 從 AWS 服務存取資源。此角色可讓 AWS IoT Greengrass 驗證用戶端裝置的身分，並管理核心裝置連線資訊。

如果您先前尚未在此區域中設定 [Greengrass 服務角色](greengrass-service-role.md)，則必須在此區域中 AWS IoT Greengrass 為 建立 Greengrass 服務角色與 AWS 帳戶 的關聯。

當您使用[AWS IoT Greengrass 主控台](https://console.aws.amazon.com/greengrass)中的**設定核心裝置探索**頁面時， 會為您 AWS IoT Greengrass 設定 Greengrass 服務角色。否則，您可以使用[AWS IoT 主控台](https://console.aws.amazon.com/iot)或 AWS IoT Greengrass API 手動設定。

在本節中，您將檢查 Greengrass 服務角色是否已設定。如果未設定，您會在此 AWS 帳戶 區域中為 建立新的 Greengrass AWS IoT Greengrass 服務角色，以與 建立關聯。

#### 設定 Greengrass 服務角色 （主控台）
<a name="configure-service-role-requirement-console"></a>

1. 檢查 Greengrass 服務角色是否 AWS 帳戶 與此區域中 AWS IoT Greengrass 的 相關聯。請執行下列操作：

   1. <a name="open-iot-console"></a>導覽至 [AWS IoT 主控台](https://console.aws.amazon.com/iot)。

   1. 在導覽窗格中，選擇**設定**。

   1. 在 **Greengrass 服務角色**區段中，尋找**目前的服務角色**，以查看 Greengrass 服務角色是否相關聯。

      如果您有相關聯的 Greengrass 服務角色，則需符合此要求才能使用 IP 偵測器元件。跳至 [設定 AWS IoT 物件政策](#configure-iot-policy-requirement)。

1. 如果 Greengrass 服務角色與此 AWS 帳戶 區域中 AWS IoT Greengrass 的 沒有關聯，請建立 Greengrass 服務角色並將其關聯。請執行下列操作：

   1. 導覽至 [IAM 主控台](https://console.aws.amazon.com/iam)。

   1. 選擇**角色**。

   1. 選擇建**立角色**。

   1. 在**建立角色**頁面上，執行下列動作：

      1. 在**信任的實體類型**下，選擇 **AWS 服務**。

      1. 在**使用案例**、**其他 的使用案例 AWS 服務**下，選擇 **Greengrass**，然後選取 **Greengrass**。此選項指定 將 新增 AWS IoT Greengrass 為可擔任此角色的信任實體。

      1. 選擇**下一步**。

      1. 在**許可政策**下，選取要**AWSGreengrassResourceAccessRolePolicy**連接至角色的 。

      1. 選擇**下一步**。

      1. 在**角色名稱**中，為您的角色輸入名稱，例如 **Greengrass\$1ServiceRole**。

      1. 選擇建**立角色**。

   1. <a name="open-iot-console"></a>導覽至 [AWS IoT 主控台](https://console.aws.amazon.com/iot)。

   1. 在導覽窗格中，選擇**設定**。

   1. 在 **Greengrass 服務角色**區段中，選擇**連接角色**。

   1. 在**更新 Greengrass 服務角色**模態中，選取您建立的 IAM 角色，然後選擇**連接角色**。

#### 設定 Greengrass 服務角色 (AWS CLI)
<a name="configure-service-role-requirement-cli"></a>

1. 檢查 Greengrass 服務角色是否 AWS 帳戶 與此區域中 AWS IoT Greengrass 的 相關聯。

   ```
   aws greengrassv2 get-service-role-for-account
   ```

   如果 Greengrass 服務角色相關聯，操作會傳回包含角色相關資訊的回應。

   如果您有相關聯的 Greengrass 服務角色，則需符合此要求才能使用 IP 偵測器元件。跳至 [設定 AWS IoT 物件政策](#configure-iot-policy-requirement)。

1. 如果 Greengrass 服務角色與此 AWS 帳戶 區域中 AWS IoT Greengrass 的 沒有關聯，請建立 Greengrass 服務角色並將其關聯。請執行下列操作：

   1. <a name="create-greengrass-service-role-step-create-role"></a>建立具有信任政策的角色， AWS IoT Greengrass 允許 擔任該角色。此範例會建立名為 `Greengrass_ServiceRole` 的角色，但您可以使用不同的名稱。我們建議您也在信任政策中包含 `aws:SourceArn`和 `aws:SourceAccount`全域條件內容金鑰，以協助防止*混淆代理人*安全問題。條件內容索引鍵會限制存取，只允許來自指定帳戶和 Greengrass 工作區的請求。如需有關混淆代理人問題的詳細資訊，請參閱 [預防跨服務混淆代理人](cross-service-confused-deputy-prevention.md)。

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

      ```
      aws iam create-role --role-name Greengrass_ServiceRole --assume-role-policy-document '{
        "Version": "2012-10-17",		 	 	 
        "Statement": [
          {
            "Effect": "Allow",
            "Principal": {
              "Service": "greengrass.amazonaws.com"
            },
            "Action": "sts:AssumeRole",
            "Condition": {
              "ArnLike": {
                "aws:SourceArn": "arn:aws:greengrass:region:account-id:*"
              },
              "StringEquals": {
                "aws:SourceAccount": "account-id"
              }
            }
          }
        ]
      }'
      ```

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

      ```
      aws iam create-role --role-name Greengrass_ServiceRole --assume-role-policy-document "{\\"Version\\":\\"2012-10-17		 	 	 \\",\\"Statement\\":[{\\"Effect\\":\\"Allow\\",\\"Principal\\":{\\"Service\\":\\"greengrass.amazonaws.com\\"},\\"Action\\":\\"sts:AssumeRole\\",\\"Condition\\":{\\"ArnLike\\":{\\"aws:SourceArn\\":\\"arn:aws:greengrass:region:account-id:*\\"},\\"StringEquals\\":{\\"aws:SourceAccount\\":\\"account-id\\"}}}]}"
      ```

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

      ```
      aws iam create-role --role-name Greengrass_ServiceRole --assume-role-policy-document '{
        "Version": "2012-10-17",		 	 	 
        "Statement": [
          {
            "Effect": "Allow",
            "Principal": {
              "Service": "greengrass.amazonaws.com"
            },
            "Action": "sts:AssumeRole",
            "Condition": {
              "ArnLike": {
                "aws:SourceArn": "arn:aws:greengrass:region:account-id:*"
              },
              "StringEquals": {
                "aws:SourceAccount": "account-id"
              }
            }
          }
        ]
      }'
      ```

------

   1. <a name="create-greengrass-service-role-step-copy-role-arn"></a>從輸出中的角色中繼資料，複製角色 ARN。您使用 ARN 將角色與您的帳戶相關聯。

   1. <a name="create-greengrass-service-role-step-attach-policy"></a>將 `AWSGreengrassResourceAccessRolePolicy` 政策連接到角色。

      ```
      aws iam attach-role-policy --role-name Greengrass_ServiceRole --policy-arn arn:aws:iam::aws:policy/service-role/AWSGreengrassResourceAccessRolePolicy
      ```

   1. 將 Greengrass 服務角色與 AWS IoT Greengrass 建立關聯 AWS 帳戶。將 *role-arn* 取代為服務角色的 ARN。

      ```
      aws greengrassv2 associate-service-role-to-account --role-arn role-arn
      ```

      如果成功， 操作會傳回下列回應。

      ```
      {
        "associatedAt": "timestamp"
      }
      ```

### 設定 AWS IoT 物件政策
<a name="configure-iot-policy-requirement"></a>

核心裝置使用 X.509 裝置憑證來授權連線 AWS。您可以將 AWS IoT 政策連接至裝置憑證，以定義核心裝置的許可。如需詳細資訊，請參閱[AWS IoT 資料平面操作的 政策](device-auth.md#iot-policies)及[支援用戶端裝置的最低 AWS IoT 政策](device-auth.md#client-device-support-minimal-iot-policy)。

若要將用戶端裝置連線至核心裝置，核心裝置的 AWS IoT 政策必須允許下列許可：<a name="core-device-iot-policy-client-device-permissions"></a>
+ <a name="core-device-iot-policy-client-device-permissions-putcertificateauthorities"></a>`greengrass:PutCertificateAuthorities`
+ <a name="core-device-iot-policy-client-device-permissions-verifyclientdeviceidentity"></a>`greengrass:VerifyClientDeviceIdentity`
+ <a name="core-device-iot-policy-client-device-permissions-verifyclientdeviceiotcertificateassociation"></a>`greengrass:VerifyClientDeviceIoTCertificateAssociation`
+ <a name="core-device-iot-policy-client-device-permissions-getconnectivityinfo"></a>`greengrass:GetConnectivityInfo`
+ <a name="core-device-iot-policy-client-device-permissions-updateconnectivityinfo"></a>`greengrass:UpdateConnectivityInfo` – （選用） 需要此許可才能使用 [IP 偵測器元件](ip-detector-component.md)，該元件會將核心裝置的網路連線資訊報告給 AWS IoT Greengrass 雲端服務。
+ <a name="core-device-iot-policy-client-device-permissions-shadows"></a>`iot:GetThingShadow`、 `iot:UpdateThingShadow`和 `iot:DeleteThingShadow` – （選用） 使用[影子管理員元件](shadow-manager-component.md)同步用戶端裝置影子時需要這些許可 AWS IoT Core。此功能需要 [Greengrass 核 v](greengrass-nucleus-component.md)2.6.0 或更新版本、陰影管理員 v2.2.0 或更新版本，以及 [MQTT 橋接](mqtt-bridge-component.md)器 v2.2.0 或更新版本。

在本節中，您將檢閱核心裝置 AWS IoT 的政策，並新增任何缺少的必要許可。如果您使用 [AWS IoT Greengrass Core 軟體安裝程式佈建資源](quick-installation.md)，您的核心裝置具有允許存取所有 AWS IoT Greengrass 動作 () AWS IoT 的政策`greengrass:*`。在此情況下，只有在您計劃部署影子管理員元件以與裝置影子同步時，才必須更新 AWS IoT 政策 AWS IoT Core。否則，您可以略過本節。

#### 設定 AWS IoT 物件政策 （主控台）
<a name="configure-iot-policy-requirement-console"></a>

1. <a name="update-iot-policy-console-open-greengrass-console"></a>在[AWS IoT Greengrass 主控台](https://console.aws.amazon.com/greengrass)導覽功能表中，選擇**核心裝置**。

1. <a name="update-iot-policy-console-choose-core-device"></a>在**核心裝置**頁面上，選擇要更新的核心裝置。

1. <a name="update-iot-policy-console-choose-core-device-thing"></a>在核心裝置詳細資訊頁面上，選擇核心裝置**物件**的連結。此連結會在 主控台中 AWS IoT 開啟物件詳細資訊頁面。

1. <a name="update-iot-policy-console-choose-thing-security"></a>在物件詳細資訊頁面上，選擇**憑證**。

1. <a name="update-iot-policy-console-choose-thing-certificate"></a>在**憑證**索引標籤中，選擇物件的作用中憑證。

1. <a name="update-iot-policy-console-choose-certificate-policies"></a>在憑證詳細資訊頁面上，選擇**政策**。

1. <a name="update-iot-policy-console-choose-policy"></a>在**政策**索引標籤中，選擇要檢閱和更新 AWS IoT 的政策。您可以將必要的許可新增至連接到核心裝置作用中憑證的任何政策。
**注意**  <a name="quick-installation-iot-policies-note"></a>
如果您使用 [AWS IoT Greengrass Core 軟體安裝程式佈建資源](quick-installation.md)，則有兩個 AWS IoT 政策。如果**GreengrassV2IoTThingPolicy**存在，我們建議您選擇名為 的政策。您使用快速安裝程式建立的核心裝置預設會使用此政策名稱。如果您將許可新增至此政策，您也會將這些許可授予使用此政策的其他核心裝置。

1. <a name="update-iot-policy-console-edit-policy"></a>在政策概觀中，選擇**編輯作用中版本**。

1. 檢閱必要許可的政策，並新增任何缺少的必要許可。<a name="core-device-iot-policy-client-device-permissions"></a>
   + <a name="core-device-iot-policy-client-device-permissions-putcertificateauthorities"></a>`greengrass:PutCertificateAuthorities`
   + <a name="core-device-iot-policy-client-device-permissions-verifyclientdeviceidentity"></a>`greengrass:VerifyClientDeviceIdentity`
   + <a name="core-device-iot-policy-client-device-permissions-verifyclientdeviceiotcertificateassociation"></a>`greengrass:VerifyClientDeviceIoTCertificateAssociation`
   + <a name="core-device-iot-policy-client-device-permissions-getconnectivityinfo"></a>`greengrass:GetConnectivityInfo`
   + <a name="core-device-iot-policy-client-device-permissions-updateconnectivityinfo"></a>`greengrass:UpdateConnectivityInfo` – （選用） 需要此許可才能使用 [IP 偵測器元件](ip-detector-component.md)，該元件會將核心裝置的網路連線資訊報告給 AWS IoT Greengrass 雲端服務。
   + <a name="core-device-iot-policy-client-device-permissions-shadows"></a>`iot:GetThingShadow`、 `iot:UpdateThingShadow`和 `iot:DeleteThingShadow` – （選用） 使用[影子管理員元件](shadow-manager-component.md)同步用戶端裝置影子時需要這些許可 AWS IoT Core。此功能需要 [Greengrass 核 v](greengrass-nucleus-component.md)2.6.0 或更新版本、陰影管理員 v2.2.0 或更新版本，以及 [MQTT 橋接](mqtt-bridge-component.md)器 v2.2.0 或更新版本。

1. （選用） 若要允許核心裝置與 同步陰影 AWS IoT Core，請將下列陳述式新增至政策。如果您計劃與用戶端裝置影子互動，但未與之同步 AWS IoT Core，請略過此步驟。將 *region* 和 *account-id* 取代為您使用的區域和您的 AWS 帳戶 號碼。
   + 此範例陳述式允許存取所有物件的裝置影子。若要遵循最佳安全實務，您可以限制只能存取您連接至核心裝置的核心裝置和用戶端裝置。如需詳細資訊，請參閱[支援用戶端裝置的最低 AWS IoT 政策](device-auth.md#client-device-support-minimal-iot-policy)。

   ```
   {
     "Effect": "Allow",
     "Action": [
       "iot:GetThingShadow",
       "iot:UpdateThingShadow",
       "iot:DeleteThingShadow"
     ],
     "Resource": [
       "arn:aws:iot:region:account-id:thing/*"
     ]
   }
   ```

   新增此陳述式後，政策文件看起來可能會類似下列範例。

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

****  

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

------

1. <a name="update-iot-policy-console-set-as-active-version"></a>若要將新的政策版本設定為作用中版本，請在**政策版本狀態**下，選取**將編輯的版本設定為此政策的作用中版本**。

1. <a name="update-iot-policy-console-save-policy"></a>選擇**儲存為新版本**。

#### 設定 AWS IoT 物件政策 (AWS CLI)
<a name="configure-iot-policy-requirement-cli"></a>

1. <a name="update-iot-policy-cli-list-thing-principals"></a>列出核心裝置 AWS IoT 物件的主體。物件主體可以是 X.509 裝置憑證或其他識別符。執行下列命令，並以核心裝置的名稱取代 *MyGreengrassCore*。

   ```
   aws iot list-thing-principals --thing-name MyGreengrassCore
   ```

   操作會傳回回應，列出核心裝置的物件主體。

   ```
   {
       "principals": [
           "arn:aws:iot:us-west-2:123456789012:cert/certificateId"
       ]
   }
   ```

1. <a name="update-iot-policy-cli-identify-active-certificate"></a>識別核心裝置的作用中憑證。執行下列命令，並將 *certificateId* 取代為上一個步驟中每個憑證的 ID，直到您找到作用中憑證為止。憑證 ID 是憑證 ARN 結尾的十六進位字串。`--query` 引數指定 僅輸出憑證的狀態。

   ```
   aws iot describe-certificate --certificate-id certificateId --query 'certificateDescription.status'
   ```

   操作會以字串的形式傳回憑證狀態。例如，如果憑證處於作用中狀態，此操作會輸出 `"ACTIVE"`。

1. <a name="update-iot-policy-cli-list-certificate-policies"></a>列出連接到憑證 AWS IoT 的政策。執行下列命令，並將憑證 ARN 取代為憑證的 ARN。

   ```
   aws iot list-principal-policies --principal arn:aws:iot:us-west-2:123456789012:cert/certificateId
   ```

   操作會傳回回應，列出連接到憑證 AWS IoT 的政策。

   ```
   {
       "policies": [
           {
               "policyName": "GreengrassTESCertificatePolicyMyGreengrassCoreTokenExchangeRoleAlias",
               "policyArn": "arn:aws:iot:us-west-2:123456789012:policy/GreengrassTESCertificatePolicyMyGreengrassCoreTokenExchangeRoleAlias"
           },
           {
               "policyName": "GreengrassV2IoTThingPolicy",
               "policyArn": "arn:aws:iot:us-west-2:123456789012:policy/GreengrassV2IoTThingPolicy"
           }
       ]
   }
   ```

1. <a name="update-iot-policy-cli-choose-policy"></a>選擇要檢視和更新的政策。
**注意**  <a name="quick-installation-iot-policies-note"></a>
如果您使用 [AWS IoT Greengrass Core 軟體安裝程式佈建資源](quick-installation.md)，則有兩個 AWS IoT 政策。如果**GreengrassV2IoTThingPolicy**存在，我們建議您選擇名為 的政策。您使用快速安裝程式建立的核心裝置預設會使用此政策名稱。如果您將許可新增至此政策，您也會將這些許可授予使用此政策的其他核心裝置。

1. <a name="update-iot-policy-cli-get-policy-document"></a>取得政策的文件。執行下列命令，並將 *GreengrassV2IoTThingPolicy* 取代為政策的名稱。

   ```
   aws iot get-policy --policy-name GreengrassV2IoTThingPolicy
   ```

   操作會傳回回應，其中包含政策的文件和政策的其他資訊。政策文件是序列化為字串的 JSON 物件。

   ```
   {
       "policyName": "GreengrassV2IoTThingPolicy",
       "policyArn": "arn:aws:iot:us-west-2:123456789012:policy/GreengrassV2IoTThingPolicy",
       "policyDocument": "{\
     \\"Version\\": \\"2012-10-17		 	 	 \\",\
     \\"Statement\\": [\
       {\
         \\"Effect\\": \\"Allow\\",\
         \\"Action\\": [\
                   \\"iot:Connect\\",\
                   \\"iot:Publish\\",\
                   \\"iot:Subscribe\\",\
                   \\"iot:Receive\\",\
                   \\"greengrass:*\\"\
   ],\
         \\"Resource\\": \\"*\\"\
       }\
     ]\
   }",
       "defaultVersionId": "1",
       "creationDate": "2021-02-05T16:03:14.098000-08:00",
       "lastModifiedDate": "2021-02-05T16:03:14.098000-08:00",
       "generationId": "f19144b798534f52c619d44f771a354f1b957dfa2b850625d9f1d0fde530e75f"
   }
   ```

1. <a name="update-iot-policy-cli-create-policy-document-file"></a>使用線上轉換器或其他工具將政策文件字串轉換為 JSON 物件，然後將其儲存到名為 的檔案`iot-policy.json`。

   例如，如果您已安裝 [jq](https://stedolan.github.io/jq/) 工具，您可以執行下列命令來取得政策文件、將其轉換為 JSON 物件，並將政策文件儲存為 JSON 物件。

   ```
   aws iot get-policy --policy-name GreengrassV2IoTThingPolicy --query 'policyDocument' | jq fromjson >> iot-policy.json
   ```

1. 檢閱必要許可的政策，並新增任何缺少的必要許可。

   <a name="nano-command-intro-existing-file"></a>例如，在以 Linux 為基礎的系統上，您可以執行下列命令來使用 GNU nano 來開啟檔案。

   ```
   nano iot-policy.json
   ```<a name="core-device-iot-policy-client-device-permissions"></a>
   + <a name="core-device-iot-policy-client-device-permissions-putcertificateauthorities"></a>`greengrass:PutCertificateAuthorities`
   + <a name="core-device-iot-policy-client-device-permissions-verifyclientdeviceidentity"></a>`greengrass:VerifyClientDeviceIdentity`
   + <a name="core-device-iot-policy-client-device-permissions-verifyclientdeviceiotcertificateassociation"></a>`greengrass:VerifyClientDeviceIoTCertificateAssociation`
   + <a name="core-device-iot-policy-client-device-permissions-getconnectivityinfo"></a>`greengrass:GetConnectivityInfo`
   + <a name="core-device-iot-policy-client-device-permissions-updateconnectivityinfo"></a>`greengrass:UpdateConnectivityInfo` – （選用） 需要此許可才能使用 [IP 偵測器元件](ip-detector-component.md)，該元件會將核心裝置的網路連線資訊報告給 AWS IoT Greengrass 雲端服務。
   + <a name="core-device-iot-policy-client-device-permissions-shadows"></a>`iot:GetThingShadow`、 `iot:UpdateThingShadow`和 `iot:DeleteThingShadow` – （選用） 需要這些許可才能使用[影子管理員元件](shadow-manager-component.md)來同步用戶端裝置影子 AWS IoT Core。此功能需要 [Greengrass 核](greengrass-nucleus-component.md) v2.6.0 或更新版本、陰影管理員 v2.2.0 或更新版本，以及 [MQTT 橋接](mqtt-bridge-component.md)器 v2.2.0 或更新版本。

1. <a name="update-iot-policy-cli-create-policy-version"></a>將變更儲存為政策的新版本。執行下列命令，並以政策的名稱取代 *GreengrassV2IoTThingPolicy*。

   ```
   aws iot create-policy-version --policy-name GreengrassV2IoTThingPolicy --policy-document file://iot-policy.json --set-as-default
   ```

   如果成功， 操作會傳回類似下列範例的回應。

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

## 用戶端裝置支援的 Greengrass 元件
<a name="cloud-discovery-components"></a>

**重要**  <a name="client-device-support-nucleus-requirement"></a>
核心裝置必須執行 [Greengrass 核 v](greengrass-nucleus-component.md)2.2.0 或更新版本，以支援用戶端裝置。

若要讓用戶端裝置能夠與核心裝置連線和通訊，您可以將下列 Greengrass 元件部署至核心裝置：
+ <a name="client-device-component-overview-client-device-auth"></a>[用戶端裝置身分驗證](client-device-auth-component.md) (`aws.greengrass.clientdevices.Auth`)

  部署用戶端裝置身分驗證元件，以驗證用戶端裝置並授權用戶端裝置動作。此元件可讓您的 AWS IoT 物件連線至核心裝置。

  此元件需要一些組態才能使用它。您必須指定用戶端裝置的群組，以及每個群組獲授權執行的操作，例如透過 MQTT 連線和通訊。如需詳細資訊，請參閱[用戶端裝置驗證元件組態](client-device-auth-component.md#client-device-auth-component-configuration)。
+ <a name="client-device-component-overview-mqtt-broker-moquette"></a>[MQTT 3.1.1 代理程式 (Moquette)](mqtt-broker-moquette-component.md) (`aws.greengrass.clientdevices.mqtt.Moquette`)

  部署 Moquette MQTT 代理程式元件以執行輕量型 MQTT 代理程式。Moquette MQTT 代理程式符合 MQTT 3.1.1，並包含 QoS 0、QoS 1、QoS 2、保留訊息、最後遺囑訊息和持久性訂閱的本機支援。

  您不需要設定此元件即可使用它。不過，您可以設定此元件操作 MQTT 代理程式的連接埠。根據預設，它會使用連接埠 8883。
+ <a name="client-device-component-overview-mqtt-broker-emqx"></a>[MQTT 5 代理程式 (EMQX)](mqtt-broker-emqx-component.md) (`aws.greengrass.clientdevices.mqtt.EMQX`)
**注意**  
若要使用 EMQX MQTT 5 代理程式，您必須使用 [Greengrass nucleus](greengrass-nucleus-component.md) v2.6.0 或更新版本，以及用戶端裝置驗證 v2.2.0 或更新版本。

  部署 EMQX MQTT 代理程式元件，以在用戶端裝置和核心裝置之間使用 MQTT 5.0 功能進行通訊。EMQX MQTT 代理程式符合 MQTT 5.0，包括對工作階段和訊息過期間隔、使用者屬性、共用訂閱、主題別名等的支援。

  您不需要設定此元件即可使用它。不過，您可以設定此元件操作 MQTT 代理程式的連接埠。根據預設，它會使用連接埠 8883。
+ <a name="client-device-component-overview-mqtt-bridge"></a>[MQTT 橋接器](mqtt-bridge-component.md) (`aws.greengrass.clientdevices.mqtt.Bridge`)

  （選用） 部署 MQTT 橋接器元件，以在用戶端裝置 （本機 MQTT)、本機發佈/訂閱和 AWS IoT Core MQTT 之間轉送訊息。設定此元件以同步用戶端裝置與 Greengrass 元件中的用戶端裝置， AWS IoT Core 並與之互動。

  此元件需要使用組態。您必須指定此元件轉送訊息的主題映射。如需詳細資訊，請參閱 [MQTT 橋接器元件組態](mqtt-bridge-component.md#mqtt-bridge-component-configuration)。
+ <a name="client-device-component-overview-ip-detector"></a>[IP 偵測器](ip-detector-component.md) (`aws.greengrass.clientdevices.IPDetector`)

  （選用） 部署 IP 偵測器元件，以自動向 AWS IoT Greengrass 雲端服務報告核心裝置的 MQTT 代理程式端點。如果您有複雜的網路設定，例如路由器將 MQTT 代理程式連接埠轉送至核心裝置的網路設定，則無法使用此元件。

  您不需要設定此元件即可使用它。
+ <a name="client-device-component-overview-shadow-manager"></a>[Shadow 管理員](shadow-manager-component.md) (`aws.greengrass.ShadowManager`)
**注意**  
若要管理用戶端裝置影子，您必須使用 [Greengrass 核 v](greengrass-nucleus-component.md)2.6.0 或更新版本、影子管理員 v2.2.0 或更新版本，以及 [MQTT 橋接](mqtt-bridge-component.md)器 v2.2.0 或更新版本。

  （選用） 部署影子管理員元件以管理核心裝置上的用戶端裝置影子。Greengrass 元件可以取得、更新和刪除用戶端裝置影子，以與用戶端裝置互動。您也可以設定影子管理員元件，將用戶端裝置影子與 AWS IoT Core 雲端服務同步。

  若要將此元件與用戶端裝置影子搭配使用，您必須設定 MQTT 橋接器元件，在用戶端裝置與使用本機發佈/訂閱的影子管理員之間轉送訊息。否則，此元件不需要組態即可使用，但需要組態才能同步裝置陰影。

**注意**  <a name="note-deploy-one-mqtt-broker"></a>
我們建議您僅部署一個 MQTT 代理程式元件。[MQTT 橋接](mqtt-bridge-component.md)器和 [IP 偵測器](ip-detector-component.md)元件一次只能使用一個 MQTT 代理程式元件。如果您部署多個 MQTT 代理程式元件，則必須將其設定為使用不同的連接埠。

## 設定雲端探索 （主控台）
<a name="configure-cloud-discovery-console"></a>

您可以使用 AWS IoT Greengrass 主控台來關聯用戶端裝置、管理核心裝置端點，以及部署元件以啟用用戶端裝置支援。如需詳細資訊，請參閱[步驟 2：啟用用戶端裝置支援](client-devices-tutorial.md#enable-client-device-support)。

## 設定雲端探索 (AWS CLI)
<a name="configure-cloud-discovery-cli"></a>

您可以使用 AWS Command Line Interface (AWS CLI) 來關聯用戶端裝置、管理核心裝置端點，以及部署元件以啟用用戶端裝置支援。如需詳細資訊，請參閱下列內容：
+ [管理用戶端裝置關聯 (AWS CLI)](associate-client-devices.md#manage-client-device-associations-cli)
+ [管理核心裝置端點](manage-core-device-endpoints.md)
+ [AWS提供的用戶端裝置元件](client-device-components.md)
+ [建立部署](create-deployments.md)