モノの静的グループ - AWS(AWS) IoT コア

英語の翻訳が提供されている場合で、内容が矛盾する場合には、英語版がオリジナルとして取り扱われます。翻訳は機械翻訳により提供されています。

モノの静的グループ

モノの静的グループはこれらをグループに分類することで、複数のモノを一度に管理できるようにします。モノの静的グループには、コンソール、CLI、または API を使用して管理されるモノのグループが含まれます。一方、動的なモノのグループには、指定したクエリに一致するモノが含まれます。モノの静的グループには、他のモノの静的グループを含めることもできます。グループの階層を構築できます。親グループにポリシーを付加することができ、その子グループ、およびそのグループと子グループ内のすべてのモノに継承されます。これにより、多数のモノに対するアクセス許可の制御が容易になります。

次に、モノの静的グループで実施可能な操作をご紹介します。

  • グループを作成、説明、または削除する。

  • モノをグループに追加するか、複数のグループに追加する。

  • グループからモノを削除する。

  • 作成したグループを一覧表示する。

  • グループのすべての子のグループを一覧表示する (直接の子孫と間接の子孫)。

  • 子グループ内のすべてのものを含め、グループ内のものを一覧表示する。

  • グループのすべての先祖のグループを一覧表示する (直接の先祖と間接の先祖)。

  • グループの属性を追加、削除または更新します。(属性は、グループに関する情報を格納するのに使用できる名前と値のペアです。)

  • グループにポリシーをアタッチまたはデタッチする。

  • グループにアタッチされるポリシーを一覧表示する。

  • モノによって継承されたポリシーを一覧表示する (そのグループまたはその親グループの 1 つにアタッチされたポリシーによって)。

  • グループ内のモノのログ記録オプションを設定する。「AWS IoT のログ記録の設定」を参照してください)。

  • グループとその子グループのすべてのモノに送信され実行されるジョブを作成する。「Jobs」を参照してください)。

モノの静的グループのいくつかの制限があります。

  • グループは、最大 1 つの直接の親を持つことができます。

  • グループが別のグループの子である場合は、作成時に指定する必要があります。

  • グループの親は後から変更できません。そのため、グループ階層は入念に計画し、親グループを作成してから、その親グループに含む子グループを作成してください

  • モノが属することができるグループの最大数は、限られています

  • 同じ階層の複数のグループにモノを追加することはできません。(つまり、共通の親を共有する 2 つのグループにモノを追加することはできません)。

  • グループ名を変更することはできません。

  • モノのグループ名には、û、é、ñ などの国際文字を含めることはできません。

  • 物品のグループ名に個人を特定できる情報を使用してはなりません。アイテムグループ名は、暗号化されていない通信およびレポートに表示されます。

  • 物品グループ名にコロン( : )を使用しないでください。コロン文字は、他の AWS IoT 誤ったグループ名で文字列を解析する原因となります。

グループにポリシーをアタッチおよびデタッチすると、AWS IoT オペレーションのセキュリティをいくつかの重要な方法で強化できます。ポリシーに証明書をアタッチしてからモノにアタッチするような、デバイスごとの方法は時間がかかり、多数のデバイスにわたってポリシーを迅速に更新または変更することが困難です。モノのグループにポリシーをアタッチすると、証明書をモノに回す際のステップが節約されます。また、ポリシーはグループメンバーシップを変更すると動的に適用されるため、デバイスがグループのメンバーシップを変更するたびに複雑なアクセス許可セットを再作成する必要はありません。

モノの静的グループの作成

モノの静的グループを作成するには CreateThingGroup コマンドを使用します。

$ aws iot create-thing-group --thing-group-name LightBulbs

CreateThingGroup コマンドは、モノの静的グループの名前、ID、および ARN を含むレスポンスを返します。

{ "thingGroupName": "LightBulbs", "thingGroupId": "abcdefgh12345678ijklmnop12345678qrstuvwx", "thingGroupArn": "arn:aws:iot:us-west-2:123456789012:thinggroup/LightBulbs" }
注記

グループ名に個人を特定できる情報を使用することはお勧めしません。

作成されたときのモノのグループの親を指定している例を次に示します。

$ aws iot create-thing-group --thing-group-name RedLights --parent-group-name LightBulbs

前と同様に、CreateThingGroup コマンドは、モノの静的グループの名前、ID、および ARN を含むレスポンスを返します。

{ "thingGroupName": "RedLights", "thingGroupId": "abcdefgh12345678ijklmnop12345678qrstuvwx", "thingGroupArn": "arn:aws:iot:us-west-2:123456789012:thinggroup/RedLights", }
重要

