

翻訳は機械翻訳により提供されています。提供された翻訳内容と英語版の間で齟齬、不一致または矛盾がある場合、英語版が優先します。

# クライアントデバイスをコアデバイスに接続する
<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 Discovery RESTful API](greengrass-discover-api.md)

## 要件
<a name="connect-client-devices-requirements"></a>

クライアントデバイスをコアデバイスに接続するには、以下を使用する必要があります。
+ コアデバイスで、[Greengrass nucleus](greengrass-nucleus-component.md) v2.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` – (オプション) このアクセス許可は、コアデバイスのネットワーク接続情報を AWS IoT Greengrass クラウドサービスに報告する [IP ディテクターコンポーネント](ip-detector-component.md)を使用するために必要です。
  + <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 nucleus](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 IoT Greengrass することを許可する AWS Identity and Access Management (IAM) AWS サービスロールです。このロールにより、 AWS IoT Greengrass はクライアントデバイスの ID を検証し、コアデバイス接続情報を管理できます。

このリージョンで [Greengrass サービスロール](greengrass-service-role.md)を設定したことがない場合は、このリージョン AWS アカウント の AWS IoT Greengrass に対して Greengrass サービスロールを に関連付ける必要があります。

[AWS IoT Greengrass コンソール](https://console.aws.amazon.com/greengrass)で**コアデバイス検出の設定**ページを使用すると、 によって Greengrass サービスロール AWS IoT Greengrass が自動的に設定されます。それ以外の場合は、[AWS IoT コンソール](https://console.aws.amazon.com/iot)または AWS IoT Greengrass API を使用して手動で設定できます。

このセクションでは、Greengrass サービスロールが設定されているかどうかを確認します。設定されていない場合は、このリージョン AWS アカウント の AWS IoT Greengrass に関連付ける新しい 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 service role]** (Greengrass サービスロール) セクションで、**[Current service role]** (現在のサービスロール) をクリックし、Greengrass サービスロールが関連付けられているかどうかを確認します。

      Greengrass サービスロールが関連付けられている場合、IP ディテクターコンポーネントを使用する要件を満たしています。「[AWS IoT モノのポリシーを設定する](#configure-iot-policy-requirement)」へ進んでください。

1. Greengrass サービスロールがこのリージョン AWS アカウント の AWS IoT Greengrass の に関連付けられていない場合は、Greengrass サービスロールを作成して関連付けます。以下の操作を実行します。

   1. [[IAM console]](https://console.aws.amazon.com/iam) (IAM コンソール) に入ります。

   1. [**Roles (ロール)**] を選択します。

   1. **[Create role]** (ロールの作成) を選択します。

   1. **[Create role]** (ロールの作成) ページで、次の手順を実行します。

      1. **[Trusted entity type]** (信頼できるエンティティタイプ) で、**[AWS のサービス]** を選択します。

      1. **[ユースケース]** の下にある **[その他の AWS のサービス のユースケース]** で、**[Greengrass]** を選択し、さらに **[Greengrass]** を選択します。このオプションは、このロールを引き受けることができる信頼されたエンティティ AWS IoT Greengrass として を追加することを指定します。

      1. [**次へ**] を選択します。

      1. **[Permissions policies]** (アクセス許可ポリシー) で、**AWSGreengrassResourceAccessRolePolicy** を選択し、ロールにアタッチします。

      1. [**次へ**] を選択します。

      1. **[Role name]** (ロール名) に、このロールの名前 (**Greengrass\_ServiceRole** など) を入力します。

      1. [**ロールの作成**] を選択してください。

   1. <a name="open-iot-console"></a>[AWS IoT コンソール](https://console.aws.amazon.com/iot)に移動します。

   1. ナビゲーションペインで **[設定]** を選択します。

   1. 左**[Greengrass service role]** (Greengrass サービスロール) セクションで、**[Attach role]** (ロールを添付する) を選択します。

   1. **[Update Greengrass service role]** (Greengrass サービスロールを更新する) モーダルで作成した IAM ロールを選択し、**[Attach role]** (ロールを割り当てる) を選択します。

#### 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.  AWS IoT Greengrass の 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` – (オプション) このアクセス許可は、コアデバイスのネットワーク接続情報を AWS IoT Greengrass クラウドサービスに報告する [IP ディテクターコンポーネント](ip-detector-component.md)を使用するために必要です。
+ <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 nucleus](greengrass-nucleus-component.md) v2.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)のナビゲーションメニューで、**[Core devices]** (コアデバイス) を選択します。

1. <a name="update-iot-policy-console-choose-core-device"></a>**[Core devices]** (コアデバイス) ページで、更新するコアデバイスを選択します。

