

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

# クライアントデバイスを認証して認可する
<a name="ipc-client-device-auth"></a>

**注記**  
この機能は、[Greengrass nucleus コンポーネント](greengrass-nucleus-component.md)の v2.6.0 以降で利用できます。

クライアントデバイス認証 IPC サービスを使用して、クライアントデバイスなどのローカル IoT デバイスが接続できるカスタムのローカルブローカーコンポーネントを開発します。

これらの IPC オペレーションを使用するには、カスタムコンポーネントの依存関係として、バージョン 2.2.0 以降の[クライアントデバイス認証コンポーネント](client-device-auth-component.md)を含めます。その後、カスタムコンポーネントの IPC オペレーションを使用して、次の操作を行うことができます。
+ コアデバイスに接続するクライアントデバイスの ID の検証。
+ クライアントデバイスがコアデバイスに接続するためのセッションの作成。
+ クライアントデバイスにアクションを実行するアクセス許可があるかどうかの検証。
+ コアデバイスのサーバー証明書が更新された際の通知の受け取り。

**Topics**
+ [最小 SDK バージョン](#ipc-client-device-auth-sdk-versions)
+ [Authorization](#ipc-client-device-auth-authorization)
+ [VerifyClientDeviceIdentity](#ipc-operation-verifyclientdeviceidentity)
+ [GetClientDeviceAuthToken](#ipc-operation-getclientdeviceauthtoken)
+ [AuthorizeClientDeviceAction](#ipc-operation-authorizeclientdeviceaction)
+ [SubscribeToCertificateUpdates](#ipc-operation-subscribetocertificateupdates)

## 最小 SDK バージョン
<a name="ipc-client-device-auth-sdk-versions"></a>

次の表に、クライアントデバイスの認証 IPC サービスとやり取りするために使用 AWS IoT Device SDK する必要がある の最小バージョンを示します。


| SDK | 最小バージョン | 
| --- | --- | 
|  [AWS IoT Device SDK for Java v2](https://github.com/aws/aws-iot-device-sdk-java-v2)  |  v1.9.3  | 
|  [AWS IoT Device SDK Python v2 用](https://github.com/aws/aws-iot-device-sdk-python-v2)  |  v1.11.3  | 
|  [AWS IoT Device SDK C\$1\$1 v2 用](https://github.com/aws/aws-iot-device-sdk-cpp-v2)  |  v1.18.3  | 
|  [AWS IoT Device SDK for JavaScript v2](https://github.com/aws/aws-iot-device-sdk-js-v2)  |  v1.12.0  | 

## Authorization
<a name="ipc-client-device-auth-authorization"></a>

カスタムコンポーネントでクライアントデバイス認可 IPC サービスを使用するには、コンポーネントがこれらのオペレーションを実行できるように認可ポリシーを定義する必要があります。承認ポリシーの定義については、「[コンポーネントに IPC オペレーションの実行を許可する](interprocess-communication.md#ipc-authorization-policies)」を参照してください。

クライアントデバイスの認証および認可の認可ポリシーには、次のプロパティがあります。

**IPC サービス識別子:** `aws.greengrass.clientdevices.Auth`


| 運用 | 説明 | リソース | 
| --- | --- | --- | 
|  `aws.greengrass#VerifyClientDeviceIdentity`  |  コンポーネントがクライアントデバイスの ID を検証できるようにします。  |  `*`  | 
|  `aws.greengrass#GetClientDeviceAuthToken`  |  コンポーネントがクライアントデバイスの認証情報を検証し、そのクライアントデバイスのセッションを作成できるようにします。  |  `*`  | 
|  `aws.greengrass#AuthorizeClientDeviceAction`  |  クライアントデバイスにアクションを実行するアクセス許可があるかどうかを、コンポーネントが検証できるようにします。  |  `*`  | 
|  `aws.greengrass#SubscribeToCertificateUpdates`  |  コアデバイスのサーバー証明書が更新されたときに、コンポーネントが通知を受け取ることができるようにします。  |  `*`  | 
|  `*`  |  コンポーネントがすべてのクライアントデバイス認証 IPC サービスのオペレーションを実行できるようにします。  |  `*`  | 

### 承認ポリシーの例
<a name="ipc-client-device-auth-authorization-policy-examples"></a>

次の承認ポリシーの例を参照して、コンポーネントの承認ポリシーの設定に役立てることができます。

**Example 承認ポリシーの例**  
次の認可ポリシーの例では、コンポーネントがすべてのクライアントデバイス認可の IPC オペレーションを実行できるようにします。  

```
{
  "accessControl": {
    "aws.greengrass.clientdevices.Auth": {
      "com.example.MyLocalBrokerComponent:clientdevices:1": {
        "policyDescription": "Allows access to authenticate and authorize client devices.",
        "operations": [
          "aws.greengrass#VerifyClientDeviceIdentity",
          "aws.greengrass#GetClientDeviceAuthToken",
          "aws.greengrass#AuthorizeClientDeviceAction",
          "aws.greengrass#SubscribeToCertificateUpdates"
        ],
        "resources": [
          "*"
        ]
      }
    }
  }
}
```

## VerifyClientDeviceIdentity
<a name="ipc-operation-verifyclientdeviceidentity"></a>

クライアントデバイスの ID の検証。このオペレーションは、クライアントデバイスが有効な AWS IoT モノであるかどうかを検証します。

### リクエスト
<a name="ipc-operation-verifyclientdeviceidentity-request"></a>

このオペレーションのリクエストには以下のパラメータがあります。

`credential`  
クライアントデバイスの認証情報。このオブジェクト (`ClientDeviceCredential`) には、次の情報が含まれます。    
`clientDeviceCertificate` (Python: `client_device_certificate`)  
クライアントデバイスの X.509 デバイス証明書。

### 応答
<a name="ipc-operation-verifyclientdeviceidentity-response"></a>

このオペレーションのレスポンスには以下の情報が含まれます。

`isValidClientDevice` (Python: `is_valid_client_device`)  
クライアントデバイスの ID が有効かどうか。

## GetClientDeviceAuthToken
<a name="ipc-operation-getclientdeviceauthtoken"></a>

クライアントデバイスの認証情報を検証し、クライアントデバイスのセッションを作成します。このオペレーションは、[クライアントデバイスのアクションを承認](#ipc-operation-authorizeclientdeviceaction)するために、後続のリクエストで使用できるセッショントークンを返します。

クライアントデバイスを正常に接続するには、[クライアントデバイス認証コンポーネント](client-device-auth-component.md#client-device-auth-component-configuration)で、クライアントデバイスが使用するクライアント ID の `mqtt:connect` アクセス許可が付与される必要があります。

### リクエスト
<a name="ipc-operation-getclientdeviceauthtoken-request"></a>

このオペレーションのリクエストには以下のパラメータがあります。

`credential`  
クライアントデバイスの認証情報。このオブジェクト (`CredentialDocument`) には、次の情報が含まれます。    
`mqttCredential` (Python: `mqtt_credential`)  
クライアントデバイスの MQTT 認証情報。クライアントデバイスが接続に使用するクライアント ID と証明書を指定します。このオブジェクト (`MQTTCredential`) には、次の情報が含まれます。    
`clientId` (Python: `client_id`)  
接続に使用するクライアント ID。  
`certificatePem` (Python: `certificate_pem`)  
接続に使用する X.509 デバイス証明書。  
`username`  
このプロパティは現在使用されていません。  
`password`  
このプロパティは現在使用されていません。

### 応答
<a name="ipc-operation-getclientdeviceauthtoken-response"></a>

このオペレーションのレスポンスには以下の情報が含まれます。

`clientDeviceAuthToken` (Python: `client_device_auth_token`)  
クライアントデバイスのセッショントークン。このセッショントークンを後続のリクエストで使用して、このクライアントデバイスのアクションを承認できます。

## AuthorizeClientDeviceAction
<a name="ipc-operation-authorizeclientdeviceaction"></a>

クライアントデバイスに、リソースに対するアクションを実行するアクセス許可があるかどうかを検証します。*クライアントデバイスの認可ポリシー*は、コアデバイスに接続しているときにクライアントデバイスが実行できるアクセス許可を指定します。クライアントデバイスの認可ポリシーは、[クライアントデバイス認可コンポーネント](client-device-auth-component.md#client-device-auth-component-configuration)を設定する際に定義します。

### リクエスト
<a name="ipc-operation-authorizeclientdeviceaction-request"></a>

このオペレーションのリクエストには以下のパラメータがあります。

`clientDeviceAuthToken` (Python: `client_device_auth_token`)  
クライアントデバイスのセッショントークン。

`operation`  
承認するオペレーション。

`resource`  
クライアントデバイスがオペレーションを実行するリソース。

### 応答
<a name="ipc-operation-authorizeclientdeviceaction-response"></a>

このオペレーションのレスポンスには以下の情報が含まれます。

`isAuthorized` (Python: `is_authorized`)  
クライアントデバイスがリソースに対するオペレーションの実行を許可されているかどうか。

## SubscribeToCertificateUpdates
<a name="ipc-operation-subscribetocertificateupdates"></a>

コアデバイスの新しいサーバー証明書が更新されるたびにそれを受け取るようにサブスクライブします。サーバー証明書が更新されると、新しいサーバー証明書を使用してブローカーをリロードする必要があります。

[クライアントデバイス認証コンポーネント](client-device-auth-component.md)は、デフォルトでは 7 日ごとにサーバー証明書を更新します。更新の間隔は、2 日から 10 日の間で設定できます。

<a name="ipc-subscribe-operation-note"></a>このオペレーションはサブスクリプションオペレーションで、イベントメッセージのストリームをサブスクライブするというものです。このオペレーションを使用するには、イベントメッセージ、エラー、およびストリームクロージャを処理する関数を使用して、ストリームレスポンスハンドラーを定義します。(詳細については、[IPC イベントストリームへのサブスクライブ](interprocess-communication.md#ipc-subscribe-operations) を参照してください)。

**イベントメッセージの種類:** `CertificateUpdateEvent`

### リクエスト
<a name="ipc-operation-subscribetocertificateupdates-request"></a>

このオペレーションのリクエストには以下のパラメータがあります。

`certificateOptions` (Python: `certificate_options`)  
サブスクライブする証明書更新の種類。このオブジェクト (`CertificateOptions`) には、次の情報が含まれます。    
`certificateType` (Python: `certificate_type`)  
サブスクライブする証明書更新の種類。次のオプションを選択します。  
+ `SERVER`

### 応答
<a name="ipc-operation-subscribetocertificateupdates-response"></a>

このオペレーションのレスポンスには以下の情報が含まれます。

`messages`  
メッセージのストリーム。このオブジェクト (`CertificateUpdateEvent`) には、次の情報が含まれます。    
`certificateUpdate` (Python: `certificate_update`)  
新しい証明書に関する情報。このオブジェクト (`CertificateUpdate`) には、次の情報が含まれます。    
`certificate`  
証明書。  
`privateKey` (Python: `private_key`)  
証明書のプライベートキー。  
`publicKey` (Python: `public_key`)  
証明書のパブリックキー。  
`caCertificates` (Python: `ca_certificates`)  
証明書の CA 証明書チェーン内の認証局 (CA) 証明書のリスト。