クライアントデバイスを認証して認可する - AWS IoT Greengrass

クライアントデバイスを認証して認可する

注記

この機能は、Greengrass nucleus コンポーネントの v2.6.0 以降で利用できます。

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

これらの IPC オペレーションを使用するには、カスタムコンポーネントの依存関係として、バージョン 2.2.0 以降のクライアントデバイス認証コンポーネントを含めます。その後、カスタムコンポーネントの IPC オペレーションを使用して、次の操作を行うことができます。

  • コアデバイスに接続するクライアントデバイスの ID の検証。

  • クライアントデバイスがコアデバイスに接続するためのセッションの作成。

  • クライアントデバイスにアクションを実行するアクセス許可があるかどうかの検証。

  • コアデバイスのサーバー証明書が更新された際の通知の受け取り。

最小 SDK バージョン

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

認可

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

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

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

操作 説明 リソース

aws.greengrass#VerifyClientDeviceIdentity

コンポーネントがクライアントデバイスの ID を検証できるようにします。

*

aws.greengrass#GetClientDeviceAuthToken

コンポーネントがクライアントデバイスの認証情報を検証し、そのクライアントデバイスのセッションを作成できるようにします。

*

aws.greengrass#AuthorizeClientDeviceAction

クライアントデバイスにアクションを実行するアクセス許可があるかどうかを、コンポーネントが検証できるようにします。

*

aws.greengrass#SubscribeToCertificateUpdates

コアデバイスのサーバー証明書が更新されたときに、コンポーネントが通知を受け取ることができるようにします。

*

*

コンポーネントがすべてのクライアントデバイス認証 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) 証明書のリスト。