1. <a name="update-iot-policy-console-choose-core-device-thing"></a>コアデバイスの詳細ページで、コアデバイスの **[Thing]** (モノ) へのリンクを選択します。このリンクをクリックすると、 AWS IoT コンソールの [thing details] (モノ詳細) ページが開きます。

1. <a name="update-iot-policy-console-choose-thing-security"></a>[thing details] (モノ詳細) ページで、**[Certificates]** (証明書) を選択します。

1. <a name="update-iot-policy-console-choose-thing-certificate"></a>**[Certificates]** (証明書) タブで、モノのアクティブな証明書を選択します。

1. <a name="update-iot-policy-console-choose-certificate-policies"></a>[certificate details] (証明書詳細) ページで、**[Policies]** (ポリシー) を選択します。

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)した場合、2 つの AWS IoT ポリシーがあります。存在する場合は、**GreengrassV2IoTThingPolicy** という名前のポリシーを選択することをお勧めします。クイックインストーラで作成するコアデバイスは、デフォルトでこのポリシー名を使用します。このポリシーにアクセス許可を追加すると、このポリシーを使用する他のコアデバイスにもこれらのアクセス許可が付与されます。

1. <a name="update-iot-policy-console-edit-policy"></a>[policy overview] (ポリシーの概要) で、**[Edit active version]** (アクティブなバージョンの編集) を選択します。

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` – (オプション) このアクセス許可は、コアデバイスのネットワーク接続情報を AWS IoT Greengrass クラウドサービスに報告する [IP ディテクターコンポーネント](ip-detector-component.md)を使用するために必要です。
   + <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 nucleus](greengrass-nucleus-component.md) v2.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>新しいポリシーバージョンをアクティブなバージョンとして設定するには、**[Policy version status]** (ポリシーバージョンのステータス) で、**[Set the edited version as the active version for this policy]** (編集したバージョンをこのポリシーのアクティブバージョンとして設定) を選択します。

1. <a name="update-iot-policy-console-save-policy"></a>**[Save as new version]** (新しいバージョンとして保存) を選択します。

#### 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 の末尾にある 16 進数の文字列です。`--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)した場合、2 つの 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` – (オプション) このアクセス許可は、コアデバイスのネットワーク接続情報を AWS IoT Greengrass クラウドサービスに報告する [IP ディテクターコンポーネント](ip-detector-component.md)を使用するために必要です。
   + <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 nucleus](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 nucleus](greengrass-nucleus-component.md) v2.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 ブローカー (モケット)](mqtt-broker-moquette-component.md) (`aws.greengrass.clientdevices.mqtt.Moquette`)

  軽量な MQTT ブローカーを実行するため、Moquette MQTT ブローカーコンポーネントをデプロイします。Moquette MQTT ブローカーは MQTT 3.1.1 に準拠しており、QoS 0、QoS 1、QoS 2、保持されたメッセージ、Last Will メッセージ、および永続サブスクリプションに対するローカルサポートが含まれます。

  使用するにあたり、このコンポーネントを設定する必要はありません。ただし、このコンポーネントが 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 以降による認証を使用する必要があります。

  クライアントデバイスとコアデバイス間の通信で MQTT 5.0 機能を使用するために、EMQX MQTT ブローカーコンポーネントをデプロイします。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 間でメッセージを中継します。クライアントデバイスを と同期 AWS IoT Core し、Greengrass コンポーネントからクライアントデバイスとやり取りするようにこのコンポーネントを設定します。

  このコンポーネントを使用するには、設定する必要があります。このコンポーネントがメッセージをリレーするトピックマッピングを指定する必要があります。詳細については、「[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 ディテクターコンポーネントをデプロイして、コアデバイスの MQTT ブローカーエンドポイントを AWS IoT Greengrass クラウドサービスに自動的にレポートします。ルータがコアデバイスに MQTT ブローカポートを転送する場合など、複雑なネットワーク設定がある場合には、このコンポーネントを使用することはできません。

  使用するにあたり、このコンポーネントを設定する必要はありません。
+ <a name="client-device-component-overview-shadow-manager"></a>[シャドウマネージャー](shadow-manager-component.md) (`aws.greengrass.ShadowManager`)
**注記**  
クライアントデバイスのシャドウを管理するには、[Greengrass nucleus](greengrass-nucleus-component.md) v2.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 ブローカーコンポーネントは、1 つだけにすることをお勧めします。[MQTT ブリッジ](mqtt-bridge-component.md)と [IP ディテクター](ip-detector-component.md)コンポーネントは、一度に 1 つの 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)