

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

# モノの静的グループ
<a name="thing-groups"></a>

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

**注記**  
モノのグループポリシーは、 AWS IoT Greengrass データプレーンオペレーションへのアクセスを許可しません。 AWS IoT Greengrass データプレーンオペレーションへのモノのアクセスを許可するには、モノの証明書にアタッチする AWS IoT ポリシーに アクセス許可を追加します。詳細については、*AWS IoT Greengrass 開発者ガイド*の「[デバイスの認証と承認](https://docs.aws.amazon.com/greengrass/v2/developerguide/device-auth#iot-policies.html)」を参照してください。

次に､モノの静的グループで実施可能な操作をご紹介します。
+ グループを作成､説明､または削除する｡
+ モノをグループに追加するか、複数のグループに追加する｡
+ グループからモノを削除する。
+ 作成したグループを一覧表示する。
+ グループのすべての子のグループを一覧表示する (直接の子孫と間接の子孫)。
+ 子グループ内のすべてのものを含め、グループ内のものを一覧表示する。
+ グループのすべての先祖のグループを一覧表示する (直接の先祖と間接の先祖)。
+ グループの属性を追加、削除または更新します。(属性は、グループに関する情報を格納するのに使用できる名前と値のペアです。)
+ グループにポリシーをアタッチまたはデタッチする。
+ グループにアタッチされるポリシーを一覧表示する。
+ モノによって継承されたポリシーを一覧表示する (そのグループまたはその親グループの 1 つにアタッチされたポリシーによって)。
+ グループ内のモノのログ記録オプションを設定する。「」を参照してください[AWS IoT ログ記録の設定](configure-logging.md) 
+ グループとその子グループのすべてのモノに送信され実行されるジョブを作成する。「[AWS IoT ジョブ](iot-jobs.md)」を参照してください。

**注記**  
 AWS IoT Core ポリシーがアタッチされているモノの静的グループにモノがアタッチされている場合、モノの名前はクライアント ID と一致する必要があります。

モノの静的グループのいくつかの制限があります｡
+ グループは、最大 1 つの直接の親を持つことができます。
+ グループが別のグループの子である場合は、作成時に指定します。
+ グループの親は後から変更できません。そのため、グループ階層は入念に計画し、親グループを作成してから、その親グループに含む子グループを作成してください
+ 

  モノが属することができるグループの最大数は、[限られています](https://docs.aws.amazon.com//general/latest/gr/iot_device_management.html#thing-limits)。
+ 1 つのモノを同じ階層の複数のグループに追加することはできません。(つまり、共通の親を共有する 2 つのグループにモノを追加することはできません)。
+ グループ名を変更することはできません。
+ モノのグループ名には、û、é、ñ などの国際文字を含めることはできません。
+ モノのグループ名で個人を特定できる情報を使用しないでください。モノのグループ名は、暗号化されていない通信やレポートに表示される可能性があります。

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

## モノの静的グループの作成
<a name="create-thing-group"></a>

モノの静的グループを作成するには **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 つだけ持つことができます。
モノのグループが持つことができる直接の子グループの数は、[限られています](https://docs.aws.amazon.com//general/latest/gr/iot_device_management.html#thing-group-limits)。
グループの階層の最大深度は[限られています](https://docs.aws.amazon.com//general/latest/gr/iot_device_management.html#thing-group-limits)。
モノのグループが持つことのできる属性の数は、[限られています](https://docs.aws.amazon.com//general/latest/gr/iot_device_management.html#thing-group-limits)。(属性は、グループに関する情報を格納するのに使用できる名前と値のペアです。) 各属性名と各値の長さも[限られています](https://docs.aws.amazon.com//general/latest/gr/iot_device_management.html#thing-group-limits)。

## モノのグループの説明
<a name="describe-thing-group"></a>

**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"
    },
}
```

## モノの静的グループにモノを追加する
<a name="add-thing-to-group"></a>

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

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

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

**重要**  
最大 10 個のグループにモノを追加できます。ただし､1 つのモノを同じ階層の複数のグループに追加することはできません。(つまり、共通の親を共有する 2 つのグループにモノを追加することはできません。)  
1 つのモノができる限り多くのモノのグループに属していて、それらのグループの 1 つ以上がモノの動的グループである場合、[https://docs.aws.amazon.com/iot/latest/apireference/API_AddThingToThingGroup.html#iot-AddThingToThingGroup-request-overrideDynamicGroups](https://docs.aws.amazon.com/iot/latest/apireference/API_AddThingToThingGroup.html#iot-AddThingToThingGroup-request-overrideDynamicGroups) フラグを使用して、静的グループが動的グループより優先されるように指定できます。

## モノの静的グループからモノを削除する
<a name="remove-thing-from-group"></a>

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

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

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

## モノのグループ内のモノを一覧表示する
<a name="list-things-in-thing-group"></a>

**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"
    ]
}
```

**注記**  
このオペレーションは[結果整合性があります](https://web.stanford.edu/class/cs345d-01/rl/eventually-consistent.pdf)。言い換えれば、モノのグループへの変更はすぐに反映されない可能性があります。

## モノのグループの一覧表示
<a name="list-thing-groups"></a>

**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"
        }
    ]
}
```

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

```
$ 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"
        }
    ]
}
```

**注記**  
このオペレーションは[結果整合性があります](https://web.stanford.edu/class/cs345d-01/rl/eventually-consistent.pdf)。言い換えれば、モノのグループへの変更はすぐに反映されない可能性があります。

## モノが属するグループを一覧表示する
<a name="list-thing-groups-for-thing"></a>

**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"
        }
    ]
}
```