モノのグループ階層を作成するときは、次の制限事項に留意してください。

  • モノのグループは、直接の親を 1 つだけ持つことができます。

  • モノのグループが持つことができる直接の子グループの数は、限られています

  • グループの階層の最大深度は限られています

  • モノのグループが持つことのできる属性の数は、限られています。(属性は、グループに関する情報を格納するために使用できる名前と値のペアです。) 各属性名と各値の長さも 限定的.

モノのグループについて説明します。

DescribeThingGroup コマンドを使用すると、モノのグループに関する情報を取得できます。

$ aws iot describe-thing-group --thing-group-name RedLights

DescribeThingGroup コマンドは、指定されたグループに関する情報を返します。

{ "thingGroupName": "RedLights", "thingGroupArn": "arn:aws:iot:us-west-2:123456789012:thinggroup/RedLights", "thingGroupId": "12345678abcdefgh12345678ijklmnop12345678", "version": 1, "thingGroupMetadata": { "creationDate": 1478299948.882 "parentGroupName": "Lights", "rootToParentThingGroups": [ { "groupArn": "arn:aws:iot:us-west-2:123456789012:thinggroup/ShinyObjects", "groupName": "ShinyObjects" }, { "groupArn": "arn:aws:iot:us-west-2:123456789012:thinggroup/LightBulbs", "groupName": "LightBulbs" } ] }, "thingGroupProperties": { "attributePayload": { "attributes": { "brightness": "3400_lumens" }, }, "thingGroupDescription": "string" }, }

モノの静的グループにモノを追加する

AddThingToThingGroup コマンドを使用して、モノの静的グループにモノを追加できます。

$ aws iot add-thing-to-thing-group --thing-name MyLightBulb --thing-group-name RedLights

AddThingToThingGroup コマンドでは、出力が生成されません。

重要

最大 10 個のグループにモノを追加できます。ただし、同じ階層の複数のグループにモノを追加することはできません。(つまり、共通の親を共有する 2 つのグループにモノを追加することはできません。)

1 つのモノができる限り多くのモノのグループに属していて、それらのグループの 1 つ以上がモノの動的グループである場合、overrideDynamicGroups フラグを使用して、静的グループが動的グループより優先されるように指定できます。

モノの静的グループからモノを削除する

RemoveThingFromThingGroup コマンドを使用すると、グループからモノを削除できます。

$ aws iot remove-thing-from-thing-group --thing-name MyLightBulb --thing-group-name RedLights

RemoveThingFromThingGroup コマンドでは、出力が生成されません。

モノのグループ内のモノを一覧表示する

ListThingsInThingGroup コマンドを使用して、グループに属するモノを一覧表示できます。

$ aws iot list-things-in-thing-group --thing-group-name LightBulbs

この ListThingsInThingGroup コマンドは、指定されたグループ内のモノのリストを返します。

{ "things":[ "TestThingA" ] }

--recursive パラメータを使用すると、グループに属するモノとその子グループに属するモノを一覧表示することができます

$ aws iot list-things-in-thing-group --thing-group-name LightBulbs --recursive
{ "things":[ "TestThingA", "MyLightBulb" ] }
注記

このオペレーションは結果整合性があります。言い換えれば、モノのグループへの変更は直ちに反映されない可能性があります。

モノのグループの一覧表示

ListThingGroups コマンドを使用して、アカウントのモノのグループを一覧表示できます。

$ aws iot list-thing-groups

ListThingGroups コマンドは、AWS アカウントに定義されているグループのリストを返します。

{ "thingGroups": [ { "groupName": "LightBulbs", "groupArn": "arn:aws:iot:us-west-2:123456789012:thinggroup/LightBulbs" }, { "groupName": "RedLights", "groupArn": "arn:aws:iot:us-west-2:123456789012:thinggroup/RedLights" }, { "groupName": "RedLEDLights", "groupArn": "arn:aws:iot:us-west-2:123456789012:thinggroup/RedLEDLights" }, { "groupName": "RedIncandescentLights", "groupArn": "arn:aws:iot:us-west-2:123456789012:thinggroup/RedIncandescentLights" } { "groupName": "ReplaceableObjects", "groupArn": "arn:aws:iot:us-west-2:123456789012:thinggroup/ReplaceableObjects" } ] }

オプションのフィルタを使用して、特定のグループが親 (--parent-group)、または特定のプレフィックス(--name-prefix-filter) は --recursive パラメーターを使用すると、モノグループの直接の子グループだけでなく、すべての子グループをリストできます。

$ aws iot list-thing-groups --parent-group LightBulbs

この場合、ListThingGroups コマンドは、AWS アカウントで定義されたモノのグループの直の子グループのリストを返します。

{ "childGroups":[ { "groupName": "RedLights", "groupArn": "arn:aws:iot:us-west-2:123456789012:thinggroup/RedLights" } ] }

ListThingGroups コマンドで --recursive パラメータを使用すると、モノのグループの直接の子グループだけでなく、すべての子グループを一覧表示できます。

