データプレーンで AWS IoT を安全に使用するためにデバイスを承認する - AWS IoT Core

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

データプレーンで AWS IoT を安全に使用するためにデバイスを承認する

デバイスがデータプレーンで AWS IoT ジョブとの安全なやり取りをできるよう承認するには、AWS IoT Core ポリシーを使用する必要があります。AWS IoT Core のジョブに関するポリシーは、ポリシーステートメントを含む JSON ドキュメントです。これらのポリシーでは効果アクション、およびリソースの各要素を使用し、IAM ポリシーと同様の規則に従います。要素の詳細については、IAM ユーザーガイドの「IAM JSON ポリシーの要素のリファレンス」を参照してください。

ポリシーは MQTT プロトコルと HTTPS プロトコルの両方で使用でき、デバイスを認証するには TCP または TLS 相互認証を使用する必要があります。以下に、さまざまな通信プロトコルでこれらのポリシーを使用する方法を示します。

警告

IAM ポリシーまたは AWS IoT Core ポリシーでは、"Action": ["iot:*"] など、ワイルドカードのアクセス許可を使用しないことをお勧めします。ワイルドカードアクセス許可の使用は、セキュリティ上のベストプラクティスとして推奨されません。詳細については、「アクセス許可が過度に寛容な AWS IoT ポリシー」を参照してください。

MQTT プロトコルの AWS IoT Core ポリシー

MQTT プロトコルの AWS IoT Core ポリシーは、ジョブデバイスの MQTT API アクションを使用するアクセス許可を付与します。MQTT API オペレーションは、ジョブコマンド用に予約されている MQTT トピックを操作するために使用されます。これらの API オペレーションの詳細については、「ジョブデバイスのMQTTAPIオペレーション」を参照してください。

MQTT ポリシーは、iot:Connectiot:Publishiot:Subscribeiot:Receieve などのポリシーアクションを使用して、ジョブトピックと連携します。これらのポリシーにより、メッセージブローカーへの接続、ジョブズ MQTT トピックのサブスクライブ、デバイスとクラウド間の MQTT メッセージの送受信を行うことができます。これらのアクションの詳細については、「AWS IoT Core ポリシーアクション」を参照してください。

AWS IoT ジョブのトピックの詳細については、「ジョブのトピック」を参照してください。

次の例は、iot:Publishiot:Subscribe を使用して、ジョブおよびジョブ実行を発行およびサブスクライブする方法を示します。

この例では、次のように置き換えます。

  • region を AWS リージョン (例: us-east-1) に。

  • account-id を AWS アカウント 番号 (例: 57EXAMPLE833) に。

  • thing-name をジョブをターゲットにしている IoT のモノの名前 (例: MyIoTThing) に。

{ "Statement": [ { "Effect": "Allow", "Action": [ "iot:Publish", "iot:Subscribe" ], "Resource": [ "arn:aws:iot:region:account-id:topic/$aws/events/job/*", "arn:aws:iot:region:account-id:topic/$aws/events/jobExecution/*", "arn:aws:iot:region:account-id:topic/$aws/things/thing-name/jobs/*" ] } ], "Version": "2012-10-17" }

HTTPS プロトコルの AWS IoT Core ポリシー

データプレーン上の AWS IoT Core ポリシーは、TLS 認証メカニズムを備えた HTTPS プロトコルを使用して、デバイスを承認することもできます。データプレーンでは、ポリシーは iotjobsdata: プレフィックスを使用して、デバイスが実行できるジョブ API オペレーションを承認します。例えば、iotjobsdata:DescribeJobExecution ポリシーアクションは、DescribeJobExecution API を使用するアクセス許可をユーザーに付与します。

注記

データプレーンポリシーアクションは、iotjobsdata: プレフィックスを使用する必要があります。コントロールプレーンでは、アクションは iot: プレフィックスを使用する必要があります。コントロールプレーンとデータプレーンの両方のポリシーアクションを使用する場合の IAM ポリシーの例については、「コントロールプレーンとデータプレーン両方の IAM ポリシーの例」を参照してください。

次の表は、AWS IoT Core のポリシーアクションと、デバイスに API アクションの使用を承認するアクセス許可のリストです。データプレーンで実行できる API オペレーションのリストについては、「ジョブデバイス HTTP API」を参照してください。

注記

これらのジョブ実行ポリシーアクションは、HTTP TLS エンドポイントにのみ適用されます。MQTT エンドポイントを使用する場合は、以前に定義された MQTT ポリシーアクションを使用する必要があります。

データプレーンでの AWS IoT Core ポリシーアクション
ポリシーアクション API オペレーション リソースタイプ 説明
iotjobsdata:DescribeJobExecution DescribeJobExecution
  • ジョブ

  • thing

ジョブの実行を取得するアクセス許可を表します。iotjobsdata:DescribeJobExecution アクセス許可は、ジョブの実行の取得リクエストが行われるたびに確認されます。
iotjobsdata:GetPendingJobExecutions GetPendingJobExecutions thing モノの終了のステータスではないジョブのリストを取得するアクセス権限を表します。iotjobsdata:GetPendingJobExecutions アクセス権限は、リストの取得リクエストが行われるたびに確認されます。
iotjobsdata:StartNextPendingJobExecution StartNextPendingJobExecution thing モノに対して保留中の次のジョブ実行を取得および開始するアクセス権限を表します (つまり、ステータスが QUEUED のジョブ実行を IN_PROGRESS に更新します)。iotjobsdata:StartNextPendingJobExecution アクセス許可は、保留中の次のジョブ実行を開始するリクエストが行われるたびに確認されます。
iotjobsdata:UpdateJobExecution UpdateJobExecution thing ジョブの実行を更新するアクセス権限を表します。iotjobsdata:UpdateJobExecution アクセス権限は、ジョブ実行の状態の更新リクエストが行われるたびに確認されます。

以下に、任意のリソースのデータプレーン API オペレーションに対するアクションの実行に対して許可を付与する AWS IoT Core ポリシーの例を示します。特定のリソース (IoT のモノなど) にポリシーのスコープを設定することができます。例では、以下を置き換えます。

  • region を AWS リージョン (例: us-east-1) に。

  • account-id を AWS アカウント 番号 (例: 57EXAMPLE833) に。

  • thing-name を IoT のモノの名前 (例: MyIoTthing) に。

{ "Version": "2012-10-17", "Statement": [ { "Action": [ "iotjobsdata:GetPendingJobExecutions", "iotjobsdata:StartNextPendingJobExecution", "iotjobsdata:DescribeJobExecution", "iotjobsdata:UpdateJobExecution" ], "Effect": "Allow", "Resource": "arn:aws:iot:region:account-id:thing/thing-name" } ] }

これらのポリシーを使用する必要がある場合の一例として、IoT デバイスが AWS IoT Core ポリシーを使用して、これらの API オペレーションの 1 つにアクセスする場合 (DescribeJobExecution APIの次の例のような場合) が挙げられます。

GET /things/thingName/jobs/jobId?executionNumber=executionNumber&includeJobDocument=includeJobDocument&namespaceId=namespaceId HTTP/1.1