AWS IoT ジョブを使用するためにユーザーとクラウドサービスを承認する - AWS IoT Core

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

AWS IoT ジョブを使用するためにユーザーとクラウドサービスを承認する

ユーザーとクラウドサービスを承認するには、コントロールプレーンとデータプレーンの両方でIAMポリシーを使用する必要があります。ポリシーはHTTPSプロトコルとともに使用する必要があり、ユーザーを認証するには AWS 署名バージョン 4 認証 (ポート 443) を使用する必要があります。

注記

AWS IoT Core ポリシーをコントロールプレーンで使用することはできません。ユーザーまたはクラウドサービスの承認にはIAMポリシーのみが使用されます。必要なポリシータイプの詳細については、「AWS IoT ジョブに必要なポリシータイプ」を参照してください。

IAM ポリシーは、ポリシーステートメントを含むJSONドキュメントです。ポリシーステートメントでは、効果アクション、およびリソースの各要素を使用して、リソース、許可または拒否するアクション、およびアクションが許可または拒否される条件を指定します。詳細については、「 ユーザーガイド」のIAMJSON「ポリシー要素リファレンス」を参照してください。 IAM

警告

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

IAM コントロールプレーン上のポリシー

コントロールプレーンでは、IAMポリシーは アクションのiot:プレフィックスを使用して、対応するジョブAPIオペレーションを承認します。例えば、iot:CreateJobポリシーアクションは、 を使用するアクセス許可をユーザーに付与しますCreateJobAPI。

次の表は、IAMポリシーアクションとAPIアクションを使用するアクセス許可のリストを示しています。リソースタイプの詳細については、「 で定義されるリソースタイプ AWS IoT」を参照してください。アクションの詳細については AWS IoT 、「 で定義されるアクション AWS IoT」を参照してください。

IAM コントロールプレーンでのポリシーアクション
ポリシーアクション API オペレーション リソースタイプ 説明
iot:AssociateTargetsWithJob AssociateTargetsWithJob
  • ジョブ

  • thing

  • thinggroup

グループを連続ジョブに関連付けるためのアクセス許可を表します。iot:AssociateTargetsWithJob アクセス許可は、ターゲットの関連付けのリクエストが行われるたびに確認されます。
iot:CancelJob CancelJob ジョブ ジョブをキャンセルするアクセス許可を表します。iot:CancelJob アクセス許可は、ジョブのキャンセルリクエストが行われるたびに確認されます。
iot:CancelJobExecution CancelJobExecution
  • ジョブ

  • thing

ジョブの実行をキャンセルするアクセス許可を表します。iot: CancelJobExecution アクセス許可は、ジョブの実行のキャンセルリクエストが行われるたびに確認されます。
iot:CreateJob CreateJob
  • ジョブ

  • thing

  • thinggroup

  • jobtemplate

  • パッケージ

ジョブを作成するためのアクセス許可を表します。iot: CreateJob アクセス許可は、ジョブの作成リクエストが行われるたびに確認されます。
iot:CreateJobTemplate CreateJobTemplate
  • ジョブ

  • jobtemplate

  • パッケージ

ジョブテンプレートを作成するためのアクセス許可を表します。iot: CreateJobTemplate アクセス許可は、ジョブテンプレートの作成リクエストが行われるたびに確認されます。
iot:DeleteJob DeleteJob ジョブ ジョブを削除するアクセス許可を表します。iot: DeleteJob アクセス許可は、ジョブの削除リクエストが行われるたびに確認されます。
iot:DeleteJobTemplate DeleteJobTemplate jobtemplate ジョブテンプレートを削除するアクセス許可を表します。iot: CreateJobTemplate アクセス許可は、ジョブテンプレートの削除リクエストが行われるたびに確認されます。
iot:DeleteJobExecution DeleteJobTemplate
  • ジョブ

  • thing