インライン関数 を使用して、ルールエンジン内でこの API にアクセスすることもできます`get_registry_data()`。この関数を使用すると、 および `DescribeThing` `ListThingGroupsForThing` APIs を AWS IoT ルール内で直接呼び出すことで、モノのレジストリ情報 (属性、モノのタイプ、グループメンバーシップを含む) に動的にアクセスして利用でき、デバイスレジストリデータに基づいてリアルタイムのメッセージ処理とルーティングが可能になります。詳細については、「[https://docs.aws.amazon.com//iot/latest/developerguide/iot-sql-functions.html#iot-sql-function-get-registry_data](https://docs.aws.amazon.com//iot/latest/developerguide/iot-sql-functions.html#iot-sql-function-get-registry_data)」を参照してください。

## モノの静的グループの更新
<a name="update-thing-group"></a>

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

**注記**  
モノが持つことができる属性の数は、[限られています](https://docs.aws.amazon.com//general/latest/gr/iot_device_management.html#thing-limits)。  


## モノのグループを削除する
<a name="delete-thing-group"></a>

モノのグループを削除するには、**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** など) で、そのグループが表示され続けることがあります。

## モノの静的グループにポリシーをアタッチする
<a name="group-attach-policy"></a>

**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.md)

詳細については、「[AWS IoT Core ポリシー](https://docs.aws.amazon.com/iot/latest/developerguide/iot-policies.html)」を参照してください。

## モノの静的グループからポリシーをデタッチする
<a name="group-detach-policy"></a>

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

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

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

## モノの静的グループにアタッチされているポリシーを一覧表示する
<a name="group-list-policies"></a>

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

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

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

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

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

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

## ポリシーのグループを一覧表示する
<a name="group-list-targets-for-policy"></a>

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

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

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

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

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

## モノの有効なポリシーを取得する
<a name="group-get-effective-policies"></a>

**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 ID を指定します。`--cognito-identity-pool-id` のみを指定すると、認証されていないユーザーのアイデンティティプールのロールに関連付けられたポリシーが返されます。両方を使用すると、認証されたユーザーの ID プールのロールに関連付けられたポリシーが返されます。

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

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

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

## MQTT アクションテストの認可
<a name="group-test-authorization"></a>

**TestAuthorization** コマンドを使用して、あるモノに対して [MQTT](https://docs.aws.amazon.com/iot/latest/developerguide/mqtt.html) アクション (`Publish`、`Subscribe`) が許可されているかどうかをテストできます。

```
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 ポリシー](iot-policies.md)」を参照してください。

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