

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

# AWS IoT Greengrassのデバイス認証と認可
<a name="device-auth"></a>

 AWS IoT Greengrass 環境にあるデバイスは、認証に X.509 証明書を使用し、認可に AWS IoT ポリシーを使用します。証明書とポリシーにより、デバイスは、 AWS IoT Coreと AWS IoT Greengrassに安全に接続できます。

X.509 証明書は、X.509 パブリックキーインフラストラクチャ規格を使用して、パブリックキーと証明書内の ID を関連付けるための、デジタル証明書です。X.509 証明書は、証明機関 (CA) と呼ばれる信頼された団体によって発行されます。CA は、CA 証明書と呼ばれる 1 つ以上の特別な証明書を管理しており、この証明書は X.509 証明書を発行するために使用されます。証明機関にのみ CA 証明書に対するアクセス権限があります。

AWS IoT ポリシーは、 AWS IoT デバイスに対して許可される一連のオペレーションを定義します。具体的には、MQTT メッセージの発行やデバイスシャドウの取得など、 AWS IoT Core および AWS IoT Greengrass データプレーンオペレーションへのアクセスを許可および拒否します。

すべてのデバイスには、 AWS IoT Core レジストリにエントリと、 AWS IoT ポリシーがアタッチされたアクティブ化された X.509 証明書が必要です。デバイスは、次の 2 つのカテゴリに分類されます。
+ **Greengrass コアデバイス**

  Greengrass コアデバイスは、証明書と AWS IoT ポリシーを使用して AWS IoT Core と に接続します AWS IoT Greengrass。証明書とポリシーにより、 はコンポーネントと設定 AWS IoT Greengrass をコアデバイスにデプロイすることもできます。
+ **クライアントデバイス**

  MQTT クライアントデバイスは、証明書とポリシーを使用して AWS IoT Core および AWS IoT Greengrass サービスに接続します。これにより、クライアントデバイスは AWS IoT Greengrass クラウド検出を使用して Greengrass コアデバイスを検索して接続できます。クライアントデバイスは、同じ証明書を使用して AWS IoT Core クラウドサービスとコアデバイスに接続します。また、クライアントデバイスは、コアデバイスとの相互認証に検出情報を使用します。詳細については、「[ローカル IoT デバイスとやり取りする](interact-with-local-iot-devices.md)」を参照してください。

## X.509 証明書
<a name="x509-certificates"></a>

コアデバイスとクライアントデバイス間、およびデバイスと AWS IoT Core または 間の通信は認証 AWS IoT Greengrass する必要があります。この相互認証は、登録された X.509 デバイス証明書と暗号化キーに基づいています。

 AWS IoT Greengrass 環境では、デバイスは次の Transport Layer Security (TLS) 接続にパブリックキーとプライベートキーを持つ証明書を使用します。
+ インターネットに接続 AWS IoT Core し、 AWS IoT Greengrass インターネット経由で接続する Greengrass コアデバイスの AWS IoT クライアントコンポーネント。
+ インターネット AWS IoT Greengrass 経由で に接続してコアデバイスを検出するクライアントデバイス。
+ ローカルネットワークを介してグループ内の Greengrass デバイスに接続する Greengrass コアにある MQTT ブローカーコンポーネント。

AWS IoT Greengrass コアデバイスは Greengrass ルートフォルダに証明書を保存します。

### 認証機関 (CA) 証明書
<a name="ca-certificates"></a>