ジョブの実行を削除するアクセス許可を表します。iot: DeleteJobExecution アクセス許可は、ジョブの実行の削除リクエストが行われるたびに確認されます。
iot:DescribeJob DescribeJob ジョブ ジョブを説明するアクセス許可を表します。iot: DescribeJob アクセス許可は、ジョブの説明のリクエストが行われるたびに確認されます。
iot:DescribeJobExecution DescribeJobExecution
  • ジョブ

  • thing

ジョブの実行を説明するアクセス許可を表します。iot: DescribeJobExecution アクセス許可は、ジョブの実行の説明のリクエストが行われるたびに確認されます。
iot:DescribeJobTemplate DescribeJobTemplate jobtemplate ジョブテンプレートを説明するためのアクセス許可を表します。iot: DescribeJobTemplate アクセス許可は、ジョブテンプレートの説明のリクエストが行われるたびに確認されます。
iot:DescribeManagedJobTemplate DescribeManagedJobTemplate jobtemplate マネージドジョブテンプレートを説明するアクセス許可を表します。iot: DescribeManagedJobTemplate アクセス許可は、マネージドジョブテンプレートの説明のリクエストが行われるたびに確認されます。
iot:GetJobDocument GetJobDocument ジョブ ジョブのジョブドキュメントを取得するアクセス許可を表します。iot:GetJobDocument アクセス許可は、ジョブドキュメントの取得リクエストが行われるたびに確認されます。
iot:ListJobExecutionsForJob ListJobExecutionsForJob ジョブ ジョブのジョブ実行を一覧表示するためのアクセス許可を表します。iot:ListJobExecutionsForJob アクセス許可は、ジョブ実行を一覧表示するリクエストが行われるたびに確認されます。
iot:ListJobExecutionsForThing ListJobExecutionsForThing thing ジョブのジョブ実行を一覧表示するためのアクセス許可を表します。iot:ListJobExecutionsForThing アクセス許可は、モノのジョブ実行を一覧表示するリクエストが行われるたびに確認されます。
iot:ListJobs ListJobs なし ジョブを一覧表示するためのアクセス許可を表します。iot:ListJobs アクセス許可は、ジョブを一覧表示するリクエストが行われるたびに確認されます。
iot:ListJobTemplates ListJobTemplates なし ジョブテンプレートを一覧表示するためのアクセス許可を表します。iot:ListJobTemplates アクセス許可は、ジョブテンプレートを一覧表示するリクエストが行われるたびに確認されます。
iot:ListManagedJobTemplates ListManagedJobTemplates なし マネージドジョブテンプレートを一覧表示するアクセス許可を表します。iot:ListManagedJobTemplates アクセス許可は、マネージドジョブテンプレートを一覧表示するリクエストが行われるたびに確認されます。
iot:UpdateJob UpdateJob ジョブ ジョブを更新するアクセス許可を表します。iot:UpdateJob アクセス許可は、ジョブの更新リクエストが行われるたびに確認されます。
iot:TagResource TagResource
  • ジョブ

  • jobtemplate

  • thing

特定のリソースにタグを付けるアクセス許可を表します。
iot:UntagResource UntagResource
  • ジョブ

  • jobtemplate

  • thing

特定のリソースのタグを解除するためのアクセス許可を表します。

次の例は、IoT モノとモノのグループに対して次のアクションを実行するアクセス許可をユーザーに付与するIAMポリシーを示しています。

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

  • region AWS リージョンなどの を使用しますus-east-1

  • account-id など、 の AWS アカウント 番号を使用します57EXAMPLE833

  • thing-group-name などのジョブをターゲットとする IoT モノグループの名前。 FirmwareUpdateGroup

  • thing-name などのジョブをターゲットとする IoT モノの名前。 MyIoTThing

{ "Version": "2012-10-17", "Statement": [ { "Action": [ "iot:CreateJobTemplate", "iot:CreateJob", ], "Effect": "Allow", "Resource": "arn:aws:iot:region:account-id:thinggroup/thing-group-name" }, { "Action": [ "iot:DescribeJob", "iot:CancelJob", "iot:DeleteJob", ], "Effect": "Allow", "Resource": "arn:aws:iot:region:account-id:job/*" }, { "Action": [ "iot:DescribeJobExecution", "iot:CancelJobExecution", "iot:DeleteJobExecution", ], "Effect": "Allow", "Resource": [ "arn:aws:iot:region:account-id:thing/thing-name" "arn:aws:iot:region:account-id:job/*" ] } ] }

