AWS IoT Greengrass のデバイス認証と認可 - AWS IoT Greengrass

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

AWS IoT Greengrass のデバイス認証と認可

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 デバイスとやり取りする」を参照してください。

X.509 証明書

コアデバイスとクライアントデバイス間の通信、およびデバイスと 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) 証明書

Greengrass コアデバイスとクライアントデバイスが、AWS IoT Core および AWS IoT Greengrass サービスとの認証に使用されるルート CA 証明書をダウンロードします。Amazon ルート CA 1 など、Amazon Trust Services (ATS) のルート CA 証明書を使用することをお勧めします。詳細については、「AWS IoT Core デベロッパーガイド」の「サーバー認証用の CA 証明書」を参照してください。

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

ローカル MQTT ブローカー上での証明書ローテーション

クライアントデバイスのサポートを有効にすると、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 ポリシー

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

AWS IoT ポリシーは、IAM ポリシーに似た JSON ドキュメントです。これには、次のプロパティを指定する 1 つ以上のポリシーステートメントが含まれます。

  • Effect。アクセスモードを指定するプロパティで、AllowDeny のどちらかになります。

  • Action。ポリシーによって許可または拒否されるアクションのリストです。

  • Resource。アクションが許可または拒否されるリソースのリストです。

AWS IoT ポリシーでは * をワイルドカード文字としてサポートし、MQTT ワイルドカード文字 (+ および #) をリテラル文字列として処理します。「*」ワイルドカードの詳細については、「AWS Identity and Access Management ユーザーガイド」の「リソース ARN でのワイルドカードの使用」を参照してください。

詳細については、「AWS IoT Core デベロッパーガイド」の「AWS IoT ポリシー」と「AWS IoT ポリシーアクション」を参照してください。

重要

モノのポリシー変数 (iot:Connection.Thing.*) は コアデバイスまたは Greengrass データプレーン操作用の AWS IoT ポリシーではサポートされていません。代わりに、ワイルドカードを使用して名前が似ている複数のデバイスと一致させることができます。たとえば、MyGreengrassDevice* と指定すると MyGreengrassDevice1MyGreengrassDevice2 などと一致します。

注記

AWS IoT Core では AWS IoT ポリシーをモノのグループにアタッチして、デバイスのグループの権限を定義することができます。モノのグループポリシーでは、AWS IoT Greengrass データプレーンオペレーションへのアクセスは許可されていません。モノが AWS IoT Greengrass のデータプレーンオペレーションにアクセスするには、モノの証明書にアタッチする AWS IoT ポリシーにアクセス許可を追加する必要があります。

AWS IoT Greengrass V2 ポリシーアクション

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

コアデバイスのアクション
greengrass:GetComponentVersionArtifact

パブリックコンポーネントアーティファクトまたは Lambda コンポーネントアーティファクトのダウンロードに使用する、署名付き URL を取得するアクセス許可を付与します。

このアクセス許可は、コアデバイスがパブリックコンポーネントまたはアーティファクトを持つ Lambda を指定するデプロイを受信したときに評価されます。コアデバイスにアーティファクトがすでに存在する場合、アーティファクトが再度ダウンロードされることはありません。

リソースタイプ: componentVersion

リソース ARN 形式: arn:aws:greengrass:region:account-id:components:component-name:versions:component-version

greengrass:ResolveComponentCandidates

デプロイのコンポーネント、バージョン、およびプラットフォームの要件を満たすコンポーネントのリストを特定するためのアクセス許可を付与します。要件が競合する場合、または要件を満たすコンポーネントが存在しない場合は、この操作はエラーを返し、デバイスでのデプロイが失敗します。

このアクセス許可は、コアデバイスがコンポーネントを指定するデプロイを受信したときに評価されます。

リソースタイプ: なし

リソース ARN 形式: *

greengrass:GetDeploymentConfiguration

大規模なデプロイドキュメントをダウンロードするための署名付き URL を取得するアクセス許可を付与します。

このアクセス許可は、コアデバイスが 7 KB (デプロイがモノをターゲットとする場合) または 31 KB (デプロイがモノグループをターゲットとする場合) を超えるデプロイを指定しているデプロイを受信したときに評価されます。デプロイドキュメントには、コンポーネント設定、デプロイポリシー、およびデプロイメタデータが含まれます。詳細については、「デバイスに AWS IoT Greengrass コンポーネントのデプロイ」を参照してください。

この機能は、Greengrass nucleus コンポーネントの v2.3.0 以降に利用できます。

リソースタイプ: なし

リソース ARN 形式: *

greengrass:ListThingGroupsForCoreDevice

コアデバイスのモノグループ階層を取得するアクセス許可を付与します。

このアクセス許可は、コアデバイスが AWS IoT Greengrass からデプロイを受信するときに確認されます。コアデバイスはこのアクションを使用して、前回のデプロイ以降にモノグループから削除されていないかどうかを識別します。コアデバイスがモノグループから削除されており、そのモノグループがコアデバイスへのデプロイターゲットである場合、コアデバイスはそのデプロイでインストールされたコンポーネントを削除します。

この機能は、Greengrass nucleus コンポーネントの v2.5.0 以降で使用されます。

リソースタイプ: thing (コアデバイス)

リソース ARN 形式: arn:aws:iot:region:account-id:thing/core-device-thing-name

greengrass:VerifyClientDeviceIdentity

コアデバイスに接続するクライアントデバイスの ID を確認するためのアクセス許可を付与します。

このアクセス許可は、コアデバイスがクライアントデバイス認証コンポーネントを実行し、クライアントデバイスから MQTT 接続を受信したときに評価されます。クライアントデバイスは、この AWS IoT デバイス証明書を提示します。その後、コアデバイスはクライアントデバイスの ID を検証するため、デバイス証明書を AWS IoT Greengrass クラウドサービスに送信します。詳細については、「ローカル IoT デバイスとやり取りする」を参照してください。

リソースタイプ: なし

リソース ARN 形式: *

greengrass:VerifyClientDeviceIoTCertificateAssociation

クライアントデバイスが AWS IoT 証明書と関連付けられているかどうかを検証するためのアクセス許可を付与します。

このアクセス許可は、コアデバイスがクライアントデバイス認証コンポーネントを実行し、クライアントデバイスに MQTT 経由での接続を承認したときに評価されます。詳細については、「ローカル IoT デバイスとやり取りする」を参照してください。

注記

コアデバイスがこの操作を使用するには、Greengrass サービスロールを AWS アカウント に関連づけ、iot:DescribeCertificate の権限を許可する必要があります。

リソースタイプ: thing (クライアントデバイス)

リソース ARN 形式: arn:aws:iot:region:account-id:thing/client-device-thing-name

greengrass:PutCertificateAuthorities

コアデバイスを検証するためにクライアントデバイスがダウンロードできる認証機関 (CA) 証明書をアップロードするためのアクセス許可を付与します。

このアクセス許可は、コアデバイスがクライアントデバイス認証コンポーネントをインストールして実行したときに評価されます。このコンポーネントは、ローカル認証機関を作成し、この操作を使用して CA 証明書をアップロードします。クライアントデバイスは、Discover 操作を使用して接続可能なコアデバイスを検出するときに、これらの CA 証明書をダウンロードします。クライアントデバイスがコアデバイス上の MQTT ブローカーに接続するときに、これらの CA 証明書を使用してコアデバイスの ID を検証します。詳細については、「ローカル IoT デバイスとやり取りする」を参照してください。

リソースタイプ: なし

ARN 形式: *

greengrass:GetConnectivityInfo

コアデバイスの接続情報を取得するアクセス許可を付与します。この情報は、クライアントデバイスがコアデバイスに接続する方法を説明するものです。

このアクセス許可は、コアデバイスがクライアントデバイス認証コンポーネントをインストールして実行したときに評価されます。このコンポーネントは、接続情報を使用して有効な CA 証明書を生成し、 PutCertificateAuthoriesオペレーションで AWS IoT Greengrass クラウドサービスにアップロードします。クライアントデバイスは、これらの CA 証明書を使用して、コアデバイスの ID を検証します。詳細については、「ローカル IoT デバイスとやり取りする」を参照してください。

また、この操作を AWS IoT Greengrass コントロールプレーンで使用して、コアデバイスの接続情報を表示することもできます。詳細については、AWS IoT Greengrass V1 API リファレンスの「GetConnectivityInfo」を参照してください。

リソースタイプ: thing (コアデバイス)

リソース ARN 形式: arn:aws:iot:region:account-id:thing/core-device-thing-name

greengrass:UpdateConnectivityInfo

コアデバイスの接続情報を更新するためのアクセス許可を付与します。この情報は、クライアントデバイスがコアデバイスに接続する方法を説明するものです。

このアクセス許可は、コアデバイスがIP 検出コンポーネントを実行したときに評価されます。このコンポーネントは、クライアントデバイスがローカルネットワーク上のコアデバイスに接続するために必要な情報を特定します。その後、このコンポーネントはこの操作を使用して、接続情報を AWS IoT Greengrass クラウドサービスにアップロードし、クライアントデバイスが Discover 操作でこの情報を取得できるようにします。詳細については、「ローカル IoT デバイスとやり取りする」を参照してください。

また、この操作を AWS IoT Greengrass コントロールプレーンで使用して、コアデバイスの接続情報を手動で更新することもできます。詳細については、AWS IoT Greengrass V1 API リファレンスの「UpdateConnectivityInfo」を参照してください。

リソースタイプ: thing (コアデバイス)

リソース ARN 形式: arn:aws:iot:region:account-id:thing/core-device-thing-name

クライアントデバイスのアクション
greengrass:Discover

クライアントデバイスが接続できるコアデバイスの接続情報を検出するためのアクセス許可を付与します。この情報は、クライアントデバイスがコアデバイスに接続する方法を説明するものです。クライアントデバイスは、 BatchAssociateClientDeviceWithCoreDeviceオペレーションを使用して、関連付けたコアデバイスのみを検出できます。詳細については、「ローカル IoT デバイスとやり取りする」を参照してください。

リソースタイプ: thing (クライアントデバイス)

リソース ARN 形式: arn:aws:iot:region:account-id:thing/client-device-thing-name

コアデバイスの AWS IoT ポリシーを更新する

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

注記

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

  1. AWS IoT Greengrass コンソールのナビゲーションメニューで、[Core devices] (コアデバイス) を選択します。

  2. [Core devices] (コアデバイス) ページで、更新するコアデバイスを選択します。

  3. コアデバイスの詳細ページで、コアデバイスの [Thing] (モノ) へのリンクを選択します。このリンクをクリックすると、AWS IoT コンソールの [thing details] (モノ詳細) ページが開きます。

  4. [thing details] (モノ詳細) ページで、[Certificates] (証明書) を選択します。

  5. [Certificates] (証明書) タブで、モノのアクティブな証明書を選択します。

  6. [certificate details] (証明書詳細) ページで、[Policies] (ポリシー) を選択します。

  7. [Policies] (ポリシー) タブで、確認して更新する AWS IoT ポリシーを選択します。コアデバイスのアクティブな証明書にアタッチされている任意のポリシーに、必要なアクセス許可を追加できます。

    注記

    リソースのプロビジョニングに AWS IoT Greengrass Core ソフトウェアインストーラを使用している場合、2 つの AWS IoT ポリシーが存在します。存在する場合は、GreengrassV2IoTThingPolicy という名前のポリシーを選択することをお勧めします。クイックインストーラで作成するコアデバイスは、デフォルトでこのポリシー名を使用します。このポリシーにアクセス許可を追加すると、このポリシーを使用する他のコアデバイスにもこれらのアクセス許可が付与されます。

  8. [policy overview] (ポリシーの概要) で、[Edit active version] (アクティブなバージョンの編集) を選択します。

  9. ポリシーを確認し、必要に応じてアクセス許可を追加、削除、または編集します。

  10. 新しいポリシーバージョンをアクティブなバージョンとして設定するには、[Policy version status] (ポリシーバージョンのステータス) で、[Set the edited version as the active version for this policy] (編集したバージョンをこのポリシーのアクティブバージョンとして設定) を選択します。

  11. [Save as new version] (新しいバージョンとして保存) を選択します。

  1. コアデバイスの AWS IoT モノのプリンシパルをリスト表示します。モノのプリンシパルは X.509 デバイス証明書またはその他の識別子にすることができます。次のコマンドを実行し、 をコアデバイスの名前MyGreengrassCoreに置き換えます。

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

    この動作は、コアデバイスのモノのプリンシパルをリスト表示するレスポンスを返します。

    { "principals": [ "arn:aws:iot:us-west-2:123456789012:cert/certificateId" ] }
  2. コアデバイスのアクティブな証明書を特定します。以下のコマンドを実行して、アクティブな証明書が見つかるまで、certificateId を前の手順からの各証明書の ID に置き換えます。証明書 ID は、証明書 ARN の末尾にある 16 進数の文字列です。--query 引数は、証明書のステータスのみを出力するように指定しています。

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

    この操作では、証明書の状態が文字列で返されます。例えば、証明書がアクティブな場合、この操作は "ACTIVE" を出力します。

  3. 証明書にアタッチされている 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" } ] }
  4. 表示して更新するポリシーを選択します。

    注記

    リソースのプロビジョニングに AWS IoT Greengrass Core ソフトウェアインストーラを使用している場合、2 つの AWS IoT ポリシーが存在します。存在する場合は、GreengrassV2IoTThingPolicy という名前のポリシーを選択することをお勧めします。クイックインストーラで作成するコアデバイスは、デフォルトでこのポリシー名を使用します。このポリシーにアクセス許可を追加すると、このポリシーを使用する他のコアデバイスにもこれらのアクセス許可が付与されます。

  5. ポリシーのドキュメントを取得します。次のコマンドを実行し、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" }
  6. オンラインコンバータまたはその他のツールを使用して、ポリシードキュメント文字列を JSON オブジェクトに変換し、iot-policy.json という名前のファイルに保存します。

    例えば、jq ツールがインストールされている場合には、次のコマンドを実行してポリシードキュメントを取得し、JSON オブジェクトに変換してから、ポリシードキュメントを JSON オブジェクトとして保存することができます。

    aws iot get-policy --policy-name GreengrassV2IoTThingPolicy --query 'policyDocument' | jq fromjson >> iot-policy.json
  7. ポリシードキュメントを確認し、必要に応じてアクセス許可を追加、削除、または編集します。

    例えば、Linux ベースのシステムでは、次のコマンドを実行し、GNU nano を使用してファイルを開きます。

    nano iot-policy.json

    完成したポリシー文書は、コアデバイス向けの最低限の AWS IoT ポリシーと類似したものになる可能性があります。

  8. 変更をポリシーの新しいバージョンとして保存します。次のコマンドを実行し、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 ポリシー

重要

Greengrass nucleus コンポーネントの新しいバージョンでは、最低限の AWS IoT ポリシーに対して追加のアクセス許可が必要となります。追加の許可を付与するにあたり、コアデバイスの AWS IoT ポリシーを更新する必要が生じる場合があります。

  • 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 デベロッパーガイド」の「パブリッシュ/サブスクライブポリシーの例」を参照してください。

  • このポリシーは、テレメトリデータに関する次のトピックにパブリッシュするためのアクセス許可を付与します。

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

    テレメトリを無効にしたコアデバイスでは、このアクセス許可を外すことができます。詳細については、「AWS IoT Greengrass コアデバイスからシステムヘルステレメトリデータを収集する」を参照してください。

  • このポリシーは、AWS IoT ロールエイリアスを介して IAM ロールを継承するためのアクセス許可を付与します。コアデバイスは、トークン交換ロールと呼ばれるこのロールを使用して、AWS リクエストの認証に使用することができる AWS 認証情報を取得します。詳細については、「コアデバイスが AWS サービスを操作できるように認証する」を参照してください。

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

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

クライアントデバイスをサポートするための最低限の AWS IoT ポリシー

次のポリシー例には、コアデバイス上のクライアントデバイスとの対話をサポートするために必要となる最低限のアクションが含まれています。クライアントデバイスをサポートするため、コアデバイスは基本操作のための最低限の AWS IoT ポリシーに加えて、この AWS IoT ポリシーでもアクセス許可を持つ必要があります。

  • このポリシーにより、コアデバイスは自身の接続情報を更新できるようになります。このアクセス許可 (greengrass:UpdateConnectivityInfo) は、コアデバイスに IP 検出コンポーネントをデプロイする場合にのみ必要となります。

{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": [ "iot:Publish" ], "Resource": [ "arn:aws:iot:region:account-id:topic/$aws/things/core-device-thing-name-gci/shadow/get" ] }, { "Effect": "Allow", "Action": [ "iot:Subscribe" ], "Resource": [ "arn:aws:iot:region:account-id:topicfilter/$aws/things/core-device-thing-name-gci/shadow/update/delta", "arn:aws:iot:region:account-id:topicfilter/$aws/things/core-device-thing-name-gci/shadow/get/accepted" ] }, { "Effect": "Allow", "Action": [ "iot:Receive" ], "Resource": [ "arn:aws:iot:region:account-id:topic/$aws/things/core-device-thing-name-gci/shadow/update/delta", "arn:aws:iot:region:account-id: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:region:account-id:thing/*" }, { "Effect": "Allow", "Action": [ "greengrass:GetConnectivityInfo", "greengrass:UpdateConnectivityInfo" ], "Resource": [ "arn:aws:iot:region:account-id:thing/core-device-thing-name" ] } ] }

クライアントデバイス向けの最低限の AWS IoT ポリシー

次のポリシー例には、クライアントデバイスが MQTT 経由で接続して通信するコアデバイスを検出するために必要となる最低限のアクションが含まれています。クライアントデバイスの AWS IoT ポリシーには、デバイスが関連する Greengrass コアデバイスの接続情報を検出できるようにするための greengrass:Discover アクションを含める必要があります。Resource セクションには、Greengrass コアデバイスの ARN ではなく、クライアントデバイスの Amazon リソースネーム (ARN) を指定します。

  • このポリシーは、すべての MQTT トピックでの通信を許可します。セキュリティのベストプラクティスに沿うように、iot:Publishiot:Subscribe、および iot:Receive のアクセス許可は、ユースケースに必要とされる最小限のトピックセットのみに制限してください。

  • このポリシーにより、モノはあらゆる AWS IoT モノのコアデバイスを検出できるようになります。セキュリティのベストプラクティスに沿うように、greengrass:Discover のアクセス許可はクライアントデバイスの AWS IoT モノまたは AWS IoT モノのセットに一致するワイルドカードのみに制限してください。

    重要

    モノのポリシー変数 (iot:Connection.Thing.*) は コアデバイスまたは Greengrass データプレーン操作用の AWS IoT ポリシーではサポートされていません。代わりに、ワイルドカードを使用して名前が似ている複数のデバイスと一致させることができます。たとえば、MyGreengrassDevice* と指定すると MyGreengrassDevice1MyGreengrassDevice2 などと一致します。

  • クライアントデバイスの AWS IoT ポリシーでは通常、iot:GetThingShadowiot:UpdateThingShadow、または iot:DeleteThingShadow アクションに対するアクセス許可は必要ありません。これは、クライアントデバイスのシャドウ同期操作は Greengrass コアデバイスで処理されるからです。コアデバイスがクライアントのデバイスシャドウを処理できるようにするには、コアデバイスの AWS IoT ポリシーでこれらのアクションが許可されていることと、Resource セクションにクライアントデバイスの ARN が含まれていることを確認します。

{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": [ "iot:Connect" ], "Resource": "*" }, { "Effect": "Allow", "Action": [ "iot:Publish" ], "Resource": [ "arn:aws:iot:region:account-id:topic/*" ] }, { "Effect": "Allow", "Action": [ "iot:Subscribe" ], "Resource": [ "arn:aws:iot:region:account-id:topicfilter/*" ] }, { "Effect": "Allow", "Action": [ "iot:Receive" ], "Resource": [ "arn:aws:iot:region:account-id:topic/*" ] }, { "Effect": "Allow", "Action": [ "greengrass:Discover" ], "Resource": [ "arn:aws:iot:region:account-id:thing/*" ] } ] }