

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

# クライアントデバイス認証
<a name="client-device-auth-component"></a>

クライアントデバイス認証コンポーネント (`aws.greengrass.clientdevices.Auth`) がクライアントデバイスを認証し、クライアントデバイスのアクションを承認します。

**注記**  <a name="client-device-component-context"></a>
クライアントデバイスは、Greengrass コアデバイスに接続し、処理するために MQTT メッセージとデータを送信するローカル IoT デバイスです。詳細については、「[ローカル IoT デバイスとやり取りする](interact-with-local-iot-devices.md)」を参照してください。

**Topics**
+ [バージョン](#client-device-auth-component-versions)
+ [タイプ](#client-device-auth-component-type)
+ [オペレーティングシステム](#client-device-auth-component-os-support)
+ [要件](#client-device-auth-component-requirements)
+ [依存関係](#client-device-auth-component-dependencies)
+ [構成](#client-device-auth-component-configuration)
+ [ローカルログファイル](#client-device-auth-component-log-file)
+ [変更ログ](#client-device-auth-component-changelog)

## バージョン
<a name="client-device-auth-component-versions"></a>

**注記**  
クライアントデバイス認証バージョン 2.3.0 は廃止されました。クライアントデバイス認証バージョン 2.3.1 以降にアップグレードすることを強くお勧めします。

このコンポーネントには、次のバージョンがあります。
+ 2.5.x
+ 2.4.x
+ 2.3.x
+ 2.2.x
+ 2.1.x
+ 2.0.x

## タイプ
<a name="client-device-auth-component-type"></a>

<a name="public-component-type-plugin-para1"></a>このコンポーネントはプラグインコンポーネント (`aws.greengrass.plugin`) です。[Greengrass nucleus](greengrass-nucleus-component.md) は、nucleus と同じ Java バーチャルマシン (JVM) でこのコンポーネントを実行します。コアデバイスでこのコンポーネントのバージョンを変更するとき、nucleus が再起動します。

<a name="public-component-type-plugin-para2"></a>このコンポーネントは、Greengrass nucleus と同じログファイルを使用します。詳細については、「[AWS IoT Greengrass ログのモニタリング](monitor-logs.md)」を参照してください。

<a name="public-component-type-more-information"></a>詳細については、「[コンポーネントタイプ](develop-greengrass-components.md#component-types)」を参照してください。

## オペレーティングシステム
<a name="client-device-auth-component-os-support"></a>

このコンポーネントは、次のオペレーティングシステムを実行するコアデバイスにインストールできます。
+ Linux
+ Windows

## 要件
<a name="client-device-auth-component-requirements"></a>

このコンポーネントには次の要件があります。
+ [Greengrass サービスロール](greengrass-service-role.md)を に関連付け AWS アカウント 、 アクセス`iot:DescribeCertificate`許可を付与する必要があります。
+ コアデバイスの AWS IoT ポリシーでは、次のアクセス許可を許可する必要があります。
  + `greengrass:GetConnectivityInfo`。リソースには、このコンポーネントを実行するコアデバイスの ARN が含まれます。
  + `greengrass:VerifyClientDeviceIoTCertificateAssociation`。リソースには、コアデバイスに接続する各クライアントデバイスの Amazon リソースネーム (ARN) が含まれます。
  + `greengrass:VerifyClientDeviceIdentity`
  + `greengrass:PutCertificateAuthorities`
  + `iot:Publish`。リソースには、次の MQTT トピックの ARN が含まれます。
    + `$aws/things/coreDeviceThingName*-gci/shadow/get`
  + `iot:Subscribe`。リソースには、次の MQTT トピックフィルターの ARN が含まれます。
    + `$aws/things/coreDeviceThingName*-gci/shadow/update/delta`
    + `$aws/things/coreDeviceThingName*-gci/shadow/get/accepted`
  + `iot:Receive`。リソースには、次の MQTT トピックの ARN が含まれます。
    + `$aws/things/coreDeviceThingName*-gci/shadow/update/delta`
    + `$aws/things/coreDeviceThingName*-gci/shadow/get/accepted`

  詳細については、「[AWS IoT データプレーンオペレーションの ポリシー](device-auth.md#iot-policies)」および「[クライアントデバイスをサポートする最小 AWS IoT ポリシー](device-auth.md#client-device-support-minimal-iot-policy)」を参照してください。
+ (オプション) オフライン認証を使用するには、サービスで使用される AWS Identity and Access Management (IAM) ロールに AWS IoT Greengrass 次のアクセス許可が含まれている必要があります。
  + コアデバイスでオフライン認証用のクライアントを一覧表示できるようにするための `greengrass:ListClientDevicesAssociatedWithCoreDevice`。
+ クライアントデバイスの認証コンポーネントは、VPC で実行できるようにサポートされています。このコンポーネントを VPC にデプロイするには、以下が必要です。
  + クライアントデバイス認証コンポーネントは AWS IoT data、、 AWS IoT 認証情報、および Amazon S3 に接続する必要があります。

### エンドポイントおよびポート
<a name="client-device-auth-component-endpoints"></a>

このコンポーネントは、基本的な操作に必要なエンドポイントとポートに加えて、次のエンドポイントとポートに対し、アウトバウンドリクエストを実行できる必要があります。詳細については、「[プロキシまたはファイアウォールを介したデバイストラフィックを許可する](allow-device-traffic.md)」を参照してください。


| Endpoint | ポート | 必要 | 説明 | 
| --- | --- | --- | --- | 
|  `iot.region.amazonaws.com`  | 443 | はい |   AWS IoT モノの証明書に関する情報を取得するために使用します。  | 

## 依存関係
<a name="client-device-auth-component-dependencies"></a>

コンポーネントをデプロイすると、 は互換性のあるバージョンの依存関係 AWS IoT Greengrass もデプロイします。つまり、コンポーネントを正常にデプロイするには、コンポーネントとその依存関係のすべての要件を満たす必要があります。このセクションでは、このコンポーネントの[リリースされたバージョン](#client-device-auth-component-changelog)の依存関係と、各依存関係に対するコンポーネントのバージョンを定義するセマンティックバージョン制約をリスト表示しています。コンポーネントの各バージョンの依存関係は、[AWS IoT Greengrass コンソール](https://console.aws.amazon.com//greengrass)でも確認できます。コンポーネントの詳細ページで **[Dependencies]** (依存関係) リストを確認します。

------
#### [ 2.5.5 ]

次の表に、このコンポーネントのバージョン 2.5.5 の依存関係を示します。


| 依存関係 | 互換性のあるバージョン | 依存関係タイプ | 
| --- | --- | --- | 
| [Greengrass nucleus](greengrass-nucleus-component.md) | >=2.6.0 <2.17.0 | ソフト | 

------
#### [ 2.5.4 ]

次の表に、このコンポーネントのバージョン 2.5.4 の依存関係を示します。


| 依存関係 | 互換性のあるバージョン | 依存関係タイプ | 
| --- | --- | --- | 
| [Greengrass nucleus](greengrass-nucleus-component.md) | >=2.6.0 <2.16.0 | ソフト | 

------
#### [ 2.5.2 – 2.5.3 ]

次の表に、このコンポーネントのバージョン 2.5.2 および 2.5.3 の依存関係を示します。


| 依存関係 | 互換性のあるバージョン | 依存関係タイプ | 
| --- | --- | --- | 
| [Greengrass nucleus](greengrass-nucleus-component.md) | >=2.6.0 <2.15.0 | ソフト | 

------
#### [ 2.5.1 ]

次の表に、このコンポーネントのバージョン 2.5.1 の依存関係を示します。


| 依存関係 | 互換性のあるバージョン | 依存関係タイプ | 
| --- | --- | --- | 
| [Greengrass nucleus](greengrass-nucleus-component.md) | >=2.6.0 <2.14.0 | ソフト | 

------
#### [ 2.4.4 - 2.5.0 ]

次の表に、このコンポーネントのバージョン 2.4.4 の依存関係を示します。


| 依存関係 | 互換性のあるバージョン | 依存関係タイプ | 
| --- | --- | --- | 
| [Greengrass nucleus](greengrass-nucleus-component.md) | >=2.6.0 <2.13.0 | ソフト | 

------
#### [ 2.4.3 ]

次の表に、このコンポーネントのバージョン 2.4.3 の依存関係を示します。


| 依存関係 | 互換性のあるバージョン | 依存関係タイプ | 
| --- | --- | --- | 
| [Greengrass nucleus](greengrass-nucleus-component.md) | >=2.6.0 <2.12.0 | ソフト | 

------
#### [ 2.4.1 and 2.4.2 ]

次の表に、このコンポーネントのバージョン 2.4.1 および 2.4.2 の依存関係を示します。


| 依存関係 | 互換性のあるバージョン | 依存関係タイプ | 
| --- | --- | --- | 
| [Greengrass nucleus](greengrass-nucleus-component.md) | >=2.6.0 <2.11.0 | ソフト | 

------
#### [ 2.3.0 – 2.4.0 ]

次の表に、このコンポーネントのバージョン 2.3.0 から 2.4.0 までの依存関係を示します。


| 依存関係 | 互換性のあるバージョン | 依存関係タイプ | 
| --- | --- | --- | 
| [Greengrass nucleus](greengrass-nucleus-component.md) | >=2.6.0 <2.10.0 | ソフト | 

------
#### [ 2.3.0 ]

次の表に、このコンポーネントのバージョン 2.3.0 の依存関係を示します。


| 依存関係 | 互換性のあるバージョン | 依存関係タイプ | 
| --- | --- | --- | 
| [Greengrass nucleus](greengrass-nucleus-component.md) | >=2.6.0 <2.10.0 | ソフト | 

------
#### [ 2.2.3 ]

次の表に、このコンポーネントのバージョン 2.2.3 の依存関係を示します。


| 依存関係 | 互換性のあるバージョン | 依存関係タイプ | 
| --- | --- | --- | 
| [Greengrass nucleus](greengrass-nucleus-component.md) | >=2.6.0 <=2.9.0 | ソフト | 

------
#### [ 2.2.2 ]

次の表に、このコンポーネントのバージョン 2.2.2 の依存関係を示します。


| 依存関係 | 互換性のあるバージョン | 依存関係タイプ | 
| --- | --- | --- | 
| [Greengrass nucleus](greengrass-nucleus-component.md) | >=2.6.0 <=2.8.0 | ソフト | 

------
#### [ 2.2.1 ]

次の表に、このコンポーネントのバージョン 2.2.1 の依存関係を示します。


| 依存関係 | 互換性のあるバージョン | 依存関係タイプ | 
| --- | --- | --- | 
| [Greengrass nucleus](greengrass-nucleus-component.md) | >=2.6.0 <2.8.0 | ソフト | 

------
#### [ 2.2.0 ]

次の表に、このコンポーネントのバージョン 2.2.0 の依存関係を示します。


| 依存関係 | 互換性のあるバージョン | 依存関係タイプ | 
| --- | --- | --- | 
| [Greengrass nucleus](greengrass-nucleus-component.md) | >=2.6.0 <2.7.0 | ソフト | 

------
#### [ 2.1.0 ]

次の表に、このコンポーネントのバージョン 2.1.0 の依存関係を示します。


| 依存関係 | 互換性のあるバージョン | 依存関係タイプ | 
| --- | --- | --- | 
| [Greengrass nucleus](greengrass-nucleus-component.md) | >=2.2.0 <2.7.0 | ソフト | 

------
#### [ 2.0.4 ]

次の表に、このコンポーネントのバージョン 2.0.4 の依存関係を示します。


| 依存関係 | 互換性のあるバージョン | 依存関係タイプ | 
| --- | --- | --- | 
| [Greengrass nucleus](greengrass-nucleus-component.md) | >=2.2.0 <2.6.0 | ソフト | 

------
#### [ 2.0.2 and 2.0.3 ]

次の表に、このコンポーネントのバージョン 2.0.2 および 2.0.3 の依存関係を示します。


| 依存関係 | 互換性のあるバージョン | 依存関係タイプ | 
| --- | --- | --- | 
| [Greengrass nucleus](greengrass-nucleus-component.md) | >=2.2.0 <2.5.0 | ソフト | 

------
#### [ 2.0.1 ]

次の表に、このコンポーネントのバージョン 2.0.1 の依存関係を示します。


| 依存関係 | 互換性のあるバージョン | 依存関係タイプ | 
| --- | --- | --- | 
| [Greengrass nucleus](greengrass-nucleus-component.md) | >=2.2.0 <2.4.0 | ソフト | 

------
#### [ 2.0.0 ]

次の表に、このコンポーネントのバージョン 2.0.0 の依存関係を示します。


| 依存関係 | 互換性のあるバージョン | 依存関係タイプ | 
| --- | --- | --- | 
| [Greengrass nucleus](greengrass-nucleus-component.md) | >=2.2.0 <2.3.0 | ソフト | 

------

コンポーネントの依存関係の詳細については、「[コンポーネント recipe のリファレンス](component-recipe-reference.md#recipe-reference-component-dependencies)」を参照してください。

## 構成
<a name="client-device-auth-component-configuration"></a>

このコンポーネントには、コンポーネントのデプロイ時にカスタマイズできる次の設定パラメータが用意されています。

**注記**  
サブスクライブアクセス許可は、ローカル MQTT ブローカーへのクライアントサブスクライブリクエスト中に評価されます。クライアントの既存のサブスクライブアクセス許可が取り消されると、クライアントはトピックをサブスクライブできなくなります。ただし、以前にサブスクライブしたトピックからのメッセージは引き続き受信されます。この動作を回避するには、クライアントの再認証を強制するサブスクライブアクセス許可を取り消した後、ローカル MQTT ブローカーを再起動する必要があります。  
MQTT 5 ブローカー (EMQX) コンポーネントの場合は、`restartIdentifier` 設定を更新して MQTT 5 ブローカーを再起動します。  
MQTT 3.1.1 ブローカー (Moquette) コンポーネントでは、サーバー証明書が変更されてクライアントへの再承認が必要になると、デフォルトで毎週再起動します。コアデバイスの接続情報 (IP アドレス) を変更するか、デプロイを実行してブローカーコンポーネントを削除し、後で再度デプロイすることで、強制的に再起動できます。

------
#### [ v2.5.0 – 2.5.4 ]

`deviceGroups`  
デバイスグループは、コアデバイスに接続して通信する権限を持つクライアントデバイスのグループです。選択ルールを使用してクライアントデバイスのグループを特定し、各デバイスグループにアクセス許可を指定する、*クライアントデバイス認証ポリシー*を定義します。  
このオブジェクトには、次の情報が含まれます。    
`formatVersion`  
この設定オブジェクトの形式バージョン。  
次のオプションから選択します。  
+ `2021-03-05`  
`definitions`  
このコアデバイスのデバイスグループ。各定義では、クライアントデバイスがグループのメンバーであるかどうかを評価する*選択ルール*を指定します。各定義では、選択ルールに一致するクライアントデバイスに適用するアクセス権限ポリシーも指定します。クライアントデバイスが複数のデバイスグループのメンバーである場合、デバイスのアクセス許可は各グループのアクセス許可ポリシーで設定されます。  
このオブジェクトには、次の情報が含まれます。    
`groupNameKey`  
このデバイスグループの名前。*GroupNameKey* を、このデバイスグループを識別しやすい名前に置き換えます。  
このオブジェクトには、次の情報が含まれます。    
`selectionRule`  
このデバイスグループのメンバーであるクライアントデバイスを指定するクエリ。クライアントデバイスが接続されると、コアデバイスはこの選択ルールを評価して、クライアントデバイスがこのデバイスグループのメンバーであるかどうかを判断します。クライアントデバイスがメンバーである場合、コアデバイスはこのデバイスグループのポリシーを使用して、クライアントデバイスのアクションを承認します。  
各選択ルールは、少なくとも 1 つの*選択ルール句*で構成されます。この句は、クライアントデバイスと一致できる単一の式クエリです。選択ルールは、 AWS IoT フリートインデックス作成と同じクエリ構文を使用します。選択ルール構文に関する詳細については、「*AWS IoT Core デベロッパーガイド*」の「[AWS IoT fleet indexing query syntax](https://docs.aws.amazon.com/iot/latest/developerguide/query-syntax.html)」を参照してください。  
`*` ワイルドカードを使用して、複数のクライアントデバイスを 1 つの選択ルール句と一致させます。モノの名前の先頭と末尾にこのワイルドカードを使用すると、指定した文字列で始まる、または終わる名前のクライアントデバイスと一致させることができます。このワイルドカードを使用して、すべてのクライアントデバイスと一致させることもできます。  
コロン文字 (`:`) を含む値を選択する場合は、コロン文字にバックスラッシュ文字 (`\`) を使用してエスケープします。JSON などの形式では、バックスラッシュ文字をエスケープする必要があるため、コロン文字の前に 2 つのバックスラッシュ文字を入力する必要があります。例えば、`thingName: MyTeam\\:ClientDevice1` が `MyTeam:ClientDevice1` という名前のモノを選択するように指定する場合です。
次のセレクターを指定できます。  
+ `thingName` – クライアントデバイスの AWS IoT モノの名前。

**Example 選択ルール例**  
次の選択ルールは、名前が `MyClientDevice1` または `MyClientDevice2` のクライアントデバイスと一致します。  

```
thingName: MyClientDevice1 OR thingName: MyClientDevice2
```

**Example 選択ルール例 (ワイルドカードを使用)**  
次の選択ルールは、名前が `MyClientDevice` で始まるクライアントデバイスと一致します。  

```
thingName: MyClientDevice*
```

**Example 選択ルール例 (ワイルドカードを使用)**  
次の選択ルールは、名前が `MyClientDevice` で始まるクライアントデバイスと一致します。  

```
thingName: *MyClientDevice
```

**Example 選択ルール例 (すべてのデバイスに一致)**  
次の選択ルールは、すべてのクライアントデバイスと一致します。  

```
thingName: *
```  
`policyName`  
このデバイスグループ内のクライアントデバイスに適用されるアクセス許可ポリシー。`policies` オブジェクトで定義するポリシーの名前を指定します。  
`policies`  
コアデバイスに接続するクライアントデバイス用の、クライアントデバイス認可ポリシー。各承認ポリシーは、クライアントデバイスがこれらのアクションを実行できるアクションセットとリソースを指定しています。  
このオブジェクトには、次の情報が含まれます。    
`policyNameKey`  
この承認ポリシーの名前。*policyNameKey* を、この承認ポリシーを識別するのに役立つ名前に置き換えます。このポリシー名を使用して、デバイスグループに適用するポリシーを定義します。  
このオブジェクトには、次の情報が含まれます。    
`statementNameKey`  
このポリシーステートメントの名前。*statementNameKey* を、このポリシーステートメントを識別するのに役立つ名前に置き換えます。  
このオブジェクトには、次の情報が含まれます。    
`operations`  
このポリシーのリソースに許可する操作のリスト。  
以下のすべての操作を含めることができます。  
+ `mqtt:connect` - コアデバイスに接続するアクセス許可を付与します。コアデバイスに接続するには、クライアントデバイスにこのアクセス許可が必要です。

  この操作は、次のリソースをサポートします。
  + `mqtt:clientId:deviceClientId` - クライアントデバイスがコアデバイスの MQTT ブローカーへの接続に使用するクライアント ID に基づいて、アクセスを制限します。*deviceClientId* を使用するクライアント ID に置き換えます。
+ `mqtt:publish` - MQTT メッセージをトピックにパブリッシュする権限を付与します。

  この操作は、次のリソースをサポートします。
  + <a name="client-device-authorization-policy-resource-mqtt-topic"></a>`mqtt:topic:mqttTopic` - クライアントデバイスがメッセージをパブリッシュする MQTT トピックに基づいて、アクセスを制限します。*mqttTopic* を使用するトピックに置き換えます。

    このリソースは MQTT トピックのワイルドカードをサポートしていません。
+ `mqtt:subscribe` - メッセージを受信する MQTT トピックフィルターにサブスクライブする許可を付与します。

  この操作は、次のリソースをサポートします。
  + `mqtt:topicfilter:mqttTopicFilter` - クライアントデバイスがメッセージにサブスクライブできる MQTT トピックに基づいて、アクセスを制限します。*mqttTopicFilter* を使用するトピックフィルターに置き換えます。

    このリソースは MQTT トピックのワイルドカードをサポートしていません。  
`resources`  
このポリシーでの操作を許可するリソースのリスト。このポリシーでの操作に対応するリソースを指定します。例えば、`mqtt:publish` 操作を指定するポリシーで、MQTT トピックリソース (`mqtt:topic:mqttTopic`) のリストを指定することができます。  
リソースの変数ないの任意の場所で `*` ワイルドカードを指定すれば、すべてのリソースへのアクセスを許可することができます。例えば、**mqtt:topic:my\$1** を指定して、その入力に一致するリソースへのアクセスを許可できます。  
次のリソース変数がサポートされています。  
+ `mqtt:topic:${iot:Connection.Thing.ThingName}`

  これは、ポリシーが評価されている AWS IoT Core レジストリ内のモノの名前に解決されます。 は、デバイスが認証するときに提示する証明書 AWS IoT Core を使用して、接続の検証に使用するモノを決定します。このポリシー変数は、デバイスが MQTT または MQTT over WebSocket プロトコルに接続するときにのみ使用できます。  
`statementDescription`  
(オプション) このポリシーステートメントの説明。

`certificates`  <a name="client-device-auth-component-configuration-certificates"></a>
(オプション) このコアデバイスの証明書設定オプション。このオブジェクトには、次の情報が含まれます。    
`serverCertificateValiditySeconds`  
(オプション) ローカル MQTT サーバー証明書の有効期限が切れるまでの時間 (秒単位)。このオプションを設定すれば、クライアントデバイスがコアデバイスから切断し、また再接続する回数をカスタマイズすることができます。  
このコンポーネントは、有効期限が切れる 24 時間前に、ローカル MQTT サーバー証明書をローテーションします。[Moquette MQTT ブローカーコンポーネント](mqtt-broker-moquette-component.md)などの MQTT ブローカーで、新しい証明書を生成して再起動します。これが実行されると、このコアデバイスに接続されているすべてのクライアントデバイスが切断されます。クライアントデバイスは、短時間待機した後に、コアデバイスに再度接続できます。  
デフォルト: `604800` (7 日)  
最小値: `172800` (2 日)  
最大値: `864000` (10 日)

`performance`  
(オプション) このコアデバイスのパフォーマンス設定オプション。このオブジェクトには、次の情報が含まれます。    
`maxActiveAuthTokens`  
(オプション) アクティブなクライアントデバイス認可トークンの最大数。この数を増やすと、より多くのクライアントデバイスが、再認証せずに単一のコアデバイスに接続できるようになります。  
デフォルト: `2500`  
`cloudRequestQueueSize`  
(オプション) このコンポーネントが AWS クラウド リクエストを拒否するまでのキューへのリクエストの最大数。  
デフォルト: `100`  
`maxConcurrentCloudRequests`  
(オプション) AWS クラウドに同時に送信できるリクエストの最大数。この数を増やすと、多数のクライアントデバイスを接続するコアデバイスで、認証のパフォーマンスを向上させることができます。  
デフォルト: `1`

`certificateAuthority`  
(オプション) コアデバイスの中間認証機関を独自の中間認証機関に置き換える認証機関設定オプション。  
Greengrass コアデバイスをカスタム認証局 (CA) で設定し、同じ CA を使用してクライアントデバイス証明書を発行する場合、Greengrass はクライアントデバイス MQTT オペレーションの承認ポリシーチェックをバイパスします。クライアントデバイス認証コンポーネントは、使用するように設定された CA によって署名された証明書を使用してクライアントを完全に信頼します。  
カスタム CA を使用する際にこの動作を制限するには、別の CA または中間 CA を使用してクライアントデバイスを作成して署名し、正しい中間 CA を指すように `certificateUri` および `certificateChainUri` フィールドを調整します。
 このオブジェクトには、次の情報が含まれます。    
certificateUri  
証明書の位置。ファイルシステム URI、またはハードウェアセキュリティモジュールに保存されている証明書をポイントする URI にすることができます。  
`certificateChainUri`  
コアデバイス CA の証明書チェーンの場所。これは、ルート CA に対する完全な証明書チェーンとなります。ファイルシステム URI、またはハードウェアセキュリティモジュールに保存されている証明書チェーンをポイントする URI にすることができます。  
`privateKeyUri`  
コアデバイスのプライベートキーの場所。これは、ファイルシステム URI、またはハードウェアセキュリティモジュールに保存されている証明書プライベートキーをポイントする URI にすることができます。

`security`  
(オプション) このコアデバイスのセキュリティ設定オプション。このオブジェクトには、次の情報が含まれます。    
`clientDeviceTrustDurationMinutes`  
クライアントデバイスの認証情報を信頼できる時間 (分)。この時間が経過すると、コアデバイスでの再認証が必要となります。デフォルト値は 1 です。

`metrics`  
(オプション) このコアデバイスのメトリックオプション。エラーメトリックは、クライアントデバイスの認証にエラーがある場合にのみ表示されます。このオブジェクトには、次の情報が含まれます。    
`disableMetrics`  
`disableMetrics` フィールドが `true` に設定されている場合、クライアントデバイス認証はメトリックを収集しません。  
デフォルト: `false`  
`aggregatePeriodSeconds`  
クライアントデバイス認証がメトリクスを集約してテレメトリエージェントに送信する頻度を決定する集計期間 (秒単位)。テレメトリエージェントは依然として 1 日に 1 回メトリクスを公開するので、メトリクスの公開頻度は変わりません。  
デフォルト: `3600`

startupTimeoutSeconds  
(オプション) コンポーネントが起動する最大時間 (秒)。このタイムアウトを超えている場合、コンポーネントの状態が `ERRORED` に変わります。  
デフォルト: `120`

**Example 例: 設定マージの更新 (制限ポリシーを使用)**  <a name="client-device-auth-component-configuration-example-restrictive"></a>
次の設定例では、名前が `MyClientDevice` で始まるクライアントデバイスに対して、すべてのトピックの接続とパブリッシュ/サブスクライブを許可するように指定しています。  

```
{
  "deviceGroups": {
    "formatVersion": "2021-03-05",
    "definitions": {
      "MyDeviceGroup": {
        "selectionRule": "thingName: MyClientDevice*",
        "policyName": "MyRestrictivePolicy"
      }
    },
    "policies": {
      "MyRestrictivePolicy": {
        "AllowConnect": {
          "statementDescription": "Allow client devices to connect.",
          "operations": [
            "mqtt:connect"
          ],
          "resources": [
            "*"
          ]
        },
        "AllowPublish": {
          "statementDescription": "Allow client devices to publish on test/topic.",
          "operations": [
            "mqtt:publish"
          ],
          "resources": [
            "mqtt:topic:test/topic"
          ]
        },
        "AllowSubscribe": {
          "statementDescription": "Allow client devices to subscribe to test/topic/response.",
          "operations": [
            "mqtt:subscribe"
          ],
          "resources": [
            "mqtt:topicfilter:test/topic/response"
          ]
        }
      }
    }
  }
}
```

**Example 例: 設定マージの更新 (許容ポリシーを使用)**  <a name="client-device-auth-component-configuration-example-permissive"></a>
次の設定例では、すべてのクライアントデバイスに対して、すべてのトピックに接続しパブリッシュ/サブスクライブすることを許可しています。  

```
{
  "deviceGroups": {
    "formatVersion": "2021-03-05",
    "definitions": {
      "MyPermissiveDeviceGroup": {
        "selectionRule": "thingName: *",
        "policyName": "MyPermissivePolicy"
      }
    },
    "policies": {
      "MyPermissivePolicy": {
        "AllowAll": {
          "statementDescription": "Allow client devices to perform all actions.",
          "operations": [
            "*"
          ],
          "resources": [
            "*"
          ]
        }
      }
    }
  }
}
```

**Example 例: 設定マージの更新 (モノの名前のポリシーを使用)**  <a name="client-device-auth-component-configuration-example-mythingname"></a>
次の設定例では、クライアントデバイスがクライアントデバイスのモノの名前で始まり、文字列 `topic` で終わるトピックに発行できるようにします。  

```
{
  "deviceGroups": {
    "formatVersion": "2021-03-05",
    "definitions": {
      "myThing": {
        "selectionRule": "thingName: *",
        "policyName": "MyThingNamePolicy"
      }
    },
    "policies": {
      "MyThingNamePolicy": {
        "policyStatement": {
          "statementDescription": "mqtt publish",
          "operations": [
            "mqtt:publish"
          ],
          "resources": [
            "mqtt:topic:${iot:Connection.Thing.ThingName}/*/topic"
          ]
        }
      }
    }
  }
}
```

------
#### [ v2.4.5 ]

`deviceGroups`  
デバイスグループは、コアデバイスに接続して通信する権限を持つクライアントデバイスのグループです。選択ルールを使用してクライアントデバイスのグループを特定し、各デバイスグループにアクセス許可を指定する、*クライアントデバイス認証ポリシー*を定義します。  
このオブジェクトには、次の情報が含まれます。    
`formatVersion`  
この設定オブジェクトの形式バージョン。  
次のオプションから選択します。  
+ `2021-03-05`  
`definitions`  
このコアデバイスのデバイスグループ。各定義では、クライアントデバイスがグループのメンバーであるかどうかを評価する*選択ルール*を指定します。各定義では、選択ルールに一致するクライアントデバイスに適用するアクセス権限ポリシーも指定します。クライアントデバイスが複数のデバイスグループのメンバーである場合、デバイスのアクセス許可は各グループのアクセス許可ポリシーで設定されます。  
このオブジェクトには、次の情報が含まれます。    
`groupNameKey`  
このデバイスグループの名前。*GroupNameKey* を、このデバイスグループを識別しやすい名前に置き換えます。  
このオブジェクトには、次の情報が含まれます。    
`selectionRule`  
このデバイスグループのメンバーであるクライアントデバイスを指定するクエリ。クライアントデバイスが接続されると、コアデバイスはこの選択ルールを評価して、クライアントデバイスがこのデバイスグループのメンバーであるかどうかを判断します。クライアントデバイスがメンバーである場合、コアデバイスはこのデバイスグループのポリシーを使用して、クライアントデバイスのアクションを承認します。  
各選択ルールは、少なくとも 1 つの*選択ルール句*で構成されます。この句は、クライアントデバイスと一致できる単一の式クエリです。選択ルールは、 AWS IoT フリートインデックス作成と同じクエリ構文を使用します。選択ルール構文に関する詳細については、「*AWS IoT Core デベロッパーガイド*」の「[AWS IoT fleet indexing query syntax](https://docs.aws.amazon.com/iot/latest/developerguide/query-syntax.html)」を参照してください。  
`*` ワイルドカードを使用して、複数のクライアントデバイスを 1 つの選択ルール句と一致させます。モノの名前の先頭と末尾にこのワイルドカードを使用すると、指定した文字列で始まる、または終わる名前のクライアントデバイスと一致させることができます。このワイルドカードを使用して、すべてのクライアントデバイスと一致させることもできます。  
コロン文字 (`:`) を含む値を選択する場合は、コロン文字にバックスラッシュ文字 (`\`) を使用してエスケープします。JSON などの形式では、バックスラッシュ文字をエスケープする必要があるため、コロン文字の前に 2 つのバックスラッシュ文字を入力する必要があります。例えば、`thingName: MyTeam\\:ClientDevice1` が `MyTeam:ClientDevice1` という名前のモノを選択するように指定する場合です。
次のセレクターを指定できます。  
+ `thingName` – クライアントデバイスの AWS IoT モノの名前。

**Example 選択ルール例**  
次の選択ルールは、名前が `MyClientDevice1` または `MyClientDevice2` のクライアントデバイスと一致します。  

```
thingName: MyClientDevice1 OR thingName: MyClientDevice2
```

**Example 選択ルール例 (ワイルドカードを使用)**  
次の選択ルールは、名前が `MyClientDevice` で始まるクライアントデバイスと一致します。  

```
thingName: MyClientDevice*
```

**Example 選択ルール例 (ワイルドカードを使用)**  
次の選択ルールは、名前が `MyClientDevice` で始まるクライアントデバイスと一致します。  

```
thingName: *MyClientDevice
```

**Example 選択ルール例 (すべてのデバイスに一致)**  
次の選択ルールは、すべてのクライアントデバイスと一致します。  

```
thingName: *
```  
`policyName`  
このデバイスグループ内のクライアントデバイスに適用されるアクセス許可ポリシー。`policies` オブジェクトで定義するポリシーの名前を指定します。  
`policies`  
コアデバイスに接続するクライアントデバイス用の、クライアントデバイス認可ポリシー。各承認ポリシーは、クライアントデバイスがこれらのアクションを実行できるアクションセットとリソースを指定しています。  
このオブジェクトには、次の情報が含まれます。    
`policyNameKey`  
この承認ポリシーの名前。*policyNameKey* を、この承認ポリシーを識別するのに役立つ名前に置き換えます。このポリシー名を使用して、デバイスグループに適用するポリシーを定義します。  
このオブジェクトには、次の情報が含まれます。    
`statementNameKey`  
このポリシーステートメントの名前。*statementNameKey* を、このポリシーステートメントを識別するのに役立つ名前に置き換えます。  
このオブジェクトには、次の情報が含まれます。    
`operations`  
このポリシーのリソースに許可する操作のリスト。  
以下のすべての操作を含めることができます。  
+ `mqtt:connect` - コアデバイスに接続するアクセス許可を付与します。コアデバイスに接続するには、クライアントデバイスにこのアクセス許可が必要です。

  この操作は、次のリソースをサポートします。
  + `mqtt:clientId:deviceClientId` - クライアントデバイスがコアデバイスの MQTT ブローカーへの接続に使用するクライアント ID に基づいて、アクセスを制限します。*deviceClientId* を使用するクライアント ID に置き換えます。
+ `mqtt:publish` - MQTT メッセージをトピックにパブリッシュする権限を付与します。

  この操作は、次のリソースをサポートします。
  + <a name="client-device-authorization-policy-resource-mqtt-topic"></a>`mqtt:topic:mqttTopic` - クライアントデバイスがメッセージをパブリッシュする MQTT トピックに基づいて、アクセスを制限します。*mqttTopic* を使用するトピックに置き換えます。

    このリソースは MQTT トピックのワイルドカードをサポートしていません。
+ `mqtt:subscribe` - メッセージを受信する MQTT トピックフィルターにサブスクライブする許可を付与します。

  この操作は、次のリソースをサポートします。
  + <a name="client-device-authorization-policy-resource-mqtt-topicfilter"></a>`mqtt:topicfilter:mqttTopicFilter` - クライアントデバイスがメッセージにサブスクライブできる MQTT トピックに基づいて、アクセスを制限します。*mqttTopicFilter* を使用するトピックフィルターに置き換えます。

    このリソースは `+` および `#` MQTT トピックのワイルドカードをサポートしています。詳細については、「*AWS IoT Core デベロッパーガイド*」の「[MQTT topics](https://docs.aws.amazon.com/iot/latest/developerguide/topics.html)」を参照してください。

    クライアントデバイスは、許可を付与したトピックフィルターにのみサブスクライブできます。例えば、クライアントデバイスに `mqtt:topicfilter:client/+/status` リソースへのサブスクライブを許可した場合、クライアントデバイスは `client/+/status` にサブスクライブできますが、`client/client1/status` にはサブスクライブできません。
`*` ワイルドカードを指定すれば、すべてのアクションへのアクセスを許可することができます。  
`resources`  
このポリシーでの操作を許可するリソースのリスト。このポリシーでの操作に対応するリソースを指定します。例えば、`mqtt:publish` 操作を指定するポリシーで、MQTT トピックリソース (`mqtt:topic:mqttTopic`) のリストを指定することができます。  
`*` ワイルドカードを指定すれば、すべてのリソースへのアクセスを許可することができます。`*` ワイルドカードを使用して、部分的なリソース識別子と一致させることはできません。例えば、**"resources": "\$1"** と指定することはできますが、**"resources": "mqtt:clientId:\$1"** と指定することはできません。  
`statementDescription`  
(オプション) このポリシーステートメントの説明。

`certificates`  <a name="client-device-auth-component-configuration-certificates"></a>
(オプション) このコアデバイスの証明書設定オプション。このオブジェクトには、次の情報が含まれます。    
`serverCertificateValiditySeconds`  
(オプション) ローカル MQTT サーバー証明書の有効期限が切れるまでの時間 (秒単位)。このオプションを設定すれば、クライアントデバイスがコアデバイスから切断し、また再接続する回数をカスタマイズすることができます。  
このコンポーネントは、有効期限が切れる 24 時間前に、ローカル MQTT サーバー証明書をローテーションします。[Moquette MQTT ブローカーコンポーネント](mqtt-broker-moquette-component.md)などの MQTT ブローカーで、新しい証明書を生成して再起動します。これが実行されると、このコアデバイスに接続されているすべてのクライアントデバイスが切断されます。クライアントデバイスは、短時間待機した後に、コアデバイスに再度接続できます。  
デフォルト: `604800` (7 日)  
最小値: `172800` (2 日)  
最大値: `864000` (10 日)

`performance`  
(オプション) このコアデバイスのパフォーマンス設定オプション。このオブジェクトには、次の情報が含まれます。    
`maxActiveAuthTokens`  
(オプション) アクティブなクライアントデバイス認可トークンの最大数。この数を増やすと、より多くのクライアントデバイスが、再認証せずに単一のコアデバイスに接続できるようになります。  
デフォルト: `2500`  
`cloudRequestQueueSize`  
(オプション) このコンポーネントが AWS クラウド リクエストを拒否するまでのキューへのリクエストの最大数。  
デフォルト: `100`  
`maxConcurrentCloudRequests`  
(オプション) AWS クラウドに同時に送信できるリクエストの最大数。この数を増やすと、多数のクライアントデバイスを接続するコアデバイスで、認証のパフォーマンスを向上させることができます。  
デフォルト: `1`

`certificateAuthority`  
(オプション) コアデバイスの中間認証機関を独自の中間認証機関に置き換える認証機関設定オプション。  
Greengrass コアデバイスをカスタム認証局 (CA) で設定し、同じ CA を使用してクライアントデバイス証明書を発行する場合、Greengrass はクライアントデバイス MQTT オペレーションの承認ポリシーチェックをバイパスします。クライアントデバイス認証コンポーネントは、使用するように設定された CA によって署名された証明書を使用してクライアントを完全に信頼します。  
カスタム CA を使用する際にこの動作を制限するには、別の CA または中間 CA を使用してクライアントデバイスを作成して署名し、正しい中間 CA を指すように `certificateUri` および `certificateChainUri` フィールドを調整します。
 このオブジェクトには、次の情報が含まれます。    
certificateUri  
証明書の位置。ファイルシステム URI、またはハードウェアセキュリティモジュールに保存されている証明書をポイントする URI にすることができます。  
`certificateChainUri`  
コアデバイス CA の証明書チェーンの場所。これは、ルート CA に対する完全な証明書チェーンとなります。ファイルシステム URI、またはハードウェアセキュリティモジュールに保存されている証明書チェーンをポイントする URI にすることができます。  
`privateKeyUri`  
コアデバイスのプライベートキーの場所。これは、ファイルシステム URI、またはハードウェアセキュリティモジュールに保存されている証明書プライベートキーをポイントする URI にすることができます。

`security`  
(オプション) このコアデバイスのセキュリティ設定オプション。このオブジェクトには、次の情報が含まれます。    
`clientDeviceTrustDurationMinutes`  
クライアントデバイスの認証情報を信頼できる時間 (分)。この時間が経過すると、コアデバイスでの再認証が必要となります。デフォルト値は 1 です。

`metrics`  
(オプション) このコアデバイスのメトリックオプション。エラーメトリックは、クライアントデバイスの認証にエラーがある場合にのみ表示されます。このオブジェクトには、次の情報が含まれます。    
`disableMetrics`  
`disableMetrics` フィールドが `true` に設定されている場合、クライアントデバイス認証はメトリックを収集しません。  
デフォルト: `false`  
`aggregatePeriodSeconds`  
クライアントデバイス認証がメトリクスを集約してテレメトリエージェントに送信する頻度を決定する集計期間 (秒単位)。テレメトリエージェントは依然として 1 日に 1 回メトリクスを公開するので、メトリクスの公開頻度は変わりません。  
デフォルト: `3600`

startupTimeoutSeconds  
(オプション) コンポーネントが起動する最大時間 (秒)。このタイムアウトを超えている場合、コンポーネントの状態が `ERRORED` に変わります。  
デフォルト: `120`

**Example 例: 設定マージの更新 (制限ポリシーを使用)**  <a name="client-device-auth-component-configuration-example-restrictive"></a>
次の設定例では、名前が `MyClientDevice` で始まるクライアントデバイスに対して、すべてのトピックの接続とパブリッシュ/サブスクライブを許可するように指定しています。  

```
{
  "deviceGroups": {
    "formatVersion": "2021-03-05",
    "definitions": {
      "MyDeviceGroup": {
        "selectionRule": "thingName: MyClientDevice*",
        "policyName": "MyRestrictivePolicy"
      }
    },
    "policies": {
      "MyRestrictivePolicy": {
        "AllowConnect": {
          "statementDescription": "Allow client devices to connect.",
          "operations": [
            "mqtt:connect"
          ],
          "resources": [
            "*"
          ]
        },
        "AllowPublish": {
          "statementDescription": "Allow client devices to publish on test/topic.",
          "operations": [
            "mqtt:publish"
          ],
          "resources": [
            "mqtt:topic:test/topic"
          ]
        },
        "AllowSubscribe": {
          "statementDescription": "Allow client devices to subscribe to test/topic/response.",
          "operations": [
            "mqtt:subscribe"
          ],
          "resources": [
            "mqtt:topicfilter:test/topic/response"
          ]
        }
      }
    }
  }
}
```

**Example 例: 設定マージの更新 (許容ポリシーを使用)**  <a name="client-device-auth-component-configuration-example-permissive"></a>
次の設定例では、すべてのクライアントデバイスに対して、すべてのトピックに接続しパブリッシュ/サブスクライブすることを許可しています。  

```
{
  "deviceGroups": {
    "formatVersion": "2021-03-05",
    "definitions": {
      "MyPermissiveDeviceGroup": {
        "selectionRule": "thingName: *",
        "policyName": "MyPermissivePolicy"
      }
    },
    "policies": {
      "MyPermissivePolicy": {
        "AllowAll": {
          "statementDescription": "Allow client devices to perform all actions.",
          "operations": [
            "*"
          ],
          "resources": [
            "*"
          ]
        }
      }
    }
  }
}
```

------
#### [ v2.4.2 - v2.4.4 ]

`deviceGroups`  <a name="client-device-auth-component-configuration-devicegroups"></a>
デバイスグループは、コアデバイスに接続して通信する権限を持つクライアントデバイスのグループです。選択ルールを使用してクライアントデバイスのグループを特定し、各デバイスグループにアクセス許可を指定する、*クライアントデバイス認証ポリシー*を定義します。  
このオブジェクトには、次の情報が含まれます。    
`formatVersion`  
この設定オブジェクトの形式バージョン。  
次のオプションから選択します。  
+ `2021-03-05`  
`definitions`  
このコアデバイスのデバイスグループ。各定義では、クライアントデバイスがグループのメンバーであるかどうかを評価する*選択ルール*を指定します。各定義では、選択ルールに一致するクライアントデバイスに適用するアクセス権限ポリシーも指定します。クライアントデバイスが複数のデバイスグループのメンバーである場合、デバイスのアクセス許可は各グループのアクセス許可ポリシーで設定されます。  
このオブジェクトには、次の情報が含まれます。    
`groupNameKey`  
このデバイスグループの名前。*GroupNameKey* を、このデバイスグループを識別しやすい名前に置き換えます。  
このオブジェクトには、次の情報が含まれます。    
`selectionRule`  
このデバイスグループのメンバーであるクライアントデバイスを指定するクエリ。クライアントデバイスが接続されると、コアデバイスはこの選択ルールを評価して、クライアントデバイスがこのデバイスグループのメンバーであるかどうかを判断します。クライアントデバイスがメンバーである場合、コアデバイスはこのデバイスグループのポリシーを使用して、クライアントデバイスのアクションを承認します。  
各選択ルールは、少なくとも 1 つの*選択ルール句*で構成されます。この句は、クライアントデバイスと一致できる単一の式クエリです。選択ルールは、 AWS IoT フリートインデックス作成と同じクエリ構文を使用します。選択ルール構文に関する詳細については、「*AWS IoT Core デベロッパーガイド*」の「[AWS IoT fleet indexing query syntax](https://docs.aws.amazon.com/iot/latest/developerguide/query-syntax.html)」を参照してください。  
`*` ワイルドカードを使用して、複数のクライアントデバイスを 1 つの選択ルール句と一致させます。モノ名の末尾にこのワイルドカードを使用すると、指定した文字列で始まる名前のクライアントデバイスと一致させることができます。このワイルドカードを使用して、すべてのクライアントデバイスと一致させることもできます。  
コロン文字 (`:`) を含む値を選択する場合は、コロン文字にバックスラッシュ文字 (`\\`) を使用してエスケープします。JSON などの形式では、バックスラッシュ文字をエスケープする必要があるため、コロン文字の前に 2 つのバックスラッシュ文字を入力する必要があります。例えば、`thingName: MyTeam\\\\:ClientDevice1` が `MyTeam:ClientDevice1` という名前のモノを選択するように指定する場合です。
次のセレクターを指定できます。  
+ `thingName` - クライアントデバイスの AWS IoT モノの名前。

**Example 選択ルール例**  
次の選択ルールは、名前が `MyClientDevice1` または `MyClientDevice2` のクライアントデバイスと一致します。  

```
thingName: MyClientDevice1 OR thingName: MyClientDevice2
```

**Example 選択ルール例 (ワイルドカードを使用)**  
次の選択ルールは、名前が `MyClientDevice` で始まるクライアントデバイスと一致します。  

```
thingName: MyClientDevice*
```

**Example 選択ルール例 (すべてのデバイスに一致)**  
次の選択ルールは、すべてのクライアントデバイスと一致します。  

```
thingName: *
```  
`policyName`  
このデバイスグループ内のクライアントデバイスに適用されるアクセス許可ポリシー。`policies` オブジェクトで定義するポリシーの名前を指定します。  
`policies`  
コアデバイスに接続するクライアントデバイス用の、クライアントデバイス認可ポリシー。各承認ポリシーは、クライアントデバイスがこれらのアクションを実行できるアクションセットとリソースを指定しています。  
このオブジェクトには、次の情報が含まれます。    
`policyNameKey`  
この承認ポリシーの名前。*policyNameKey* を、この承認ポリシーを識別するのに役立つ名前に置き換えます。このポリシー名を使用して、デバイスグループに適用するポリシーを定義します。  
このオブジェクトには、次の情報が含まれます。    
`statementNameKey`  
このポリシーステートメントの名前。*statementNameKey* を、このポリシーステートメントを識別するのに役立つ名前に置き換えます。  
このオブジェクトには、次の情報が含まれます。    
`operations`  
このポリシーのリソースに許可する操作のリスト。  
以下のすべての操作を含めることができます。  
+ `mqtt:connect` - コアデバイスに接続するアクセス許可を付与します。コアデバイスに接続するには、クライアントデバイスにこのアクセス許可が必要です。

  この操作は、次のリソースをサポートします。
  + `mqtt:clientId:deviceClientId` - クライアントデバイスがコアデバイスの MQTT ブローカーへの接続に使用するクライアント ID に基づいて、アクセスを制限します。*deviceClientId* を使用するクライアント ID に置き換えます。
+ `mqtt:publish` - MQTT メッセージをトピックにパブリッシュする権限を付与します。

  この操作は、次のリソースをサポートします。
  + <a name="client-device-authorization-policy-resource-mqtt-topic"></a>`mqtt:topic:mqttTopic` - クライアントデバイスがメッセージをパブリッシュする MQTT トピックに基づいて、アクセスを制限します。*mqttTopic* を使用するトピックに置き換えます。

    このリソースは MQTT トピックのワイルドカードをサポートしていません。
+ `mqtt:subscribe` - メッセージを受信する MQTT トピックフィルターにサブスクライブする許可を付与します。

  この操作は、次のリソースをサポートします。
  + <a name="client-device-authorization-policy-resource-mqtt-topicfilter"></a>`mqtt:topicfilter:mqttTopicFilter` - クライアントデバイスがメッセージにサブスクライブできる MQTT トピックに基づいて、アクセスを制限します。*mqttTopicFilter* を使用するトピックフィルターに置き換えます。

    このリソースは `+` および `#` MQTT トピックのワイルドカードをサポートしています。詳細については、「*AWS IoT Core デベロッパーガイド*」の「[MQTT topics](https://docs.aws.amazon.com/iot/latest/developerguide/topics.html)」を参照してください。

    クライアントデバイスは、許可を付与したトピックフィルターにのみサブスクライブできます。例えば、クライアントデバイスに `mqtt:topicfilter:client/+/status` リソースへのサブスクライブを許可した場合、クライアントデバイスは `client/+/status` にサブスクライブできますが、`client/client1/status` にはサブスクライブできません。
`*` ワイルドカードを指定すれば、すべてのアクションへのアクセスを許可することができます。  
`resources`  
このポリシーでの操作を許可するリソースのリスト。このポリシーでの操作に対応するリソースを指定します。例えば、`mqtt:publish` 操作を指定するポリシーで、MQTT トピックリソース (`mqtt:topic:mqttTopic`) のリストを指定することができます。  
`*` ワイルドカードを指定すれば、すべてのリソースへのアクセスを許可することができます。`*` ワイルドカードを使用して、部分的なリソース識別子と一致させることはできません。例えば、**"resources": "\$1"** と指定することはできますが、**"resources": "mqtt:clientId:\$1"** と指定することはできません。  
`statementDescription`  
(オプション) このポリシーステートメントの説明。

`certificates`  <a name="client-device-auth-component-configuration-certificates"></a>
(オプション) このコアデバイスの証明書設定オプション。このオブジェクトには、次の情報が含まれます。    
`serverCertificateValiditySeconds`  
(オプション) ローカル MQTT サーバー証明書の有効期限が切れるまでの時間 (秒単位)。このオプションを設定すれば、クライアントデバイスがコアデバイスから切断し、また再接続する回数をカスタマイズすることができます。  
このコンポーネントは、有効期限が切れる 24 時間前に、ローカル MQTT サーバー証明書をローテーションします。[Moquette MQTT ブローカーコンポーネント](mqtt-broker-moquette-component.md)などの MQTT ブローカーで、新しい証明書を生成して再起動します。これが実行されると、このコアデバイスに接続されているすべてのクライアントデバイスが切断されます。クライアントデバイスは、短時間待機した後に、コアデバイスに再度接続できます。  
デフォルト: `604800` (7 日)  
最小値: `172800` (2 日)  
最大値: `864000` (10 日)

`performance`  
(オプション) このコアデバイスのパフォーマンス設定オプション。このオブジェクトには、次の情報が含まれます。    
`maxActiveAuthTokens`  
(オプション) アクティブなクライアントデバイス認可トークンの最大数。この数を増やすと、より多くのクライアントデバイスが、再認証せずに単一のコアデバイスに接続できるようになります。  
デフォルト: `2500`  
`cloudRequestQueueSize`  
(オプション) このコンポーネントが AWS クラウド リクエストを拒否するまでのキューへのリクエストの最大数。  
デフォルト: `100`  
`maxConcurrentCloudRequests`  
(オプション) AWS クラウドに同時に送信できるリクエストの最大数。この数を増やすと、多数のクライアントデバイスを接続するコアデバイスで、認証のパフォーマンスを向上させることができます。  
デフォルト: `1`

`certificateAuthority`  
(オプション) コアデバイスの中間認証機関を独自の中間認証機関に置き換える認証機関設定オプション。  
Greengrass コアデバイスをカスタム認証局 (CA) で設定し、同じ CA を使用してクライアントデバイス証明書を発行する場合、Greengrass はクライアントデバイス MQTT オペレーションの承認ポリシーチェックをバイパスします。クライアントデバイス認証コンポーネントは、使用するように設定された CA によって署名された証明書を使用してクライアントを完全に信頼します。  
カスタム CA を使用する際にこの動作を制限するには、別の CA または中間 CA を使用してクライアントデバイスを作成して署名し、正しい中間 CA を指すように `certificateUri` および `certificateChainUri` フィールドを調整します。
 このオブジェクトには、次の情報が含まれます。    
certificateUri  
証明書の位置。ファイルシステム URI、またはハードウェアセキュリティモジュールに保存されている証明書をポイントする URI にすることができます。  
`certificateChainUri`  
コアデバイス CA の証明書チェーンの場所。これは、ルート CA に対する完全な証明書チェーンとなります。ファイルシステム URI、またはハードウェアセキュリティモジュールに保存されている証明書チェーンをポイントする URI にすることができます。  
`privateKeyUri`  
コアデバイスのプライベートキーの場所。これは、ファイルシステム URI、またはハードウェアセキュリティモジュールに保存されている証明書プライベートキーをポイントする URI にすることができます。

`security`  
(オプション) このコアデバイスのセキュリティ設定オプション。このオブジェクトには、次の情報が含まれます。    
`clientDeviceTrustDurationMinutes`  
クライアントデバイスの認証情報を信頼できる時間 (分)。この時間が経過すると、コアデバイスでの再認証が必要となります。デフォルト値は 1 です。

`metrics`  
(オプション) このコアデバイスのメトリックオプション。エラーメトリックは、クライアントデバイスの認証にエラーがある場合にのみ表示されます。このオブジェクトには、次の情報が含まれます。    
`disableMetrics`  
`disableMetrics` フィールドが `true` に設定されている場合、クライアントデバイス認証はメトリックを収集しません。  
デフォルト: `false`  
`aggregatePeriodSeconds`  
クライアントデバイス認証がメトリクスを集約してテレメトリエージェントに送信する頻度を決定する集計期間 (秒単位)。テレメトリエージェントは依然として 1 日に 1 回メトリクスを公開するので、メトリクスの公開頻度は変わりません。  
デフォルト: `3600`

startupTimeoutSeconds  
(オプション) コンポーネントが起動する最大時間 (秒)。このタイムアウトを超えている場合、コンポーネントの状態が `ERRORED` に変わります。  
デフォルト: `120`

**Example 例: 設定マージの更新 (制限ポリシーを使用)**  <a name="client-device-auth-component-configuration-example-restrictive"></a>
次の設定例では、名前が `MyClientDevice` で始まるクライアントデバイスに対して、すべてのトピックの接続とパブリッシュ/サブスクライブを許可するように指定しています。  

```
{
  "deviceGroups": {
    "formatVersion": "2021-03-05",
    "definitions": {
      "MyDeviceGroup": {
        "selectionRule": "thingName: MyClientDevice*",
        "policyName": "MyRestrictivePolicy"
      }
    },
    "policies": {
      "MyRestrictivePolicy": {
        "AllowConnect": {
          "statementDescription": "Allow client devices to connect.",
          "operations": [
            "mqtt:connect"
          ],
          "resources": [
            "*"
          ]
        },
        "AllowPublish": {
          "statementDescription": "Allow client devices to publish on test/topic.",
          "operations": [
            "mqtt:publish"
          ],
          "resources": [
            "mqtt:topic:test/topic"
          ]
        },
        "AllowSubscribe": {
          "statementDescription": "Allow client devices to subscribe to test/topic/response.",
          "operations": [
            "mqtt:subscribe"
          ],
          "resources": [
            "mqtt:topicfilter:test/topic/response"
          ]
        }
      }
    }
  }
}
```

**Example 例: 設定マージの更新 (許容ポリシーを使用)**  <a name="client-device-auth-component-configuration-example-permissive"></a>
次の設定例では、すべてのクライアントデバイスに対して、すべてのトピックに接続しパブリッシュ/サブスクライブすることを許可しています。  

```
{
  "deviceGroups": {
    "formatVersion": "2021-03-05",
    "definitions": {
      "MyPermissiveDeviceGroup": {
        "selectionRule": "thingName: *",
        "policyName": "MyPermissivePolicy"
      }
    },
    "policies": {
      "MyPermissivePolicy": {
        "AllowAll": {
          "statementDescription": "Allow client devices to perform all actions.",
          "operations": [
            "*"
          ],
          "resources": [
            "*"
          ]
        }
      }
    }
  }
}
```

------
#### [ v2.4.0 - v2.4.1 ]

`deviceGroups`  <a name="client-device-auth-component-configuration-devicegroups"></a>
デバイスグループは、コアデバイスに接続して通信する権限を持つクライアントデバイスのグループです。選択ルールを使用してクライアントデバイスのグループを特定し、各デバイスグループにアクセス許可を指定する、*クライアントデバイス認証ポリシー*を定義します。  
このオブジェクトには、次の情報が含まれます。    
`formatVersion`  
この設定オブジェクトの形式バージョン。  
次のオプションから選択します。  
+ `2021-03-05`  
`definitions`  
このコアデバイスのデバイスグループ。各定義では、クライアントデバイスがグループのメンバーであるかどうかを評価する*選択ルール*を指定します。各定義では、選択ルールに一致するクライアントデバイスに適用するアクセス権限ポリシーも指定します。クライアントデバイスが複数のデバイスグループのメンバーである場合、デバイスのアクセス許可は各グループのアクセス許可ポリシーで設定されます。  
このオブジェクトには、次の情報が含まれます。    
`groupNameKey`  
このデバイスグループの名前。*GroupNameKey* を、このデバイスグループを識別しやすい名前に置き換えます。  
このオブジェクトには、次の情報が含まれます。    
`selectionRule`  
このデバイスグループのメンバーであるクライアントデバイスを指定するクエリ。クライアントデバイスが接続されると、コアデバイスはこの選択ルールを評価して、クライアントデバイスがこのデバイスグループのメンバーであるかどうかを判断します。クライアントデバイスがメンバーである場合、コアデバイスはこのデバイスグループのポリシーを使用して、クライアントデバイスのアクションを承認します。  
各選択ルールは、少なくとも 1 つの*選択ルール句*で構成されます。この句は、クライアントデバイスと一致できる単一の式クエリです。選択ルールは、 AWS IoT フリートインデックス作成と同じクエリ構文を使用します。選択ルール構文に関する詳細については、「*AWS IoT Core デベロッパーガイド*」の「[AWS IoT fleet indexing query syntax](https://docs.aws.amazon.com/iot/latest/developerguide/query-syntax.html)」を参照してください。  
`*` ワイルドカードを使用して、複数のクライアントデバイスを 1 つの選択ルール句と一致させます。モノ名の末尾にこのワイルドカードを使用すると、指定した文字列で始まる名前のクライアントデバイスと一致させることができます。このワイルドカードを使用して、すべてのクライアントデバイスと一致させることもできます。  
コロン文字 (`:`) を含む値を選択する場合は、コロン文字にバックスラッシュ文字 (`\\`) を使用してエスケープします。JSON などの形式では、バックスラッシュ文字をエスケープする必要があるため、コロン文字の前に 2 つのバックスラッシュ文字を入力する必要があります。例えば、`thingName: MyTeam\\\\:ClientDevice1` が `MyTeam:ClientDevice1` という名前のモノを選択するように指定する場合です。
次のセレクターを指定できます。  
+ `thingName` - クライアントデバイスの AWS IoT モノの名前。

**Example 選択ルール例**  
次の選択ルールは、名前が `MyClientDevice1` または `MyClientDevice2` のクライアントデバイスと一致します。  

```
thingName: MyClientDevice1 OR thingName: MyClientDevice2
```

**Example 選択ルール例 (ワイルドカードを使用)**  
次の選択ルールは、名前が `MyClientDevice` で始まるクライアントデバイスと一致します。  

```
thingName: MyClientDevice*
```

**Example 選択ルール例 (すべてのデバイスに一致)**  
次の選択ルールは、すべてのクライアントデバイスと一致します。  

```
thingName: *
```  
`policyName`  
このデバイスグループ内のクライアントデバイスに適用されるアクセス許可ポリシー。`policies` オブジェクトで定義するポリシーの名前を指定します。  
`policies`  
コアデバイスに接続するクライアントデバイス用の、クライアントデバイス認可ポリシー。各承認ポリシーは、クライアントデバイスがこれらのアクションを実行できるアクションセットとリソースを指定しています。  
このオブジェクトには、次の情報が含まれます。    
`policyNameKey`  
この承認ポリシーの名前。*policyNameKey* を、この承認ポリシーを識別するのに役立つ名前に置き換えます。このポリシー名を使用して、デバイスグループに適用するポリシーを定義します。  
このオブジェクトには、次の情報が含まれます。    
`statementNameKey`  
このポリシーステートメントの名前。*statementNameKey* を、このポリシーステートメントを識別するのに役立つ名前に置き換えます。  
このオブジェクトには、次の情報が含まれます。    
`operations`  
このポリシーのリソースに許可する操作のリスト。  
以下のすべての操作を含めることができます。  
+ `mqtt:connect` - コアデバイスに接続するアクセス許可を付与します。コアデバイスに接続するには、クライアントデバイスにこのアクセス許可が必要です。

  この操作は、次のリソースをサポートします。
  + `mqtt:clientId:deviceClientId` - クライアントデバイスがコアデバイスの MQTT ブローカーへの接続に使用するクライアント ID に基づいて、アクセスを制限します。*deviceClientId* を使用するクライアント ID に置き換えます。
+ `mqtt:publish` - MQTT メッセージをトピックにパブリッシュする権限を付与します。

  この操作は、次のリソースをサポートします。
  + <a name="client-device-authorization-policy-resource-mqtt-topic"></a>`mqtt:topic:mqttTopic` - クライアントデバイスがメッセージをパブリッシュする MQTT トピックに基づいて、アクセスを制限します。*mqttTopic* を使用するトピックに置き換えます。

    このリソースは MQTT トピックのワイルドカードをサポートしていません。
+ `mqtt:subscribe` - メッセージを受信する MQTT トピックフィルターにサブスクライブする許可を付与します。

  この操作は、次のリソースをサポートします。
  + <a name="client-device-authorization-policy-resource-mqtt-topicfilter"></a>`mqtt:topicfilter:mqttTopicFilter` - クライアントデバイスがメッセージにサブスクライブできる MQTT トピックに基づいて、アクセスを制限します。*mqttTopicFilter* を使用するトピックフィルターに置き換えます。

    このリソースは `+` および `#` MQTT トピックのワイルドカードをサポートしています。詳細については、「*AWS IoT Core デベロッパーガイド*」の「[MQTT topics](https://docs.aws.amazon.com/iot/latest/developerguide/topics.html)」を参照してください。

    クライアントデバイスは、許可を付与したトピックフィルターにのみサブスクライブできます。例えば、クライアントデバイスに `mqtt:topicfilter:client/+/status` リソースへのサブスクライブを許可した場合、クライアントデバイスは `client/+/status` にサブスクライブできますが、`client/client1/status` にはサブスクライブできません。
`*` ワイルドカードを指定すれば、すべてのアクションへのアクセスを許可することができます。  
`resources`  
このポリシーでの操作を許可するリソースのリスト。このポリシーでの操作に対応するリソースを指定します。例えば、`mqtt:publish` 操作を指定するポリシーで、MQTT トピックリソース (`mqtt:topic:mqttTopic`) のリストを指定することができます。  
`*` ワイルドカードを指定すれば、すべてのリソースへのアクセスを許可することができます。`*` ワイルドカードを使用して、部分的なリソース識別子と一致させることはできません。例えば、**"resources": "\$1"** と指定することはできますが、**"resources": "mqtt:clientId:\$1"** と指定することはできません。  
`statementDescription`  
(オプション) このポリシーステートメントの説明。

`certificates`  <a name="client-device-auth-component-configuration-certificates"></a>
(オプション) このコアデバイスの証明書設定オプション。このオブジェクトには、次の情報が含まれます。    
`serverCertificateValiditySeconds`  
(オプション) ローカル MQTT サーバー証明書の有効期限が切れるまでの時間 (秒単位)。このオプションを設定すれば、クライアントデバイスがコアデバイスから切断し、また再接続する回数をカスタマイズすることができます。  
このコンポーネントは、有効期限が切れる 24 時間前に、ローカル MQTT サーバー証明書をローテーションします。[Moquette MQTT ブローカーコンポーネント](mqtt-broker-moquette-component.md)などの MQTT ブローカーで、新しい証明書を生成して再起動します。これが実行されると、このコアデバイスに接続されているすべてのクライアントデバイスが切断されます。クライアントデバイスは、短時間待機した後に、コアデバイスに再度接続できます。  
デフォルト: `604800` (7 日)  
最小値: `172800` (2 日)  
最大値: `864000` (10 日)

`performance`  
(オプション) このコアデバイスのパフォーマンス設定オプション。このオブジェクトには、次の情報が含まれます。    
`maxActiveAuthTokens`  
(オプション) アクティブなクライアントデバイス認可トークンの最大数。この数を増やすと、より多くのクライアントデバイスが、再認証せずに単一のコアデバイスに接続できるようになります。  
デフォルト: `2500`  
`cloudRequestQueueSize`  
(オプション) このコンポーネントが AWS クラウド リクエストを拒否するまでのキューへのリクエストの最大数。  
デフォルト: `100`  
`maxConcurrentCloudRequests`  
(オプション) AWS クラウドに同時に送信できるリクエストの最大数。この数を増やすと、多数のクライアントデバイスを接続するコアデバイスで、認証のパフォーマンスを向上させることができます。  
デフォルト: `1`

`certificateAuthority`  
(オプション) コアデバイスの中間認証機関を独自の中間認証機関に置き換える認証機関設定オプション。このオブジェクトには、次の情報が含まれます。  
 このオブジェクトには、次の情報が含まれます。    
certificateUri  
証明書の位置。ファイルシステム URI、またはハードウェアセキュリティモジュールに保存されている証明書をポイントする URI にすることができます。  
`certificateChainUri`  
コアデバイス CA の証明書チェーンの場所。これは、ルート CA に対する完全な証明書チェーンとなります。ファイルシステム URI、またはハードウェアセキュリティモジュールに保存されている証明書チェーンをポイントする URI にすることができます。  
`privateKeyUri`  
コアデバイスのプライベートキーの場所。これは、ファイルシステム URI、またはハードウェアセキュリティモジュールに保存されている証明書プライベートキーをポイントする URI にすることができます。

`security`  
(オプション) このコアデバイスのセキュリティ設定オプション。このオブジェクトには、次の情報が含まれます。    
`clientDeviceTrustDurationMinutes`  
クライアントデバイスの認証情報を信頼できる時間 (分)。この時間が経過すると、コアデバイスでの再認証が必要となります。デフォルト値は 1 です。

`metrics`  
(オプション) このコアデバイスのメトリックオプション。エラーメトリックは、クライアントデバイスの認証にエラーがある場合にのみ表示されます。このオブジェクトには、次の情報が含まれます。    
`disableMetrics`  
`disableMetrics` フィールドが `true` に設定されている場合、クライアントデバイス認証はメトリックを収集しません。  
デフォルト: `false`  
`aggregatePeriodSeconds`  
クライアントデバイス認証がメトリクスを集約してテレメトリエージェントに送信する頻度を決定する集計期間 (秒単位)。テレメトリエージェントは依然として 1 日に 1 回メトリクスを公開するので、メトリクスの公開頻度は変わりません。  
デフォルト: `3600`

**Example 例: 設定マージの更新 (制限ポリシーを使用)**  <a name="client-device-auth-component-configuration-example-restrictive"></a>
次の設定例では、名前が `MyClientDevice` で始まるクライアントデバイスに対して、すべてのトピックの接続とパブリッシュ/サブスクライブを許可するように指定しています。  

```
{
  "deviceGroups": {
    "formatVersion": "2021-03-05",
    "definitions": {
      "MyDeviceGroup": {
        "selectionRule": "thingName: MyClientDevice*",
        "policyName": "MyRestrictivePolicy"
      }
    },
    "policies": {
      "MyRestrictivePolicy": {
        "AllowConnect": {
          "statementDescription": "Allow client devices to connect.",
          "operations": [
            "mqtt:connect"
          ],
          "resources": [
            "*"
          ]
        },
        "AllowPublish": {
          "statementDescription": "Allow client devices to publish on test/topic.",
          "operations": [
            "mqtt:publish"
          ],
          "resources": [
            "mqtt:topic:test/topic"
          ]
        },
        "AllowSubscribe": {
          "statementDescription": "Allow client devices to subscribe to test/topic/response.",
          "operations": [
            "mqtt:subscribe"
          ],
          "resources": [
            "mqtt:topicfilter:test/topic/response"
          ]
        }
      }
    }
  }
}
```

**Example 例: 設定マージの更新 (許容ポリシーを使用)**  <a name="client-device-auth-component-configuration-example-permissive"></a>
次の設定例では、すべてのクライアントデバイスに対して、すべてのトピックに接続しパブリッシュ/サブスクライブすることを許可しています。  

```
{
  "deviceGroups": {
    "formatVersion": "2021-03-05",
    "definitions": {
      "MyPermissiveDeviceGroup": {
        "selectionRule": "thingName: *",
        "policyName": "MyPermissivePolicy"
      }
    },
    "policies": {
      "MyPermissivePolicy": {
        "AllowAll": {
          "statementDescription": "Allow client devices to perform all actions.",
          "operations": [
            "*"
          ],
          "resources": [
            "*"
          ]
        }
      }
    }
  }
}
```

------
#### [ v2.3.x ]

`deviceGroups`  <a name="client-device-auth-component-configuration-devicegroups"></a>
デバイスグループは、コアデバイスに接続して通信する権限を持つクライアントデバイスのグループです。選択ルールを使用してクライアントデバイスのグループを特定し、各デバイスグループにアクセス許可を指定する、*クライアントデバイス認証ポリシー*を定義します。  
このオブジェクトには、次の情報が含まれます。    
`formatVersion`  
この設定オブジェクトの形式バージョン。  
次のオプションから選択します。  
+ `2021-03-05`  
`definitions`  
このコアデバイスのデバイスグループ。各定義では、クライアントデバイスがグループのメンバーであるかどうかを評価する*選択ルール*を指定します。各定義では、選択ルールに一致するクライアントデバイスに適用するアクセス権限ポリシーも指定します。クライアントデバイスが複数のデバイスグループのメンバーである場合、デバイスのアクセス許可は各グループのアクセス許可ポリシーで設定されます。  
このオブジェクトには、次の情報が含まれます。    
`groupNameKey`  
このデバイスグループの名前。*GroupNameKey* を、このデバイスグループを識別しやすい名前に置き換えます。  
このオブジェクトには、次の情報が含まれます。    
`selectionRule`  
このデバイスグループのメンバーであるクライアントデバイスを指定するクエリ。クライアントデバイスが接続されると、コアデバイスはこの選択ルールを評価して、クライアントデバイスがこのデバイスグループのメンバーであるかどうかを判断します。クライアントデバイスがメンバーである場合、コアデバイスはこのデバイスグループのポリシーを使用して、クライアントデバイスのアクションを承認します。  
各選択ルールは、少なくとも 1 つの*選択ルール句*で構成されます。この句は、クライアントデバイスと一致できる単一の式クエリです。選択ルールは、 AWS IoT フリートインデックス作成と同じクエリ構文を使用します。選択ルール構文に関する詳細については、「*AWS IoT Core デベロッパーガイド*」の「[AWS IoT fleet indexing query syntax](https://docs.aws.amazon.com/iot/latest/developerguide/query-syntax.html)」を参照してください。  
`*` ワイルドカードを使用して、複数のクライアントデバイスを 1 つの選択ルール句と一致させます。モノ名の末尾にこのワイルドカードを使用すると、指定した文字列で始まる名前のクライアントデバイスと一致させることができます。このワイルドカードを使用して、すべてのクライアントデバイスと一致させることもできます。  
コロン文字 (`:`) を含む値を選択する場合は、コロン文字にバックスラッシュ文字 (`\\`) を使用してエスケープします。JSON などの形式では、バックスラッシュ文字をエスケープする必要があるため、コロン文字の前に 2 つのバックスラッシュ文字を入力する必要があります。例えば、`thingName: MyTeam\\\\:ClientDevice1` が `MyTeam:ClientDevice1` という名前のモノを選択するように指定する場合です。
次のセレクターを指定できます。  
+ `thingName` - クライアントデバイスの AWS IoT モノの名前。

**Example 選択ルール例**  
次の選択ルールは、名前が `MyClientDevice1` または `MyClientDevice2` のクライアントデバイスと一致します。  

```
thingName: MyClientDevice1 OR thingName: MyClientDevice2
```

**Example 選択ルール例 (ワイルドカードを使用)**  
次の選択ルールは、名前が `MyClientDevice` で始まるクライアントデバイスと一致します。  

```
thingName: MyClientDevice*
```

**Example 選択ルール例 (すべてのデバイスに一致)**  
次の選択ルールは、すべてのクライアントデバイスと一致します。  

```
thingName: *
```  
`policyName`  
このデバイスグループ内のクライアントデバイスに適用されるアクセス許可ポリシー。`policies` オブジェクトで定義するポリシーの名前を指定します。  
`policies`  
コアデバイスに接続するクライアントデバイス用の、クライアントデバイス認可ポリシー。各承認ポリシーは、クライアントデバイスがこれらのアクションを実行できるアクションセットとリソースを指定しています。  
このオブジェクトには、次の情報が含まれます。    
`policyNameKey`  
この承認ポリシーの名前。*policyNameKey* を、この承認ポリシーを識別するのに役立つ名前に置き換えます。このポリシー名を使用して、デバイスグループに適用するポリシーを定義します。  
このオブジェクトには、次の情報が含まれます。    
`statementNameKey`  
このポリシーステートメントの名前。*statementNameKey* を、このポリシーステートメントを識別するのに役立つ名前に置き換えます。  
このオブジェクトには、次の情報が含まれます。    
`operations`  
このポリシーのリソースに許可する操作のリスト。  
以下のすべての操作を含めることができます。  
+ `mqtt:connect` - コアデバイスに接続するアクセス許可を付与します。コアデバイスに接続するには、クライアントデバイスにこのアクセス許可が必要です。

  この操作は、次のリソースをサポートします。
  + `mqtt:clientId:deviceClientId` - クライアントデバイスがコアデバイスの MQTT ブローカーへの接続に使用するクライアント ID に基づいて、アクセスを制限します。*deviceClientId* を使用するクライアント ID に置き換えます。
+ `mqtt:publish` - MQTT メッセージをトピックにパブリッシュする権限を付与します。

  この操作は、次のリソースをサポートします。
  + <a name="client-device-authorization-policy-resource-mqtt-topic"></a>`mqtt:topic:mqttTopic` - クライアントデバイスがメッセージをパブリッシュする MQTT トピックに基づいて、アクセスを制限します。*mqttTopic* を使用するトピックに置き換えます。

    このリソースは MQTT トピックのワイルドカードをサポートしていません。
+ `mqtt:subscribe` - メッセージを受信する MQTT トピックフィルターにサブスクライブする許可を付与します。

  この操作は、次のリソースをサポートします。
  + <a name="client-device-authorization-policy-resource-mqtt-topicfilter"></a>`mqtt:topicfilter:mqttTopicFilter` - クライアントデバイスがメッセージにサブスクライブできる MQTT トピックに基づいて、アクセスを制限します。*mqttTopicFilter* を使用するトピックフィルターに置き換えます。

    このリソースは `+` および `#` MQTT トピックのワイルドカードをサポートしています。詳細については、「*AWS IoT Core デベロッパーガイド*」の「[MQTT topics](https://docs.aws.amazon.com/iot/latest/developerguide/topics.html)」を参照してください。

    クライアントデバイスは、許可を付与したトピックフィルターにのみサブスクライブできます。例えば、クライアントデバイスに `mqtt:topicfilter:client/+/status` リソースへのサブスクライブを許可した場合、クライアントデバイスは `client/+/status` にサブスクライブできますが、`client/client1/status` にはサブスクライブできません。
`*` ワイルドカードを指定すれば、すべてのアクションへのアクセスを許可することができます。  
`resources`  
このポリシーでの操作を許可するリソースのリスト。このポリシーでの操作に対応するリソースを指定します。例えば、`mqtt:publish` 操作を指定するポリシーで、MQTT トピックリソース (`mqtt:topic:mqttTopic`) のリストを指定することができます。  
`*` ワイルドカードを指定すれば、すべてのリソースへのアクセスを許可することができます。`*` ワイルドカードを使用して、部分的なリソース識別子と一致させることはできません。例えば、**"resources": "\$1"** と指定することはできますが、**"resources": "mqtt:clientId:\$1"** と指定することはできません。  
`statementDescription`  
(オプション) このポリシーステートメントの説明。

`certificates`  <a name="client-device-auth-component-configuration-certificates"></a>
(オプション) このコアデバイスの証明書設定オプション。このオブジェクトには、次の情報が含まれます。    
`serverCertificateValiditySeconds`  
(オプション) ローカル MQTT サーバー証明書の有効期限が切れるまでの時間 (秒単位)。このオプションを設定すれば、クライアントデバイスがコアデバイスから切断し、また再接続する回数をカスタマイズすることができます。  
このコンポーネントは、有効期限が切れる 24 時間前に、ローカル MQTT サーバー証明書をローテーションします。[Moquette MQTT ブローカーコンポーネント](mqtt-broker-moquette-component.md)などの MQTT ブローカーで、新しい証明書を生成して再起動します。これが実行されると、このコアデバイスに接続されているすべてのクライアントデバイスが切断されます。クライアントデバイスは、短時間待機した後に、コアデバイスに再度接続できます。  
デフォルト: `604800` (7 日)  
最小値: `172800` (2 日)  
最大値: `864000` (10 日)

`performance`  
(オプション) このコアデバイスのパフォーマンス設定オプション。このオブジェクトには、次の情報が含まれます。    
`maxActiveAuthTokens`  
(オプション) アクティブなクライアントデバイス認可トークンの最大数。この数を増やすと、より多くのクライアントデバイスが、再認証せずに単一のコアデバイスに接続できるようになります。  
デフォルト: `2500`  
`cloudRequestQueueSize`  
(オプション) このコンポーネントが AWS クラウド リクエストを拒否するまでのキューへのリクエストの最大数。  
デフォルト: `100`  
`maxConcurrentCloudRequests`  
(オプション) AWS クラウドに同時に送信できるリクエストの最大数。この数を増やすと、多数のクライアントデバイスを接続するコアデバイスで、認証のパフォーマンスを向上させることができます。  
デフォルト: `1`

`certificateAuthority`  
(オプション) コアデバイスの中間認証機関を独自の中間認証機関に置き換える認証機関設定オプション。このオブジェクトには、次の情報が含まれます。    
certificateUri  
証明書の位置。ファイルシステム URI、またはハードウェアセキュリティモジュールに保存されている証明書をポイントする URI にすることができます。  
`certificateChainUri`  
コアデバイス CA の証明書チェーンの場所。これは、ルート CA に対する完全な証明書チェーンとなります。ファイルシステム URI、またはハードウェアセキュリティモジュールに保存されている証明書チェーンをポイントする URI にすることができます。  
`privateKeyUri`  
コアデバイスのプライベートキーの場所。これは、ファイルシステム URI、またはハードウェアセキュリティモジュールに保存されている証明書プライベートキーをポイントする URI にすることができます。

`security`  
(オプション) このコアデバイスのセキュリティ設定オプション。このオブジェクトには、次の情報が含まれます。    
`clientDeviceTrustDurationMinutes`  
クライアントデバイスの認証情報を信頼できる時間 (分)。この時間が経過すると、コアデバイスでの再認証が必要となります。デフォルト値は 1 です。

**Example 例: 設定マージの更新 (制限ポリシーを使用)**  <a name="client-device-auth-component-configuration-example-restrictive"></a>
次の設定例では、名前が `MyClientDevice` で始まるクライアントデバイスに対して、すべてのトピックの接続とパブリッシュ/サブスクライブを許可するように指定しています。  

```
{
  "deviceGroups": {
    "formatVersion": "2021-03-05",
    "definitions": {
      "MyDeviceGroup": {
        "selectionRule": "thingName: MyClientDevice*",
        "policyName": "MyRestrictivePolicy"
      }
    },
    "policies": {
      "MyRestrictivePolicy": {
        "AllowConnect": {
          "statementDescription": "Allow client devices to connect.",
          "operations": [
            "mqtt:connect"
          ],
          "resources": [
            "*"
          ]
        },
        "AllowPublish": {
          "statementDescription": "Allow client devices to publish on test/topic.",
          "operations": [
            "mqtt:publish"
          ],
          "resources": [
            "mqtt:topic:test/topic"
          ]
        },
        "AllowSubscribe": {
          "statementDescription": "Allow client devices to subscribe to test/topic/response.",
          "operations": [
            "mqtt:subscribe"
          ],
          "resources": [
            "mqtt:topicfilter:test/topic/response"
          ]
        }
      }
    }
  }
}
```

**Example 例: 設定マージの更新 (許容ポリシーを使用)**  <a name="client-device-auth-component-configuration-example-permissive"></a>
次の設定例では、すべてのクライアントデバイスに対して、すべてのトピックに接続しパブリッシュ/サブスクライブすることを許可しています。  

```
{
  "deviceGroups": {
    "formatVersion": "2021-03-05",
    "definitions": {
      "MyPermissiveDeviceGroup": {
        "selectionRule": "thingName: *",
        "policyName": "MyPermissivePolicy"
      }
    },
    "policies": {
      "MyPermissivePolicy": {
        "AllowAll": {
          "statementDescription": "Allow client devices to perform all actions.",
          "operations": [
            "*"
          ],
          "resources": [
            "*"
          ]
        }
      }
    }
  }
}
```

------
#### [ v2.2.x ]

`deviceGroups`  <a name="client-device-auth-component-configuration-devicegroups"></a>
デバイスグループは、コアデバイスに接続して通信する権限を持つクライアントデバイスのグループです。選択ルールを使用してクライアントデバイスのグループを特定し、各デバイスグループにアクセス許可を指定する、*クライアントデバイス認証ポリシー*を定義します。  
このオブジェクトには、次の情報が含まれます。    
`formatVersion`  
この設定オブジェクトの形式バージョン。  
次のオプションから選択します。  
+ `2021-03-05`  
`definitions`  
このコアデバイスのデバイスグループ。各定義では、クライアントデバイスがグループのメンバーであるかどうかを評価する*選択ルール*を指定します。各定義では、選択ルールに一致するクライアントデバイスに適用するアクセス権限ポリシーも指定します。クライアントデバイスが複数のデバイスグループのメンバーである場合、デバイスのアクセス許可は各グループのアクセス許可ポリシーで設定されます。  
このオブジェクトには、次の情報が含まれます。    
`groupNameKey`  
このデバイスグループの名前。*GroupNameKey* を、このデバイスグループを識別しやすい名前に置き換えます。  
このオブジェクトには、次の情報が含まれます。    
`selectionRule`  
このデバイスグループのメンバーであるクライアントデバイスを指定するクエリ。クライアントデバイスが接続されると、コアデバイスはこの選択ルールを評価して、クライアントデバイスがこのデバイスグループのメンバーであるかどうかを判断します。クライアントデバイスがメンバーである場合、コアデバイスはこのデバイスグループのポリシーを使用して、クライアントデバイスのアクションを承認します。  
各選択ルールは、少なくとも 1 つの*選択ルール句*で構成されます。この句は、クライアントデバイスと一致できる単一の式クエリです。選択ルールは、 AWS IoT フリートインデックス作成と同じクエリ構文を使用します。選択ルール構文に関する詳細については、「*AWS IoT Core デベロッパーガイド*」の「[AWS IoT fleet indexing query syntax](https://docs.aws.amazon.com/iot/latest/developerguide/query-syntax.html)」を参照してください。  
`*` ワイルドカードを使用して、複数のクライアントデバイスを 1 つの選択ルール句と一致させます。モノ名の末尾にこのワイルドカードを使用すると、指定した文字列で始まる名前のクライアントデバイスと一致させることができます。このワイルドカードを使用して、すべてのクライアントデバイスと一致させることもできます。  
コロン文字 (`:`) を含む値を選択する場合は、コロン文字にバックスラッシュ文字 (`\\`) を使用してエスケープします。JSON などの形式では、バックスラッシュ文字をエスケープする必要があるため、コロン文字の前に 2 つのバックスラッシュ文字を入力する必要があります。例えば、`thingName: MyTeam\\\\:ClientDevice1` が `MyTeam:ClientDevice1` という名前のモノを選択するように指定する場合です。
次のセレクターを指定できます。  
+ `thingName` - クライアントデバイスの AWS IoT モノの名前。

**Example 選択ルール例**  
次の選択ルールは、名前が `MyClientDevice1` または `MyClientDevice2` のクライアントデバイスと一致します。  

```
thingName: MyClientDevice1 OR thingName: MyClientDevice2
```

**Example 選択ルール例 (ワイルドカードを使用)**  
次の選択ルールは、名前が `MyClientDevice` で始まるクライアントデバイスと一致します。  

```
thingName: MyClientDevice*
```

**Example 選択ルール例 (すべてのデバイスに一致)**  
次の選択ルールは、すべてのクライアントデバイスと一致します。  

```
thingName: *
```  
`policyName`  
このデバイスグループ内のクライアントデバイスに適用されるアクセス許可ポリシー。`policies` オブジェクトで定義するポリシーの名前を指定します。  
`policies`  
コアデバイスに接続するクライアントデバイス用の、クライアントデバイス認可ポリシー。各承認ポリシーは、クライアントデバイスがこれらのアクションを実行できるアクションセットとリソースを指定しています。  
このオブジェクトには、次の情報が含まれます。    
`policyNameKey`  
この承認ポリシーの名前。*policyNameKey* を、この承認ポリシーを識別するのに役立つ名前に置き換えます。このポリシー名を使用して、デバイスグループに適用するポリシーを定義します。  
このオブジェクトには、次の情報が含まれます。    
`statementNameKey`  
このポリシーステートメントの名前。*statementNameKey* を、このポリシーステートメントを識別するのに役立つ名前に置き換えます。  
このオブジェクトには、次の情報が含まれます。    
`operations`  
このポリシーのリソースに許可する操作のリスト。  
以下のすべての操作を含めることができます。  
+ `mqtt:connect` - コアデバイスに接続するアクセス許可を付与します。コアデバイスに接続するには、クライアントデバイスにこのアクセス許可が必要です。

  この操作は、次のリソースをサポートします。
  + `mqtt:clientId:deviceClientId` - クライアントデバイスがコアデバイスの MQTT ブローカーへの接続に使用するクライアント ID に基づいて、アクセスを制限します。*deviceClientId* を使用するクライアント ID に置き換えます。
+ `mqtt:publish` - MQTT メッセージをトピックにパブリッシュする権限を付与します。

  この操作は、次のリソースをサポートします。
  + <a name="client-device-authorization-policy-resource-mqtt-topic"></a>`mqtt:topic:mqttTopic` - クライアントデバイスがメッセージをパブリッシュする MQTT トピックに基づいて、アクセスを制限します。*mqttTopic* を使用するトピックに置き換えます。

    このリソースは MQTT トピックのワイルドカードをサポートしていません。
+ `mqtt:subscribe` - メッセージを受信する MQTT トピックフィルターにサブスクライブする許可を付与します。

  この操作は、次のリソースをサポートします。
  + <a name="client-device-authorization-policy-resource-mqtt-topicfilter"></a>`mqtt:topicfilter:mqttTopicFilter` - クライアントデバイスがメッセージにサブスクライブできる MQTT トピックに基づいて、アクセスを制限します。*mqttTopicFilter* を使用するトピックフィルターに置き換えます。

    このリソースは `+` および `#` MQTT トピックのワイルドカードをサポートしています。詳細については、「*AWS IoT Core デベロッパーガイド*」の「[MQTT topics](https://docs.aws.amazon.com/iot/latest/developerguide/topics.html)」を参照してください。

    クライアントデバイスは、許可を付与したトピックフィルターにのみサブスクライブできます。例えば、クライアントデバイスに `mqtt:topicfilter:client/+/status` リソースへのサブスクライブを許可した場合、クライアントデバイスは `client/+/status` にサブスクライブできますが、`client/client1/status` にはサブスクライブできません。
`*` ワイルドカードを指定すれば、すべてのアクションへのアクセスを許可することができます。  
`resources`  
このポリシーでの操作を許可するリソースのリスト。このポリシーでの操作に対応するリソースを指定します。例えば、`mqtt:publish` 操作を指定するポリシーで、MQTT トピックリソース (`mqtt:topic:mqttTopic`) のリストを指定することができます。  
`*` ワイルドカードを指定すれば、すべてのリソースへのアクセスを許可することができます。`*` ワイルドカードを使用して、部分的なリソース識別子と一致させることはできません。例えば、**"resources": "\$1"** と指定することはできますが、**"resources": "mqtt:clientId:\$1"** と指定することはできません。  
`statementDescription`  
(オプション) このポリシーステートメントの説明。

`certificates`  <a name="client-device-auth-component-configuration-certificates"></a>
(オプション) このコアデバイスの証明書設定オプション。このオブジェクトには、次の情報が含まれます。    
`serverCertificateValiditySeconds`  
(オプション) ローカル MQTT サーバー証明書の有効期限が切れるまでの時間 (秒単位)。このオプションを設定すれば、クライアントデバイスがコアデバイスから切断し、また再接続する回数をカスタマイズすることができます。  
このコンポーネントは、有効期限が切れる 24 時間前に、ローカル MQTT サーバー証明書をローテーションします。[Moquette MQTT ブローカーコンポーネント](mqtt-broker-moquette-component.md)などの MQTT ブローカーで、新しい証明書を生成して再起動します。これが実行されると、このコアデバイスに接続されているすべてのクライアントデバイスが切断されます。クライアントデバイスは、短時間待機した後に、コアデバイスに再度接続できます。  
デフォルト: `604800` (7 日)  
最小値: `172800` (2 日)  
最大値: `864000` (10 日)

`performance`  
(オプション) このコアデバイスのパフォーマンス設定オプション。このオブジェクトには、次の情報が含まれます。    
`maxActiveAuthTokens`  
(オプション) アクティブなクライアントデバイス認可トークンの最大数。この数を増やすと、より多くのクライアントデバイスが、再認証せずに単一のコアデバイスに接続できるようになります。  
デフォルト: `2500`  
`cloudRequestQueueSize`  
(オプション) このコンポーネントが AWS クラウド リクエストを拒否するまでのキューへのリクエストの最大数。  
デフォルト: `100`  
`maxConcurrentCloudRequests`  
(オプション) AWS クラウドに同時に送信できるリクエストの最大数。この数を増やすと、多数のクライアントデバイスを接続するコアデバイスで、認証のパフォーマンスを向上させることができます。  
デフォルト: `1`

**Example 例: 設定マージの更新 (制限ポリシーを使用)**  <a name="client-device-auth-component-configuration-example-restrictive"></a>
次の設定例では、名前が `MyClientDevice` で始まるクライアントデバイスに対して、すべてのトピックの接続とパブリッシュ/サブスクライブを許可するように指定しています。  

```
{
  "deviceGroups": {
    "formatVersion": "2021-03-05",
    "definitions": {
      "MyDeviceGroup": {
        "selectionRule": "thingName: MyClientDevice*",
        "policyName": "MyRestrictivePolicy"
      }
    },
    "policies": {
      "MyRestrictivePolicy": {
        "AllowConnect": {
          "statementDescription": "Allow client devices to connect.",
          "operations": [
            "mqtt:connect"
          ],
          "resources": [
            "*"
          ]
        },
        "AllowPublish": {
          "statementDescription": "Allow client devices to publish on test/topic.",
          "operations": [
            "mqtt:publish"
          ],
          "resources": [
            "mqtt:topic:test/topic"
          ]
        },
        "AllowSubscribe": {
          "statementDescription": "Allow client devices to subscribe to test/topic/response.",
          "operations": [
            "mqtt:subscribe"
          ],
          "resources": [
            "mqtt:topicfilter:test/topic/response"
          ]
        }
      }
    }
  }
}
```

**Example 例: 設定マージの更新 (許容ポリシーを使用)**  <a name="client-device-auth-component-configuration-example-permissive"></a>
次の設定例では、すべてのクライアントデバイスに対して、すべてのトピックに接続しパブリッシュ/サブスクライブすることを許可しています。  

```
{
  "deviceGroups": {
    "formatVersion": "2021-03-05",
    "definitions": {
      "MyPermissiveDeviceGroup": {
        "selectionRule": "thingName: *",
        "policyName": "MyPermissivePolicy"
      }
    },
    "policies": {
      "MyPermissivePolicy": {
        "AllowAll": {
          "statementDescription": "Allow client devices to perform all actions.",
          "operations": [
            "*"
          ],
          "resources": [
            "*"
          ]
        }
      }
    }
  }
}
```

------
#### [ v2.1.x ]

`deviceGroups`  <a name="client-device-auth-component-configuration-devicegroups"></a>
デバイスグループは、コアデバイスに接続して通信する権限を持つクライアントデバイスのグループです。選択ルールを使用してクライアントデバイスのグループを特定し、各デバイスグループにアクセス許可を指定する、*クライアントデバイス認証ポリシー*を定義します。  
このオブジェクトには、次の情報が含まれます。    
`formatVersion`  
この設定オブジェクトの形式バージョン。  
次のオプションから選択します。  
+ `2021-03-05`  
`definitions`  
このコアデバイスのデバイスグループ。各定義では、クライアントデバイスがグループのメンバーであるかどうかを評価する*選択ルール*を指定します。各定義では、選択ルールに一致するクライアントデバイスに適用するアクセス権限ポリシーも指定します。クライアントデバイスが複数のデバイスグループのメンバーである場合、デバイスのアクセス許可は各グループのアクセス許可ポリシーで設定されます。  
このオブジェクトには、次の情報が含まれます。    
`groupNameKey`  
このデバイスグループの名前。*GroupNameKey* を、このデバイスグループを識別しやすい名前に置き換えます。  
このオブジェクトには、次の情報が含まれます。    
`selectionRule`  
このデバイスグループのメンバーであるクライアントデバイスを指定するクエリ。クライアントデバイスが接続されると、コアデバイスはこの選択ルールを評価して、クライアントデバイスがこのデバイスグループのメンバーであるかどうかを判断します。クライアントデバイスがメンバーである場合、コアデバイスはこのデバイスグループのポリシーを使用して、クライアントデバイスのアクションを承認します。  
各選択ルールは、少なくとも 1 つの*選択ルール句*で構成されます。この句は、クライアントデバイスと一致できる単一の式クエリです。選択ルールは、 AWS IoT フリートインデックス作成と同じクエリ構文を使用します。選択ルール構文に関する詳細については、「*AWS IoT Core デベロッパーガイド*」の「[AWS IoT fleet indexing query syntax](https://docs.aws.amazon.com/iot/latest/developerguide/query-syntax.html)」を参照してください。  
`*` ワイルドカードを使用して、複数のクライアントデバイスを 1 つの選択ルール句と一致させます。モノ名の末尾にこのワイルドカードを使用すると、指定した文字列で始まる名前のクライアントデバイスと一致させることができます。このワイルドカードを使用して、すべてのクライアントデバイスと一致させることもできます。  
コロン文字 (`:`) を含む値を選択する場合は、コロン文字にバックスラッシュ文字 (`\\`) を使用してエスケープします。JSON などの形式では、バックスラッシュ文字をエスケープする必要があるため、コロン文字の前に 2 つのバックスラッシュ文字を入力する必要があります。例えば、`thingName: MyTeam\\\\:ClientDevice1` が `MyTeam:ClientDevice1` という名前のモノを選択するように指定する場合です。
次のセレクターを指定できます。  
+ `thingName` - クライアントデバイスの AWS IoT モノの名前。

**Example 選択ルール例**  
次の選択ルールは、名前が `MyClientDevice1` または `MyClientDevice2` のクライアントデバイスと一致します。  

```
thingName: MyClientDevice1 OR thingName: MyClientDevice2
```

**Example 選択ルール例 (ワイルドカードを使用)**  
次の選択ルールは、名前が `MyClientDevice` で始まるクライアントデバイスと一致します。  

```
thingName: MyClientDevice*
```

**Example 選択ルール例 (すべてのデバイスに一致)**  
次の選択ルールは、すべてのクライアントデバイスと一致します。  

```
thingName: *
```  
`policyName`  
このデバイスグループ内のクライアントデバイスに適用されるアクセス許可ポリシー。`policies` オブジェクトで定義するポリシーの名前を指定します。  
`policies`  
コアデバイスに接続するクライアントデバイス用の、クライアントデバイス認可ポリシー。各承認ポリシーは、クライアントデバイスがこれらのアクションを実行できるアクションセットとリソースを指定しています。  
このオブジェクトには、次の情報が含まれます。    
`policyNameKey`  
この承認ポリシーの名前。*policyNameKey* を、この承認ポリシーを識別するのに役立つ名前に置き換えます。このポリシー名を使用して、デバイスグループに適用するポリシーを定義します。  
このオブジェクトには、次の情報が含まれます。    
`statementNameKey`  
このポリシーステートメントの名前。*statementNameKey* を、このポリシーステートメントを識別するのに役立つ名前に置き換えます。  
このオブジェクトには、次の情報が含まれます。    
`operations`  
このポリシーのリソースに許可する操作のリスト。  
以下のすべての操作を含めることができます。  
+ `mqtt:connect` - コアデバイスに接続するアクセス許可を付与します。コアデバイスに接続するには、クライアントデバイスにこのアクセス許可が必要です。

  この操作は、次のリソースをサポートします。
  + `mqtt:clientId:deviceClientId` - クライアントデバイスがコアデバイスの MQTT ブローカーへの接続に使用するクライアント ID に基づいて、アクセスを制限します。*deviceClientId* を使用するクライアント ID に置き換えます。
+ `mqtt:publish` - MQTT メッセージをトピックにパブリッシュする権限を付与します。

  この操作は、次のリソースをサポートします。
  + <a name="client-device-authorization-policy-resource-mqtt-topic"></a>`mqtt:topic:mqttTopic` - クライアントデバイスがメッセージをパブリッシュする MQTT トピックに基づいて、アクセスを制限します。*mqttTopic* を使用するトピックに置き換えます。

    このリソースは MQTT トピックのワイルドカードをサポートしていません。
+ `mqtt:subscribe` - メッセージを受信する MQTT トピックフィルターにサブスクライブする許可を付与します。

  この操作は、次のリソースをサポートします。
  + <a name="client-device-authorization-policy-resource-mqtt-topicfilter"></a>`mqtt:topicfilter:mqttTopicFilter` - クライアントデバイスがメッセージにサブスクライブできる MQTT トピックに基づいて、アクセスを制限します。*mqttTopicFilter* を使用するトピックフィルターに置き換えます。

    このリソースは `+` および `#` MQTT トピックのワイルドカードをサポートしています。詳細については、「*AWS IoT Core デベロッパーガイド*」の「[MQTT topics](https://docs.aws.amazon.com/iot/latest/developerguide/topics.html)」を参照してください。

    クライアントデバイスは、許可を付与したトピックフィルターにのみサブスクライブできます。例えば、クライアントデバイスに `mqtt:topicfilter:client/+/status` リソースへのサブスクライブを許可した場合、クライアントデバイスは `client/+/status` にサブスクライブできますが、`client/client1/status` にはサブスクライブできません。
`*` ワイルドカードを指定すれば、すべてのアクションへのアクセスを許可することができます。  
`resources`  
このポリシーでの操作を許可するリソースのリスト。このポリシーでの操作に対応するリソースを指定します。例えば、`mqtt:publish` 操作を指定するポリシーで、MQTT トピックリソース (`mqtt:topic:mqttTopic`) のリストを指定することができます。  
`*` ワイルドカードを指定すれば、すべてのリソースへのアクセスを許可することができます。`*` ワイルドカードを使用して、部分的なリソース識別子と一致させることはできません。例えば、**"resources": "\$1"** と指定することはできますが、**"resources": "mqtt:clientId:\$1"** と指定することはできません。  
`statementDescription`  
(オプション) このポリシーステートメントの説明。

`certificates`  <a name="client-device-auth-component-configuration-certificates"></a>
(オプション) このコアデバイスの証明書設定オプション。このオブジェクトには、次の情報が含まれます。    
`serverCertificateValiditySeconds`  
(オプション) ローカル MQTT サーバー証明書の有効期限が切れるまでの時間 (秒単位)。このオプションを設定すれば、クライアントデバイスがコアデバイスから切断し、また再接続する回数をカスタマイズすることができます。  
このコンポーネントは、有効期限が切れる 24 時間前に、ローカル MQTT サーバー証明書をローテーションします。[Moquette MQTT ブローカーコンポーネント](mqtt-broker-moquette-component.md)などの MQTT ブローカーで、新しい証明書を生成して再起動します。これが実行されると、このコアデバイスに接続されているすべてのクライアントデバイスが切断されます。クライアントデバイスは、短時間待機した後に、コアデバイスに再度接続できます。  
デフォルト: `604800` (7 日)  
最小値: `172800` (2 日)  
最大値: `864000` (10 日)

**Example 例: 設定マージの更新 (制限ポリシーを使用)**  <a name="client-device-auth-component-configuration-example-restrictive"></a>
次の設定例では、名前が `MyClientDevice` で始まるクライアントデバイスに対して、すべてのトピックの接続とパブリッシュ/サブスクライブを許可するように指定しています。  

```
{
  "deviceGroups": {
    "formatVersion": "2021-03-05",
    "definitions": {
      "MyDeviceGroup": {
        "selectionRule": "thingName: MyClientDevice*",
        "policyName": "MyRestrictivePolicy"
      }
    },
    "policies": {
      "MyRestrictivePolicy": {
        "AllowConnect": {
          "statementDescription": "Allow client devices to connect.",
          "operations": [
            "mqtt:connect"
          ],
          "resources": [
            "*"
          ]
        },
        "AllowPublish": {
          "statementDescription": "Allow client devices to publish on test/topic.",
          "operations": [
            "mqtt:publish"
          ],
          "resources": [
            "mqtt:topic:test/topic"
          ]
        },
        "AllowSubscribe": {
          "statementDescription": "Allow client devices to subscribe to test/topic/response.",
          "operations": [
            "mqtt:subscribe"
          ],
          "resources": [
            "mqtt:topicfilter:test/topic/response"
          ]
        }
      }
    }
  }
}
```

**Example 例: 設定マージの更新 (許容ポリシーを使用)**  <a name="client-device-auth-component-configuration-example-permissive"></a>
次の設定例では、すべてのクライアントデバイスに対して、すべてのトピックに接続しパブリッシュ/サブスクライブすることを許可しています。  

```
{
  "deviceGroups": {
    "formatVersion": "2021-03-05",
    "definitions": {
      "MyPermissiveDeviceGroup": {
        "selectionRule": "thingName: *",
        "policyName": "MyPermissivePolicy"
      }
    },
    "policies": {
      "MyPermissivePolicy": {
        "AllowAll": {
          "statementDescription": "Allow client devices to perform all actions.",
          "operations": [
            "*"
          ],
          "resources": [
            "*"
          ]
        }
      }
    }
  }
}
```

------
#### [ v2.0.x ]

`deviceGroups`  <a name="client-device-auth-component-configuration-devicegroups"></a>
デバイスグループは、コアデバイスに接続して通信する権限を持つクライアントデバイスのグループです。選択ルールを使用してクライアントデバイスのグループを特定し、各デバイスグループにアクセス許可を指定する、*クライアントデバイス認証ポリシー*を定義します。  
このオブジェクトには、次の情報が含まれます。    
`formatVersion`  
この設定オブジェクトの形式バージョン。  
次のオプションから選択します。  
+ `2021-03-05`  
`definitions`  
このコアデバイスのデバイスグループ。各定義では、クライアントデバイスがグループのメンバーであるかどうかを評価する*選択ルール*を指定します。各定義では、選択ルールに一致するクライアントデバイスに適用するアクセス権限ポリシーも指定します。クライアントデバイスが複数のデバイスグループのメンバーである場合、デバイスのアクセス許可は各グループのアクセス許可ポリシーで設定されます。  
このオブジェクトには、次の情報が含まれます。    
`groupNameKey`  
このデバイスグループの名前。*GroupNameKey* を、このデバイスグループを識別しやすい名前に置き換えます。  
このオブジェクトには、次の情報が含まれます。    
`selectionRule`  
このデバイスグループのメンバーであるクライアントデバイスを指定するクエリ。クライアントデバイスが接続されると、コアデバイスはこの選択ルールを評価して、クライアントデバイスがこのデバイスグループのメンバーであるかどうかを判断します。クライアントデバイスがメンバーである場合、コアデバイスはこのデバイスグループのポリシーを使用して、クライアントデバイスのアクションを承認します。  
各選択ルールは、少なくとも 1 つの*選択ルール句*で構成されます。この句は、クライアントデバイスと一致できる単一の式クエリです。選択ルールは、 AWS IoT フリートインデックス作成と同じクエリ構文を使用します。選択ルール構文に関する詳細については、「*AWS IoT Core デベロッパーガイド*」の「[AWS IoT fleet indexing query syntax](https://docs.aws.amazon.com/iot/latest/developerguide/query-syntax.html)」を参照してください。  
`*` ワイルドカードを使用して、複数のクライアントデバイスを 1 つの選択ルール句と一致させます。モノ名の末尾にこのワイルドカードを使用すると、指定した文字列で始まる名前のクライアントデバイスと一致させることができます。このワイルドカードを使用して、すべてのクライアントデバイスと一致させることもできます。  
コロン文字 (`:`) を含む値を選択する場合は、コロン文字にバックスラッシュ文字 (`\\`) を使用してエスケープします。JSON などの形式では、バックスラッシュ文字をエスケープする必要があるため、コロン文字の前に 2 つのバックスラッシュ文字を入力する必要があります。例えば、`thingName: MyTeam\\\\:ClientDevice1` が `MyTeam:ClientDevice1` という名前のモノを選択するように指定する場合です。
次のセレクターを指定できます。  
+ `thingName` - クライアントデバイスの AWS IoT モノの名前。

**Example 選択ルール例**  
次の選択ルールは、名前が `MyClientDevice1` または `MyClientDevice2` のクライアントデバイスと一致します。  

```
thingName: MyClientDevice1 OR thingName: MyClientDevice2
```

**Example 選択ルール例 (ワイルドカードを使用)**  
次の選択ルールは、名前が `MyClientDevice` で始まるクライアントデバイスと一致します。  

```
thingName: MyClientDevice*
```

**Example 選択ルール例 (すべてのデバイスに一致)**  
次の選択ルールは、すべてのクライアントデバイスと一致します。  

```
thingName: *
```  
`policyName`  
このデバイスグループ内のクライアントデバイスに適用されるアクセス許可ポリシー。`policies` オブジェクトで定義するポリシーの名前を指定します。  
`policies`  
コアデバイスに接続するクライアントデバイス用の、クライアントデバイス認可ポリシー。各承認ポリシーは、クライアントデバイスがこれらのアクションを実行できるアクションセットとリソースを指定しています。  
このオブジェクトには、次の情報が含まれます。    
`policyNameKey`  
この承認ポリシーの名前。*policyNameKey* を、この承認ポリシーを識別するのに役立つ名前に置き換えます。このポリシー名を使用して、デバイスグループに適用するポリシーを定義します。  
このオブジェクトには、次の情報が含まれます。    
`statementNameKey`  
このポリシーステートメントの名前。*statementNameKey* を、このポリシーステートメントを識別するのに役立つ名前に置き換えます。  
このオブジェクトには、次の情報が含まれます。    
`operations`  
このポリシーのリソースに許可する操作のリスト。  
以下のすべての操作を含めることができます。  
+ `mqtt:connect` - コアデバイスに接続するアクセス許可を付与します。コアデバイスに接続するには、クライアントデバイスにこのアクセス許可が必要です。

  この操作は、次のリソースをサポートします。
  + `mqtt:clientId:deviceClientId` - クライアントデバイスがコアデバイスの MQTT ブローカーへの接続に使用するクライアント ID に基づいて、アクセスを制限します。*deviceClientId* を使用するクライアント ID に置き換えます。
+ `mqtt:publish` - MQTT メッセージをトピックにパブリッシュする権限を付与します。

  この操作は、次のリソースをサポートします。
  + <a name="client-device-authorization-policy-resource-mqtt-topic"></a>`mqtt:topic:mqttTopic` - クライアントデバイスがメッセージをパブリッシュする MQTT トピックに基づいて、アクセスを制限します。*mqttTopic* を使用するトピックに置き換えます。

    このリソースは MQTT トピックのワイルドカードをサポートしていません。
+ `mqtt:subscribe` - メッセージを受信する MQTT トピックフィルターにサブスクライブする許可を付与します。

  この操作は、次のリソースをサポートします。
  + <a name="client-device-authorization-policy-resource-mqtt-topicfilter"></a>`mqtt:topicfilter:mqttTopicFilter` - クライアントデバイスがメッセージにサブスクライブできる MQTT トピックに基づいて、アクセスを制限します。*mqttTopicFilter* を使用するトピックフィルターに置き換えます。

    このリソースは `+` および `#` MQTT トピックのワイルドカードをサポートしています。詳細については、「*AWS IoT Core デベロッパーガイド*」の「[MQTT topics](https://docs.aws.amazon.com/iot/latest/developerguide/topics.html)」を参照してください。

    クライアントデバイスは、許可を付与したトピックフィルターにのみサブスクライブできます。例えば、クライアントデバイスに `mqtt:topicfilter:client/+/status` リソースへのサブスクライブを許可した場合、クライアントデバイスは `client/+/status` にサブスクライブできますが、`client/client1/status` にはサブスクライブできません。
`*` ワイルドカードを指定すれば、すべてのアクションへのアクセスを許可することができます。  
`resources`  
このポリシーでの操作を許可するリソースのリスト。このポリシーでの操作に対応するリソースを指定します。例えば、`mqtt:publish` 操作を指定するポリシーで、MQTT トピックリソース (`mqtt:topic:mqttTopic`) のリストを指定することができます。  
`*` ワイルドカードを指定すれば、すべてのリソースへのアクセスを許可することができます。`*` ワイルドカードを使用して、部分的なリソース識別子と一致させることはできません。例えば、**"resources": "\$1"** と指定することはできますが、**"resources": "mqtt:clientId:\$1"** と指定することはできません。  
`statementDescription`  
(オプション) このポリシーステートメントの説明。

**Example 例: 設定マージの更新 (制限ポリシーを使用)**  <a name="client-device-auth-component-configuration-example-restrictive"></a>
次の設定例では、名前が `MyClientDevice` で始まるクライアントデバイスに対して、すべてのトピックの接続とパブリッシュ/サブスクライブを許可するように指定しています。  

```
{
  "deviceGroups": {
    "formatVersion": "2021-03-05",
    "definitions": {
      "MyDeviceGroup": {
        "selectionRule": "thingName: MyClientDevice*",
        "policyName": "MyRestrictivePolicy"
      }
    },
    "policies": {
      "MyRestrictivePolicy": {
        "AllowConnect": {
          "statementDescription": "Allow client devices to connect.",
          "operations": [
            "mqtt:connect"
          ],
          "resources": [
            "*"
          ]
        },
        "AllowPublish": {
          "statementDescription": "Allow client devices to publish on test/topic.",
          "operations": [
            "mqtt:publish"
          ],
          "resources": [
            "mqtt:topic:test/topic"
          ]
        },
        "AllowSubscribe": {
          "statementDescription": "Allow client devices to subscribe to test/topic/response.",
          "operations": [
            "mqtt:subscribe"
          ],
          "resources": [
            "mqtt:topicfilter:test/topic/response"
          ]
        }
      }
    }
  }
}
```

**Example 例: 設定マージの更新 (許容ポリシーを使用)**  <a name="client-device-auth-component-configuration-example-permissive"></a>
次の設定例では、すべてのクライアントデバイスに対して、すべてのトピックに接続しパブリッシュ/サブスクライブすることを許可しています。  

```
{
  "deviceGroups": {
    "formatVersion": "2021-03-05",
    "definitions": {
      "MyPermissiveDeviceGroup": {
        "selectionRule": "thingName: *",
        "policyName": "MyPermissivePolicy"
      }
    },
    "policies": {
      "MyPermissivePolicy": {
        "AllowAll": {
          "statementDescription": "Allow client devices to perform all actions.",
          "operations": [
            "*"
          ],
          "resources": [
            "*"
          ]
        }
      }
    }
  }
}
```

------

## ローカルログファイル
<a name="client-device-auth-component-log-file"></a>

このコンポーネントは、[Greengrass nucleus](greengrass-nucleus-component.md) コンポーネントと同じログファイルを使用します。

------
#### [ Linux ]

```
/greengrass/v2/logs/greengrass.log
```

------
#### [ Windows ]

```
C:\greengrass\v2\logs\greengrass.log
```

------

**このコンポーネントのログを確認するには**
+ コアデバイスに次のコマンドを実行して、このコンポーネントのログファイルをリアルタイムに確認します。`/greengrass/v2` または *C:\$1greengrass\$1v2* を AWS IoT Greengrass ルートフォルダへのパスに置き換えます。

------
#### [ Linux ]

  ```
  sudo tail -f /greengrass/v2/logs/greengrass.log
  ```

------
#### [ Windows (PowerShell) ]

  ```
  Get-Content C:\greengrass\v2\logs\greengrass.log -Tail 10 -Wait
  ```

------

## 変更ログ
<a name="client-device-auth-component-changelog"></a>

次の表は、コンポーネントの各バージョンにおける変更を示します。


|  **バージョン**  |  **変更**  | 
| --- | --- | 
|  2.5.5  |  Greengrass nucleus バージョン 2.16.0 リリース用にバージョンが更新されました。  | 
|  2.5.4  | Greengrass nucleus バージョン 2.15.0 リリース用にバージョンが更新されました。 | 
|  2.5.3  |  [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/ja_jp/greengrass/v2/developerguide/client-device-auth-component.html)  | 
|  2.5.2  |  Greengrass nucleus バージョン 2.14.0 リリース用にバージョンが更新されました。  | 
|  2.5.1  |  [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/ja_jp/greengrass/v2/developerguide/client-device-auth-component.html)  | 
|  2.5.0  |  [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/ja_jp/greengrass/v2/developerguide/client-device-auth-component.html)  | 
|  2.4.5  | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/ja_jp/greengrass/v2/developerguide/client-device-auth-component.html) | 
|  2.4.4  | Greengrass nucleus バージョン 2.12.0 のリリース用にバージョンが更新されました。 | 
|  2.4.3  | Greengrass nucleus バージョン 2.11.0 のリリース用にバージョンが更新されました。 | 
|  2.4.2  |  <a name="changelog-client-device-auth-2.4.2"></a>[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/ja_jp/greengrass/v2/developerguide/client-device-auth-component.html)  | 
|  2.4.1  | Greengrass nucleus バージョン 2.10.0 のリリース用にバージョンが更新されました。 | 
|  2.4.0  |  [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/ja_jp/greengrass/v2/developerguide/client-device-auth-component.html)  | 
|  2.3.2  |  [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/ja_jp/greengrass/v2/developerguide/client-device-auth-component.html)  | 
|  2.3.1  |  [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/ja_jp/greengrass/v2/developerguide/client-device-auth-component.html)  | 
|  2.3.0  |   このバージョンは現在利用できません。このバージョンの改善は、このコンポーネントのそれ以降のバージョンで利用できます。  新機能 [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/ja_jp/greengrass/v2/developerguide/client-device-auth-component.html)  | 
|  2.2.3  | Greengrass nucleus バージョン 2.8.0 のリリース用にバージョンが更新されました。 | 
|  2.2.2  |  [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/ja_jp/greengrass/v2/developerguide/client-device-auth-component.html)  | 
|  2.2.1  |  Greengrass nucleus バージョン 2.7.0 のリリース用にバージョンが更新されました。 | 
|  2.2.0  |  <a name="changelog-client-device-auth-2.2.0"></a>[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/ja_jp/greengrass/v2/developerguide/client-device-auth-component.html)  | 
|  2.1.0  |  [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/ja_jp/greengrass/v2/developerguide/client-device-auth-component.html)  | 
|  2.0.4  |  Greengrass nucleus バージョン 2.5.0 のリリース用にバージョンが更新されました。  | 
|  2.0.3  |  [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/ja_jp/greengrass/v2/developerguide/client-device-auth-component.html)  | 
|  2.0.2  |  Greengrass nucleus バージョン 2.4.0 のリリース用にバージョンが更新されました。  | 
|  2.0.1  |  Greengrass nucleus バージョン 2.3.0 のリリース用にバージョンが更新されました。  | 
|  2.0.0  |  当初のバージョン  | 