プリンシパルが特定の IP アドレスからコントロールプレーンエンドポイントをAPI呼び出すことを制限できます。許可できる IP アドレスを指定するには、IAMポリシーの条件要素でグローバルaws:SourceIp条件キーを使用します。

この条件キーを使用すると、 など、ユーザーに代わってこれらのAPI呼び出しを行うこと AWS のサービスを他の へのアクセスを拒否することもできます AWS CloudFormation。これらのサービスへのアクセスを許可するには、aws:SourceIp key で aws:ViaAWSService グローバル条件キーを使用します。これにより、送信元 IP アドレスのアクセス制限は、プリンシパルによって直接行われた要求にのみ適用されます。詳細については、AWS「: ソース IP AWS に基づいて へのアクセスを拒否する」を参照してください。

次の例は、コントロールプレーンエンドポイントをAPI呼び出すことができる特定の IP アドレスのみを許可する方法を示しています。aws:ViaAWSService キーは に設定されておりtrue、他の サービスがユーザーに代わって をAPI呼び出すことができます。

{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": [ "iot:CreateJobTemplate", "iot:CreateJob" ], "Resource": ["*"], "Condition": { "IpAddress": { "aws:SourceIp": "123.45.167.89" } }, "Bool": {"aws:ViaAWSService": "true"} } ], }

IAM データプレーン上のポリシー

IAM データプレーンの ポリシーは、 iotjobsdata: プレフィックスを使用して、ユーザーが実行できるジョブAPIオペレーションを承認します。データプレーンでは、iotjobsdata:DescribeJobExecutionポリシーアクションDescribeJobExecutionAPIを使用して、 を使用するアクセス許可をユーザーに付与できます。

警告

デバイスのジョブをターゲット AWS IoT にする場合、データプレーンでIAMポリシーを使用することはお勧めしません。ユーザーがジョブを作成および管理するには、コントロールプレーンでIAMポリシーを使用することをお勧めします。データプレーンでは、ジョブ実行の取得と実行ステータスの更新をデバイスに承認するには、AWS IoT Core HTTPSプロトコルのポリシー を使用します。

承認する必要があるAPIオペレーションは通常、CLIコマンドを入力することで実行されます。ユーザーが DescribeJobExecution オペレーションを実行した場合の例を以下に示します。

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

  • region AWS リージョンなどの を使用しますus-east-1

  • account-id など、 の AWS アカウント 番号を使用します57EXAMPLE833

  • thing-name などのジョブをターゲットとする IoT モノの名前。 myRegisteredThing

  • job-id は、 を使用してターゲットにされたジョブの一意の識別子ですAPI。

aws iot-jobs-data describe-job-execution \ --endpoint-url "https://account-id.jobs.iot.region.amazonaws.com" \ --job-id jobID --thing-name thing-name

以下に、このアクションを承認するサンプルIAMポリシーを示します。

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

プリンシパルが特定の IP アドレスからデータプレーンエンドポイントをAPI呼び出すことを制限できます。許可できる IP アドレスを指定するには、IAMポリシーの条件要素でグローバルaws:SourceIp条件キーを使用します。

この条件キーを使用すると、 など、ユーザーに代わってこれらのAPI呼び出しを行うこと AWS のサービスを他の へのアクセスを拒否することもできます AWS CloudFormation。これらのサービスへのアクセスを許可するには、aws:ViaAWSService グローバル条件キーを aws:SourceIp 条件キーで使用します。これにより、IP アドレスのアクセス制限は、プリンシパルによって直接行われた要求にのみ適用されます。詳細については、AWS「: ソース IP AWS に基づいて へのアクセスを拒否する」を参照してください。

次の例は、データプレーンエンドポイントをAPI呼び出すことができる特定の IP アドレスのみを許可する方法を示しています。

{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": ["iotjobsdata:*"], "Resource": ["*"], "Condition": { "IpAddress": { "aws:SourceIp": "123.45.167.89" } }, "Bool": {"aws:ViaAWSService": "false"} } ], }

次の例は、特定の IP アドレスまたはアドレス範囲がデータプレーンエンドポイントをAPI呼び出すのを制限する方法を示しています。

{ "Version": "2012-10-17", "Statement": [ { "Effect": "Deny", "Action": ["iotjobsdata:*"], "Condition": { "IpAddress": { "aws:SourceIp": [ "123.45.167.89", "192.0.2.0/24", "203.0.113.0/24" ] } }, "Resource": ["*"], } ], }

コントロールプレーンとデータプレーンの両方で API オペレーションを実行する場合、コントロールプレーンポリシーアクションは iot: プレフィックスを使用し、データプレーンポリシーアクションは iotjobsdata: プレフィックスを使用する必要があります。

例えば、 DescribeJobExecution API はコントロールプレーンとデータプレーンの両方で使用できます。コントロールプレーンでは、 DescribeJobExecution API を使用してジョブ実行を記述します。データプレーンでは、 DescribeJobExecution API を使用してジョブ実行の詳細を取得します。

次のIAMポリシーは、コントロールプレーンとデータプレーンDescribeJobExecutionAPIの両方で を使用するアクセス許可をユーザーに付与します。

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

  • region AWS リージョンなどの を使用しますus-east-1

  • account-id など、 の AWS アカウント 番号を使用します57EXAMPLE833

  • thing-name などのジョブをターゲットとする IoT モノの名前。 MyIoTThing

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

IoT リソースのタグ付けを承認する

作成、変更、使用できるジョブおよびジョブテンプレートをより適切に制御するために、ジョブまたはジョブテンプレートにタグをアタッチできます。タグは、所有権を識別し、請求グループに配置してタグをアタッチすることで、コストを割り当てるのにも役立ちます。

ユーザーが または を使用して作成したジョブ AWS Management Console またはジョブテンプレートにタグを付ける場合 AWS CLI、IAMポリシーはユーザーにタグを付けるアクセス許可を付与する必要があります。アクセス許可を付与するには、IAMポリシーで iot:TagResourceアクションを使用する必要があります。

注記

IAM ポリシーに iot:TagResourceアクションが含まれていない場合、 タグCreateJobTemplateを持つ CreateJobまたは はAccessDeniedExceptionエラーを返します。

または を使用して作成したジョブまたはジョブテンプレートにタグを付ける場合 AWS CLI、IAMポリシーはそれらのジョブ AWS Management Console またはジョブテンプレートにタグを付けるアクセス許可を付与する必要があります。アクセス許可を付与するには、IAMポリシーで iot:TagResourceアクションを使用する必要があります。

リソースのタグ付けの詳細については、「AWS IoT リソースのタグ付け」を参照してください。

タグ付け許可を付与する次のIAMポリシー例を参照してください。

例 1

次のコマンドを実行してジョブを作成し、特定の環境にタグ付けするユーザー。

この例では、以下を置き換えます。

  • region AWS リージョンなどの を使用しますus-east-1

  • account-id など、 の AWS アカウント 番号を使用します57EXAMPLE833

  • thing-name などのジョブをターゲットとする IoT モノの名前。 MyIoTThing

aws iot create-job --job-id test_job --targets "arn:aws:iot:region:account-id:thing/thingOne" --document-source "https://s3.amazonaws.com/amzn-s3-demo-bucket/job-document.json" --description "test job description" --tags Key=environment,Value=beta

この例では、次のIAMポリシーを使用する必要があります。

{ "Version": "2012-10-17", "Statement": { "Action": [ "iot:CreateJob", "iot:CreateJobTemplate", "iot:TagResource" ], "Effect": "Allow", "Resource": [ "arn:aws:iot:aws-region:account-id:job/*", "arn:aws:iot:aws-region:account-id:jobtemplate/*" ] } }