$ aws iot list-thing-groups --parent-group LightBulbs --recursive

この ListThingGroups コマンドは、を使用すると、モノのグループのすべての子グループのリストを返します。

{ "childGroups":[ { "groupName": "RedLights", "groupArn": "arn:aws:iot:us-west-2:123456789012:thinggroup/RedLights" }, { "groupName": "RedLEDLights", "groupArn": "arn:aws:iot:us-west-2:123456789012:thinggroup/RedLEDLights" }, { "groupName": "RedIncandescentLights", "groupArn": "arn:aws:iot:us-west-2:123456789012:thinggroup/RedIncandescentLights" } ] }
注記

このオペレーションは結果整合性があります。言い換えれば、モノのグループへの変更は直ちに反映されない可能性があります。

モノが属するグループを一覧表示する

ListThingGroupsForThing コマンドを使用すると、親グループを含み、モノが属しているグループを一覧表示できます。

$ aws iot list-thing-groups-for-thing --thing-name MyLightBulb

ListThingGroupsForThing コマンドは、このモノが属しているグループのリストを、親グループを含めて返します。

{ "thingGroups":[ { "groupName": "LightBulbs", "groupArn": "arn:aws:iot:us-west-2:123456789012:thinggroup/LightBulbs" }, { "groupName": "RedLights", "groupArn": "arn:aws:iot:us-west-2:123456789012:thinggroup/RedLights" }, { "groupName": "ReplaceableObjects", "groupArn": "arn:aws:iot:us-west-2:123456789012:thinggroup/ReplaceableObjects" } ] }

モノの静的グループの更新

UpdateThingGroup コマンドを使用すると、モノの静的グループの属性を更新できます。

$ aws iot update-thing-group --thing-group-name "LightBulbs" --thing-group-properties "thingGroupDescription=\"this is a test group\", attributePayload=\"{\"attributes\"={\"Owner\"=\"150\",\"modelNames\"=\"456\"}}"

UpdateThingGroup コマンドは、更新後にグループのバージョン番号を含むレスポンスを返します。

{ "version": 4 }
注記

モノが持つことができる属性の数は、限られています

モノのグループを削除する

モノのグループを削除するには、DeleteThingGroup コマンドを使用します。

$ aws iot delete-thing-group --thing-group-name "RedLights"

DeleteThingGroup コマンドでは、出力が生成されません。

重要

子グループを持つモノのグループを削除しようとすると、次のようなエラーが発生します。

A client error (InvalidRequestException) occurred when calling the DeleteThingGroup operation: Cannot delete thing group : RedLights when there are still child groups attached to it.

グループを削除する前に、そのすべての子グループを削除する必要があります。

子のモノを持つグループは削除できますが、そのグループのメンバーシップによって付与されているすべてのアクセス許可は適用されなくなります。ポリシーが設定されているグループを削除する前に、それらのアクセス許可を削除してもグループ内の機能が正しく機能しなくなることはありません。また、クラウド内のレコードが更新されている間は、モノが属しているグループを示すコマンド (ListGroupsForThing など) で、そのグループが表示され続けることがあります。

モノの静的グループにポリシーをアタッチする

AttachPolicy コマンドを使用して、モノの静的グループにポリシーをアタッチすることができます。そのため、そのグループ内のすべてのモノやその子グループのモノに拡張機能を割り当てることができます。

$ aws iot attach-policy \ --target "arn:aws:iot:us-west-2:123456789012:thinggroup/LightBulbs" \ --policy-name "myLightBulbPolicy"

AttachPolicy コマンドでは、出力が生成されません。

重要

1 つのグループにアタッチできるポリシーは最大 2 つです。

注記

ポリシー名に個人を特定できる情報を使用することはお勧めしません。

--target パラメータは、モノのグループ ARN (上記に示す)、証明書の ARN または Amazon Cognito ID とすることができます。ポリシー、証明書、および認証の詳細については、「Authentication」を参照してください。

モノの静的グループからポリシーをデタッチする

DetachPolicy コマンドを使用して、モノのグループからポリシーをデタッチすることができます。そのため、そのグループ内のすべてのモノやその子グループのモノに拡張機能を割り当てることができます。

$ aws iot detach-policy --target "arn:aws:iot:us-west-2:123456789012:thinggroup/LightBulbs" --policy-name "myLightBulbPolicy"

DetachPolicy コマンドでは、出力が生成されません。

モノの静的グループにアタッチされているポリシーを一覧表示する

ListAttachedPolicies コマンドを使用すると、モノの静的グループにアタッチされたポリシーを一覧表示できます。

$ aws iot list-attached-policies --target "arn:aws:iot:us-west-2:123456789012:thinggroup/RedLights"