Greengrass コアデバイスとクライアントデバイスは、 AWS IoT Core および AWS IoT Greengrass サービスでの認証に使用されるルート CA 証明書をダウンロードします。[Amazon ルート CA 1](https://www.amazontrust.com/repository/AmazonRootCA1.pem) など、Amazon Trust Services (ATS) のルート CA 証明書を使用することをお勧めします。詳細については、「AWS IoT Core デベロッパーガイド」の「[サーバー認証用の CA 証明書](https://docs.aws.amazon.com/iot/latest/developerguide/server-authentication.html#server-authentication-certs)」を参照してください。

クライアントデバイスは Greengrass コアデバイスの CA 証明書もダウンロードします。この証明書は、相互認証中にコアデバイスにある MQTT サーバー証明書を検証するために使用されます。

### ローカル MQTT ブローカー上での証明書ローテーション
<a name="mqtt-certificate-expiration"></a>

[クライアントデバイスのサポート](interact-with-local-iot-devices.md)を有効にすると、Greengrass コアデバイスは、クライアントデバイスが相互認証のために使用するローカル MQTT サーバー証明書を生成します。この証明書は、コアデバイスが AWS IoT Greengrass クラウドに保存するコアデバイス CA 証明書によって署名されます。クライアントデバイスは、コアデバイスを検出したときにコアデバイスの CA 証明書を取得します。コアデバイスの CA 証明書は、コアデバイスに接続するときに、コアデバイスの MQTT サーバー証明書を検証するために使用します。コアデバイスの CA 証明書は 5 年後に期限切れになります。

MQTT サーバー証明書はデフォルトで 7 日ごとに期限切れとなりますが、この期間は 2～10 日の間に設定できます。この制限期間は、セキュリティのベストプラクティスに基づいています。このローテーションは、攻撃者が MQTT サーバー証明書と秘密キーを盗んで Greengrass コアデバイスを偽装する脅威を軽減するために役立ちます。

Greengrass コアデバイスは、有効期限が切れる 24 時間前に、MQTT サーバー証明書をローテーションします。Greengrass コアデバイスは新しい証明書を生成し、ローカル MQTT ブローカーを再起動します。これが実行されると、Greengrass コアデバイスに接続されているすべてのクライアントデバイスが切断されます。クライアントデバイスは、短時間待機した後に、Greengrass コアデバイスに再度接続できます。

## AWS IoT データプレーンオペレーションの ポリシー
<a name="iot-policies"></a>

 AWS IoT ポリシーを使用して、 AWS IoT Core および AWS IoT Greengrass データプレーンへのアクセスを許可します。 AWS IoT Core データプレーンは、デバイス、ユーザー、およびアプリケーションへの操作を提供します。これらのオペレーションには、 トピックに接続 AWS IoT Core してサブスクライブする機能が含まれます。 AWS IoT Greengrass データプレーンは、Greengrass デバイスのオペレーションを提供します。詳細については、「[AWS IoT Greengrass V2 ポリシーアクション](#greengrass-policy-actions)」を参照してください。これらの操作には、コンポーネントの依存関係を解決し、パブリックコンポーネントのアーティファクトをダウンロードする機能が含まれます。

 AWS IoT ポリシーは、[IAM ポリシー](https://docs.aws.amazon.com/IAM/latest/UserGuide/reference_policies_grammar.html#policies-grammar-json)に似た JSON ドキュメントです。これには、次のプロパティを指定する 1 つ以上のポリシーステートメントが含まれます。
+ `Effect`。アクセスモードを指定するプロパティで、`Allow` か `Deny` のどちらかになります。
+ `Action`。ポリシーによって許可または拒否されるアクションのリストです。
+ `Resource`。アクションが許可または拒否されるリソースのリストです。

AWS IoT ポリシーは、 をワイルドカード文字`*`としてサポートし、MQTT ワイルドカード文字 (`+` および `#`) をリテラル文字列として扱います。`*` ワイルドカードの詳細については、「*AWS Identity and Access Management ユーザーガイド*」の「[リソース ARN でのワイルドカードの使用](https://docs.aws.amazon.com/IAM/latest/UserGuide/reference_policies_elements_resource.html#reference_policies_elements_resource_wildcards)」を参照してください。

詳細については、「*AWS IoT Core デベロッパーガイド*」の「[AWS IoT policies](https://docs.aws.amazon.com/iot/latest/developerguide/iot-policies.html)」と「[AWS IoT policy actions](https://docs.aws.amazon.com/iot/latest/developerguide/iot-policy-actions.html)」を参照してください。

**重要**  
<a name="thing-policy-variable-not-supported"></a>[モノのポリシー変数](https://docs.aws.amazon.com/iot/latest/developerguide/thing-policy-variables.html) (`iot:Connection.Thing.*`) は コアデバイスまたは Greengrass データプレーン操作用の AWS IoT ポリシーではサポートされていません。代わりに、ワイルドカードを使用して名前が似ている複数のデバイスと一致させることができます。たとえば、`MyGreengrassDevice*` と指定すると `MyGreengrassDevice1`、`MyGreengrassDevice2` などと一致します。

**注記**  
AWS IoT Core では、モノのグループに AWS IoT ポリシーをアタッチして、デバイスのグループのアクセス許可を定義できます。モノのグループポリシーは、 AWS IoT Greengrass データプレーンオペレーションへのアクセスを許可しません。 AWS IoT Greengrass データプレーンオペレーションへのモノのアクセスを許可するには、モノの証明書にアタッチする AWS IoT ポリシーに アクセス許可を追加します。

### AWS IoT Greengrass V2 ポリシーアクション
<a name="greengrass-policy-actions"></a>

AWS IoT Greengrass V2 では、Greengrass コアデバイスとクライアントデバイスがポリシーで使用できる以下の AWS IoT ポリシーアクションを定義します。ポリシーアクションのリソースを指定するには、リソースの Amazon リソースネーム (ARN) を使用することができます。コアデバイスのアクション

`greengrass:GetComponentVersionArtifact`  <a name="greengrass-get-component-version-artifact-action"></a>
パブリックコンポーネントアーティファクトまたは Lambda コンポーネントアーティファクトのダウンロードに使用する、署名付き URL を取得するアクセス許可を付与します。  
このアクセス許可は、コアデバイスがパブリックコンポーネントまたはアーティファクトを持つ Lambda を指定するデプロイを受信したときに評価されます。コアデバイスにアーティファクトがすでに存在する場合、アーティファクトが再度ダウンロードされることはありません。  
リソースタイプ: `componentVersion`  
リソース ARN 形式: `arn:aws:greengrass:region:account-id:components:component-name:versions:component-version`

`greengrass:ResolveComponentCandidates`  <a name="greengrass-resolve-component-candidates-action"></a>
デプロイのコンポーネント、バージョン、およびプラットフォームの要件を満たすコンポーネントのリストを特定するためのアクセス許可を付与します。要件が競合する場合、または要件を満たすコンポーネントが存在しない場合は、この操作はエラーを返し、デバイスでのデプロイが失敗します。  
このアクセス許可は、コアデバイスがコンポーネントを指定するデプロイを受信したときに評価されます。  
リソースタイプ: なし  
リソース ARN 形式: `*`

`greengrass:GetDeploymentConfiguration`  <a name="greengrass-get-deployment-configuration-action"></a>
大規模なデプロイドキュメントをダウンロードするための署名付き URL を取得するアクセス許可を付与します。  
このアクセス許可は、コアデバイスが 7 KB (デプロイがモノをターゲットとする場合) または 31 KB (デプロイがモノグループをターゲットとする場合) を超えるデプロイを指定しているデプロイを受信したときに評価されます。デプロイドキュメントには、コンポーネント設定、デプロイポリシー、およびデプロイメタデータが含まれます。詳細については、「[AWS IoT Greengrass コンポーネントをデバイスにデプロイする](manage-deployments.md)」を参照してください。  
この機能は、[Greengrass nucleus コンポーネント](greengrass-nucleus-component.md)の v2.3.0 以降に利用できます。  
リソースタイプ: なし  
リソース ARN 形式: `*`

`greengrass:ListThingGroupsForCoreDevice`  <a name="greengrass-list-thing-groups-for-core-device-action"></a>
コアデバイスのモノグループ階層を取得するアクセス許可を付与します。  
このアクセス許可は、コアデバイスがデプロイを受信するときにチェックされます AWS IoT Greengrass。コアデバイスはこのアクションを使用して、前回のデプロイ以降にモノグループから削除されていないかどうかを識別します。コアデバイスがモノグループから削除されており、そのモノグループがコアデバイスへのデプロイターゲットである場合、コアデバイスはそのデプロイでインストールされたコンポーネントを削除します。  
この機能は、[Greengrass nucleus コンポーネント](greengrass-nucleus-component.md)の v2.5.0 以降で使用されます。  
リソースタイプ: `thing` (コアデバイス)  
リソース ARN 形式: `arn:aws:iot:region:account-id:thing/core-device-thing-name`

`greengrass:VerifyClientDeviceIdentity`  <a name="greengrass-verify-client-device-identity-action"></a>
コアデバイスに接続するクライアントデバイスの ID を確認するためのアクセス許可を付与します。  
このアクセス許可は、コアデバイスが[クライアントデバイス認証コンポーネント](client-device-auth-component.md)を実行し、クライアントデバイスから MQTT 接続を受信したときに評価されます。クライアントデバイスは、この AWS IoT デバイス証明書を提示します。その後、コアデバイスはクライアントデバイスの ID を検証するため、デバイス証明書を AWS IoT Greengrass クラウドサービスに送信します。詳細については、「[ローカル IoT デバイスとやり取りする](interact-with-local-iot-devices.md)」を参照してください。  
リソースタイプ: なし  
リソース ARN 形式: `*`

`greengrass:VerifyClientDeviceIoTCertificateAssociation`  <a name="greengrass-verify-client-device-iot-certificate-association-action"></a>
クライアントデバイスが AWS IoT 証明書と関連付けられているかどうかを検証するためのアクセス許可を付与します。  
このアクセス許可は、コアデバイスが[クライアントデバイス認証コンポーネント](client-device-auth-component.md)を実行し、クライアントデバイスに MQTT 経由での接続を承認したときに評価されます。詳細については、「[ローカル IoT デバイスとやり取りする](interact-with-local-iot-devices.md)」を参照してください。  
コアデバイスがこのオペレーションを使用するには、[Greengrass サービスロール](greengrass-service-role.md)が に関連付けられ AWS アカウント 、 アクセス`iot:DescribeCertificate`許可が付与されている必要があります。
リソースタイプ: `thing` (クライアントデバイス)  
リソース ARN 形式: `arn:aws:iot:region:account-id:thing/client-device-thing-name`

`greengrass:PutCertificateAuthorities`  <a name="greengrass-put-certificate-authorities-action"></a>
コアデバイスを検証するためにクライアントデバイスがダウンロードできる認証機関 (CA) 証明書をアップロードするためのアクセス許可を付与します。  
このアクセス許可は、コアデバイスが[クライアントデバイス認証コンポーネント](client-device-auth-component.md)をインストールして実行したときに評価されます。このコンポーネントは、ローカル認証機関を作成し、この操作を使用して CA 証明書をアップロードします。クライアントデバイスは、[Discover](#greengrass-discover-action) 操作を使用して接続可能なコアデバイスを検出するときに、これらの CA 証明書をダウンロードします。クライアントデバイスがコアデバイス上の MQTT ブローカーに接続するときに、これらの CA 証明書を使用してコアデバイスの ID を検証します。詳細については、「[ローカル IoT デバイスとやり取りする](interact-with-local-iot-devices.md)」を参照してください。  
リソースタイプ: なし  
ARN 形式: `*`

`greengrass:GetConnectivityInfo`  <a name="greengrass-get-connectivity-info-action"></a>
コアデバイスの接続情報を取得するアクセス許可を付与します。この情報は、クライアントデバイスがコアデバイスに接続する方法を説明するものです。  
このアクセス許可は、コアデバイスが[クライアントデバイス認証コンポーネント](client-device-auth-component.md)をインストールして実行したときに評価されます。このコンポーネントは、接続情報を使用して有効な CA 証明書を生成し、[PutCertificateAuthories](#greengrass-put-certificate-authorities-action) オペレーションを使用して AWS IoT Greengrass クラウドサービスにアップロードします。クライアントデバイスは、これらの CA 証明書を使用して、コアデバイスの ID を検証します。詳細については、「[ローカル IoT デバイスとやり取りする](interact-with-local-iot-devices.md)」を参照してください。  
 AWS IoT Greengrass コントロールプレーンでこのオペレーションを使用して、コアデバイスの接続情報を表示することもできます。詳細については、「AWS IoT Greengrass V1 API リファレンス」の「[GetConnectivityInfo](https://docs.aws.amazon.com/greengrass/v1/apireference/getconnectivityinfo-get.html)」を参照してください。  
リソースタイプ: `thing` (コアデバイス)  
リソース ARN 形式: `arn:aws:iot:region:account-id:thing/core-device-thing-name`

`greengrass:UpdateConnectivityInfo`  <a name="greengrass-update-connectivity-info-action"></a>
コアデバイスの接続情報を更新するためのアクセス許可を付与します。この情報は、クライアントデバイスがコアデバイスに接続する方法を説明するものです。  
このアクセス許可は、コアデバイスが [IP 検出コンポーネント](ip-detector-component.md)を実行したときに評価されます。このコンポーネントは、クライアントデバイスがローカルネットワーク上のコアデバイスに接続するために必要な情報を特定します。次に、このコンポーネントはこのオペレーションを使用して接続情報を AWS IoT Greengrass クラウドサービスにアップロードするため、クライアントデバイスは [Discover ](#greengrass-discover-action)オペレーションでこの情報を取得できます。詳細については、「[ローカル IoT デバイスとやり取りする](interact-with-local-iot-devices.md)」を参照してください。  
 AWS IoT Greengrass コントロールプレーンでこのオペレーションを使用して、コアデバイスの接続情報を手動で更新することもできます。詳細については、「AWS IoT Greengrass V1 API リファレンス」の「[UpdateConnectivityInfo](https://docs.aws.amazon.com/greengrass/v1/apireference/updateconnectivityinfo-put.html)」を参照してください。  
リソースタイプ: `thing` (コアデバイス)  
リソース ARN 形式: `arn:aws:iot:region:account-id:thing/core-device-thing-name`クライアントデバイスのアクション

`greengrass:Discover`  <a name="greengrass-discover-action"></a>
クライアントデバイスが接続できるコアデバイスの接続情報を検出するためのアクセス許可を付与します。この情報は、クライアントデバイスがコアデバイスに接続する方法を説明するものです。クライアントデバイスは、[BatchAssociateClientDeviceWithCoreDevice](https://docs.aws.amazon.com/greengrass/v2/APIReference/API_BatchAssociateClientDeviceWithCoreDevice.html) 操作を使用して関連付けたコアデバイスのみを検出することができます。詳細については、「[ローカル IoT デバイスとやり取りする](interact-with-local-iot-devices.md)」を参照してください。  
リソースタイプ: `thing` (クライアントデバイス)  
リソース ARN 形式: `arn:aws:iot:region:account-id:thing/client-device-thing-name`

## コアデバイスの AWS IoT ポリシーを更新する
<a name="update-core-device-iot-policy"></a>

 AWS IoT Greengrass および AWS IoT コンソールまたは AWS IoT API を使用して、コアデバイスの AWS IoT ポリシーを表示および更新できます。

**注記**  
[AWS IoT Greengrass Core ソフトウェアインストーラを使用してリソースをプロビジョニング](quick-installation.md)した場合、コアデバイスには、すべての AWS IoT Greengrass アクション () へのアクセスを許可する AWS IoT ポリシーがあります`greengrass:*`。コアデバイスが使用するアクションのみにアクセスを制限するには、次の手順を実行します。

### コアデバイスの AWS IoT ポリシーの確認と更新 (コンソール)
<a name="update-core-device-iot-policy-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. ポリシーを確認し、必要に応じてアクセス許可を追加、削除、または編集します。

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="update-core-device-iot-policy-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
   ```

   完了すると、ポリシードキュメントは[コアデバイスの最小 AWS IoT ポリシー](#greengrass-core-minimal-iot-policy)のようになります。

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
   }
   ```

## AWS IoT Greengrass V2 コアデバイスの最小 AWS IoT ポリシー
<a name="greengrass-core-minimal-iot-policy"></a>

**重要**  
[Greengrass nucleus コンポーネントの](greengrass-nucleus-component.md)それ以降のバージョンでは、最小限の AWS IoT ポリシーに対する追加のアクセス許可が必要です。追加の許可を付与するにあたり、[コアデバイスの AWS IoT ポリシーを更新する](#update-core-device-iot-policy)必要が生じる場合があります。  
Greengrass nucleus v2.5.0 以降を実行しているコアデバイスでは、モノグループからコアデバイスを削除するときにコンポーネントをアンインストールするにあたり、`greengrass:ListThingGroupsForCoreDevice` アクセス許可を使用します。
Greengrass nucleus v2.3.0 以降を実行しているコアデバイスでは、大規模なデプロイ設定ドキュメントをサポートするにあたり、`greengrass:GetDeploymentConfiguration` アクセス許可を使用します。

次のポリシーの例には、コアデバイスの基本的な Greengrass 機能をサポートするのに必要な最小限のアクションが含まれています。
+ `Connect` ポリシーには、コアデバイスのモノ名の後に `*` ワイルドカードが含まれます (例: `core-device-thing-name*`)。コアデバイスは同じデバイス証明書を使用して複数の同時サブスクリプションを行いますが AWS IoT Core、接続内のクライアント ID がコアデバイスのモノの名前と完全に一致しない場合があります。最初の 50 件のサブスクリプション以降、コアデバイスは `core-device-thing-name#number` をクライアント ID として使用します。ここにある `number` は、サブスクリプションが 50 件増えるごと増分されます。例えば、`MyCoreDevice` という名のコアデバイスが 150 件の同時サブスクリプションを作成する場合には、次のクライアント ID を使用します。
  + サブスクリプション 1 から 50: `MyCoreDevice`
  + サブスクリプション 51 から 100: `MyCoreDevice#2`
  + サブスクリプション 101 から 150: `MyCoreDevice#3`

  ワイルドカードを使用すると、サフィックスのあるクライアント ID を使用する場合に、コアデバイスが接続できるようになります。
+ ポリシーには、シャドウステータスに使用されるトピックを含む、コアデバイスがメッセージを発行、サブスクライブし、メッセージを受信できる、MQTT トピックとトピックのフィルターが一覧表示されます。 AWS IoT Core Greengrass コンポーネントとクライアントデバイス間のメッセージ交換をサポートするには、許可するトピックとトピックフィルターを指定します。詳細については、「AWS IoT Core デベロッパーガイド」の「[パブリッシュ/サブスクライブポリシーの例](https://docs.aws.amazon.com/iot/latest/developerguide/pub-sub-policy.html)」を参照してください。
+ このポリシーは、テレメトリデータに関する次のトピックにパブリッシュするためのアクセス許可を付与します。

  ```
  $aws/things/core-device-thing-name/greengrass/health/json
  ```

  テレメトリを無効にしたコアデバイスでは、このアクセス許可を外すことができます。詳細については、「[AWS IoT Greengrass コアデバイスからシステムヘルステレメトリデータを収集する](telemetry.md)」を参照してください。
+ このポリシーは、ロールエイリアスを通じて IAM AWS IoT ロールを引き受けるアクセス許可を付与します。コアデバイスは、トークン交換ロールと呼ばれるこのロールを使用して、 AWS リクエストの認証に使用できる AWS 認証情報を取得します。詳細については、「[コアデバイスが AWS サービスとやり取りできるように認可する](device-service-role.md)」を参照してください。

   AWS IoT Greengrass Core ソフトウェアをインストールするときは、このアクセス許可のみを含む 2 番目の AWS IoT ポリシーを作成してアタッチします。このアクセス許可をコアデバイスのプライマリ AWS IoT ポリシーに含めると、他の AWS IoT ポリシーをデタッチおよび削除できます。

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

****  

```
{
    "Version":"2012-10-17",		 	 	 
    "Statement": [
        {
            "Effect": "Allow",
            "Action": [
                "iot:Connect"
            ],
            "Resource": "arn:aws:iot:us-east-1:123456789012:client/core-device-thing-name*"
        },
        {
            "Effect": "Allow",
            "Action": [
                "iot:Receive",
                "iot:Publish"
            ],
            "Resource": [
                "arn:aws:iot:us-east-1:123456789012:topic/$aws/things/core-device-thing-name/greengrass/health/json",
                "arn:aws:iot:us-east-1:123456789012:topic/$aws/things/core-device-thing-name/greengrassv2/health/json",
                "arn:aws:iot:us-east-1:123456789012:topic/$aws/things/core-device-thing-name/jobs/*",
                "arn:aws:iot:us-east-1:123456789012:topic/$aws/things/core-device-thing-name/shadow/*"
            ]
        },
        {
            "Effect": "Allow",
            "Action": [
                "iot:Subscribe"
            ],
            "Resource": [
                "arn:aws:iot:us-east-1:123456789012:topicfilter/$aws/things/core-device-thing-name/jobs/*",
                "arn:aws:iot:us-east-1:123456789012:topicfilter/$aws/things/core-device-thing-name/shadow/*"
            ]
        },
        {
            "Effect": "Allow",
            "Action": "iot:AssumeRoleWithCertificate",
            "Resource": "arn:aws:iot:us-east-1:123456789012:rolealias/token-exchange-role-alias-name"
        },
        {
            "Effect": "Allow",
            "Action": [
                "greengrass:GetComponentVersionArtifact",
                "greengrass:ResolveComponentCandidates",
                "greengrass:GetDeploymentConfiguration",
                "greengrass:ListThingGroupsForCoreDevice"
            ],
            "Resource": "*"
        }
    ]
}
```

------

## クライアントデバイスをサポートする最小 AWS IoT ポリシー
<a name="client-device-support-minimal-iot-policy"></a>

次のポリシー例には、コアデバイス上のクライアントデバイスとの対話をサポートするために必要となる最低限のアクションが含まれています。クライアントデバイスをサポートするには、基本オペレーションの最小 AWS IoT ポリシーに加えて、コアデバイスにこのポリシーのアクセス許可が必要です。 [AWS IoT](#greengrass-core-minimal-iot-policy)
+ このポリシーにより、コアデバイスは自身の接続情報を更新できるようになります。このアクセス許可 (`greengrass:UpdateConnectivityInfo`) は、コアデバイスに [IP 検出コンポーネント](ip-detector-component.md)をデプロイする場合にのみ必要となります。

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

****  

```
{
    "Version":"2012-10-17",		 	 	 
    "Statement": [
        {
            "Effect": "Allow",
            "Action": [
                "iot:Publish"
            ],
            "Resource": [
                "arn:aws:iot:us-east-1:123456789012:topic/$aws/things/core-device-thing-name-gci/shadow/get"
            ]
        },
        {
            "Effect": "Allow",
            "Action": [
                "iot:Subscribe"
            ],
            "Resource": [
                "arn:aws:iot:us-east-1:123456789012:topicfilter/$aws/things/core-device-thing-name-gci/shadow/update/delta",
                "arn:aws:iot:us-east-1:123456789012:topicfilter/$aws/things/core-device-thing-name-gci/shadow/get/accepted"
            ]
        },
        {
            "Effect": "Allow",
            "Action": [
                "iot:Receive"
            ],
            "Resource": [
                "arn:aws:iot:us-east-1:123456789012:topic/$aws/things/core-device-thing-name-gci/shadow/update/delta",
                "arn:aws:iot:us-east-1:123456789012:topic/$aws/things/core-device-thing-name-gci/shadow/get/accepted"
            ]
        },
        {
            "Effect": "Allow",
            "Action": [
                "greengrass:PutCertificateAuthorities",
                "greengrass:VerifyClientDeviceIdentity"
            ],
            "Resource": "*"
        },
        {
            "Effect": "Allow",
            "Action": [
                "greengrass:VerifyClientDeviceIoTCertificateAssociation"
            ],
            "Resource": "arn:aws:iot:us-east-1:123456789012:thing/*"
        },
        {
            "Effect": "Allow",
            "Action": [
                "greengrass:GetConnectivityInfo",
                "greengrass:UpdateConnectivityInfo"
            ],
            "Resource": [
                "arn:aws:iot:us-east-1:123456789012:thing/core-device-thing-name"
            ]
        }
    ]
}
```

------

## クライアントデバイスの最小 AWS IoT ポリシー
<a name="client-device-minimal-iot-policy"></a>

次のポリシー例には、クライアントデバイスが MQTT 経由で接続して通信するコアデバイスを検出するために必要となる最低限のアクションが含まれています。クライアントデバイスの AWS IoT ポリシーには、デバイスが関連する Greengrass コアデバイスの接続情報を検出できるようにする `greengrass:Discover`アクションを含める必要があります。`Resource` セクションには、Greengrass コアデバイスの ARN ではなく、クライアントデバイスの Amazon リソースネーム (ARN) を指定します。
+ このポリシーは、すべての MQTT トピックでの通信を許可します。セキュリティのベストプラクティスに沿うように、`iot:Publish`、`iot:Subscribe`、および `iot:Receive` のアクセス許可は、ユースケースに必要とされる最小限のトピックセットのみに制限してください。
+ このポリシーにより、モノはすべての AWS IoT モノのコアデバイスを検出できます。ベストプラクティスに従うには、アクセス`greengrass:Discover`許可をクライアントデバイスの AWS IoT モノ、または AWS IoT モノのセットに一致するワイルドカードに制限します。
**重要**  
<a name="thing-policy-variable-not-supported"></a>[モノのポリシー変数](https://docs.aws.amazon.com/iot/latest/developerguide/thing-policy-variables.html) (`iot:Connection.Thing.*`) は コアデバイスまたは Greengrass データプレーン操作用の AWS IoT ポリシーではサポートされていません。代わりに、ワイルドカードを使用して名前が似ている複数のデバイスと一致させることができます。たとえば、`MyGreengrassDevice*` と指定すると `MyGreengrassDevice1`、`MyGreengrassDevice2` などと一致します。
+ Greengrass コアデバイスがクライアントデバイスのシャドウ同期オペレーションを処理するため、クライアントデバイスの AWS IoT ポリシーには通常`iot:GetThingShadow`、`iot:UpdateThingShadow`、、または `iot:DeleteThingShadow`アクションのアクセス許可は必要ありません。コアデバイスがクライアントデバイスシャドウを処理できるようにするには、コアデバイスの AWS IoT ポリシーでこれらのアクションが許可されていること、および `Resource`セクションにクライアントデバイスの ARNs が含まれていることを確認します。

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

****  

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

------