クライアントデバイスを認証して認可する
注記
この機能は、Greengrass nucleus コンポーネントの v2.6.0 以降で利用できます。
クライアントデバイス認証 IPC サービスを使用して、クライアントデバイスなどのローカル IoT デバイスが接続できるカスタムのローカルブローカーコンポーネントを開発します。
これらの IPC オペレーションを使用するには、カスタムコンポーネントの依存関係として、バージョン 2.2.0 以降のクライアントデバイス認証コンポーネントを含めます。その後、カスタムコンポーネントの IPC オペレーションを使用して、次の操作を行うことができます。
-
コアデバイスに接続するクライアントデバイスの ID の検証。
-
クライアントデバイスがコアデバイスに接続するためのセッションの作成。
-
クライアントデバイスにアクションを実行するアクセス許可があるかどうかの検証。
-
コアデバイスのサーバー証明書が更新された際の通知の受け取り。
トピック
最小 SDK バージョン
次の表に、AWS IoT Device SDK の最小バージョンを示します。クライアントデバイス認証 IPC サービスとやり取りする際は、これを使用する必要があります。
SDK | 最小バージョン |
---|---|
v1.9.3 |
|
v1.11.3 |
|
v1.18.3 |
|
v1.12.0 |
認可
カスタムコンポーネントでクライアントデバイス認可 IPC サービスを使用するには、コンポーネントがこれらのオペレーションを実行できるように認可ポリシーを定義する必要があります。承認ポリシーの定義については、「コンポーネントに IPC オペレーションの実行を許可する」を参照してください。
クライアントデバイスの認証および認可の認可ポリシーには、次のプロパティがあります。
IPC サービス識別子: aws.greengrass.clientdevices.Auth
操作 | 説明 | リソース |
---|---|---|
|
コンポーネントがクライアントデバイスの ID を検証できるようにします。 |
|
|
コンポーネントがクライアントデバイスの認証情報を検証し、そのクライアントデバイスのセッションを作成できるようにします。 |
|
|
クライアントデバイスにアクションを実行するアクセス許可があるかどうかを、コンポーネントが検証できるようにします。 |
|
|
コアデバイスのサーバー証明書が更新されたときに、コンポーネントが通知を受け取ることができるようにします。 |
|
|
コンポーネントがすべてのクライアントデバイス認証 IPC サービスのオペレーションを実行できるようにします。 |
|
承認ポリシーの例
次の承認ポリシーの例を参照して、コンポーネントの承認ポリシーの設定に役立てることができます。
例 承認ポリシーの例
次の認可ポリシーの例では、コンポーネントがすべてのクライアントデバイス認可の 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
クライアントデバイスの ID の検証。このオペレーションは、クライアントデバイスが有効な AWS IoT のモノであるかどうかを検証します。
リクエスト
このオペレーションのリクエストには以下のパラメータがあります。
credential
-
クライアントデバイスの認証情報。このオブジェクト (
ClientDeviceCredential
) には、次の情報が含まれます。clientDeviceCertificate
(Python:client_device_certificate
)-
クライアントデバイスの X.509 デバイス証明書。
レスポンス
このオペレーションのレスポンスには以下の情報が含まれます。
isValidClientDevice
(Python:is_valid_client_device
)-
クライアントデバイスの ID が有効かどうか。
GetClientDeviceAuthToken
クライアントデバイスの認証情報を検証し、クライアントデバイスのセッションを作成します。このオペレーションは、クライアントデバイスのアクションを承認するために、後続のリクエストで使用できるセッショントークンを返します。
クライアントデバイスを正常に接続するには、クライアントデバイス認証コンポーネントで、クライアントデバイスが使用するクライアント ID の mqtt:connect
アクセス許可が付与される必要があります。
リクエスト
このオペレーションのリクエストには以下のパラメータがあります。
credential
-
クライアントデバイスの認証情報。このオブジェクト (
CredentialDocument
) には、次の情報が含まれます。mqttCredential
(Python:mqtt_credential
)-
クライアントデバイスの MQTT 認証情報。クライアントデバイスが接続に使用するクライアント ID と証明書を指定します。このオブジェクト (
MQTTCredential
) には、次の情報が含まれます。clientId
(Python:client_id
)-
接続に使用するクライアント ID。
certificatePem
(Python:certificate_pem
)-
接続に使用する X.509 デバイス証明書。
username
-
注記
このプロパティは現在使用されていません。
password
-
注記
このプロパティは現在使用されていません。
レスポンス
このオペレーションのレスポンスには以下の情報が含まれます。
clientDeviceAuthToken
(Python:client_device_auth_token
)-
クライアントデバイスのセッショントークン。このセッショントークンを後続のリクエストで使用して、このクライアントデバイスのアクションを承認できます。
AuthorizeClientDeviceAction
クライアントデバイスに、リソースに対するアクションを実行するアクセス許可があるかどうかを検証します。クライアントデバイスの承認ポリシーは、コアデバイスに接続している際にクライアントデバイスが実行できるアクセス許可を指定します。クライアントデバイスの認可ポリシーは、クライアントデバイス認可コンポーネントを設定する際に定義します。
リクエスト
このオペレーションのリクエストには以下のパラメータがあります。
clientDeviceAuthToken
(Python:client_device_auth_token
)-
クライアントデバイスのセッショントークン。
operation
-
承認するオペレーション。
resource
-
クライアントデバイスがオペレーションを実行するリソース。
レスポンス
このオペレーションのレスポンスには以下の情報が含まれます。
isAuthorized
(Python:is_authorized
)-
クライアントデバイスがリソースに対するオペレーションの実行を許可されているかどうか。
SubscribeToCertificateUpdates
コアデバイスの新しいサーバー証明書が更新されるたびにそれを受け取るようにサブスクライブします。サーバー証明書が更新されると、新しいサーバー証明書を使用してブローカーをリロードする必要があります。
クライアントデバイス認証コンポーネントは、デフォルトでは 7 日ごとにサーバー証明書を更新します。更新の間隔は、2 日から 10 日の間で設定できます。
このオペレーションはサブスクリプションオペレーションで、イベントメッセージのストリームをサブスクライブするというものです。このオペレーションを使用するには、イベントメッセージ、エラー、およびストリームクロージャを処理する関数を使用して、ストリームレスポンスハンドラーを定義します。(詳細については、IPC イベントストリームへのサブスクライブ を参照してください)。
イベントメッセージの種類: CertificateUpdateEvent
リクエスト
このオペレーションのリクエストには以下のパラメータがあります。
certificateOptions
(Python:certificate_options
)-
サブスクライブする証明書更新の種類。このオブジェクト (
CertificateOptions
) には、次の情報が含まれます。certificateType
(Python:certificate_type
)-
サブスクライブする証明書更新の種類。次のオプションを選択します。
-
SERVER
-
レスポンス
このオペレーションのレスポンスには以下の情報が含まれます。
messages
-
メッセージのストリーム。このオブジェクト (
CertificateUpdateEvent
) には、次の情報が含まれます。certificateUpdate
(Python:certificate_update
)-
新しい証明書に関する情報。このオブジェクト (
CertificateUpdate
) には、次の情報が含まれます。certificate
-
証明書。
privateKey
(Python:private_key
)-
証明書のプライベートキー。
publicKey
(Python:public_key
)-
証明書のパブリックキー。
caCertificates
(Python:ca_certificates
)-
証明書の CA 証明書チェーン内の認証局 (CA) 証明書のリスト。