--target パラメータは、モノのグループ ARN (上記に示す)、証明書の ARN または Amazon Cognito アイデンティティとすることができます。

オプションの --recursive パラメータを追加して、グループの親グループにアタッチされたすべてのポリシーを含めます。

ListAttachedPolicies コマンドは、ポリシーのリストを返します。

{ "policies": [ "MyLightBulbPolicy" ... ] }

ポリシーのグループを一覧表示する

ListTargetsForPolicy コマンドを使用して、ポリシーがアタッチされているすべてのグループを含むターゲットを一覧表示できます。

$ aws iot list-targets-for-policy --policy-name "MyLightBulbPolicy"

オプションの --page-size number パラメータを追加して返される結果の最大数を指定します。該当する場合は、各クエリの後続の呼び出しで --marker string パラメータを追加して次の結果セットを取得します。

ListTargetsForPolicy コマンドは、より多くの結果を取得するために使用するターゲットとトークンのリストを返します。

{ "nextMarker": "string", "targets": [ "string" ... ] }

モノの有効なポリシーを取得する

GetEffectivePolicies コマンドを使用して、(グループが直接の親であるか間接的な祖先であるかにかかわらず) 所属するグループにアタッチされたポリシーを含め、モノで有効なポリシーを一覧表示できます。

$ aws iot get-effective-policies \ --thing-name "MyLightBulb" \ --principal "arn:aws:iot:us-east-1:123456789012:cert/a0c01f5835079de0a7514643d68ef8414ab739a1e94ee4162977b02b12842847"

--principal パラメータを使用して、モノにアタッチされた証明書の ARN を指定します。Amazon Cognito ID 認証を使用している場合は、--cognito-identity-pool-id パラメータを使用し、オプションで --principal パラメータを追加して、特定の Amazon Cognito アイデンティティを指定します。--cognito-identity-pool-id のみを指定すると、認証されていないユーザーのアイデンティティプールのロールに関連付けられたポリシーが返されます。両方を使用すると、認証されたユーザーの ID プールのロールに関連付けられたポリシーが返されます。

この --thing-name パラメータはオプションで、--principal パラメータの代わりに使用できます。使用すると、そのモノが属するグループにアタッチされているポリシーと、これらのグループの親グループ (階層内のルートグループまで) にアタッチされているポリシーが返されます。

GetEffectivePolicies コマンドは、ポリシーのリストを返します。

{ "effectivePolicies": [ { "policyArn": "string", "policyDocument": "string", "policyName": "string" } ... ] }

MQTT アクションテストの認可

TestAuthorization コマンドを使用して、あるモノに対して MQTT アクションが許可されているかどうかをテストできます。

aws iot test-authorization \ --principal "arn:aws:iot:us-east-1:123456789012:cert/a0c01f5835079de0a7514643d68ef8414ab739a1e94ee4162977b02b12842847" \ --auth-infos "{\"actionType\": \"PUBLISH\", \"resources\": [ \"arn:aws:iot:us-east-1:123456789012:topic/my/topic\"]}"

--principal パラメータを使用して、モノにアタッチされた証明書の ARN を指定します。Amazon Cognito ID を使用している場合は、Cognito ID を --principal として指定するか、--cognito-identity-pool-id パラメータまたはその両方を使用します。--cognito-identity-pool-idだけを指定すると、認証されていないユーザーの ID のロールに関連付けられたポリシーが考慮されます。両方を使用すると、認証されたユーザーの ID プールのロールに関連付けられたポリシーが考慮されます。

--auth-infos パラメータの後にリソースおよびアクションタイプをリストすることによって、テストする 1 つ以上の MQTT アクションを指定します。この actionType フィールドには「PUBLISH」、「SUBSCRIBE」、「RECEIVE」、または「CONNECT」が含まれます。 resources フィールドには、リソース ARN のリストが含まれている必要があります。詳細については、「AWS IoT Core ポリシー」を参照してください。

--policy-names-to-add パラメータを指定することで、ポリシーを追加する効果をテストできます。または、--policy-names-to-skip パラメータを使用してポリシーを削除する効果をテストできます。

オプションの --client-id パラメータを使用して、結果をさらに絞り込むこともできます。

TestAuthorization コマンドは、指定した --auth-infos クエリの各セットに対して許可または拒否されているアクションに関する詳細を返します。

{ "authResults": [ { "allowed": { "policies": [ { "policyArn": "string", "policyName": "string" } ] }, "authDecision": "string", "authInfo": { "actionType": "string", "resources": [ "string" ] }, "denied": { "explicitDeny": { "policies": [ { "policyArn": "string", "policyName": "string" } ] }, "implicitDeny": { "policies": [ { "policyArn": "string", "policyName": "string" } ] } }, "missingContextValues": [ "string" ] } ] }