カスタム認証ワークフローについて
カスタム認証を使用すると、オーソライザーリソースを使用してクライアントを認証および認可する方法を定義できます。 各オーソライザーには、カスタマー管理の Lambda 関数への参照、デバイスの認証情報を検証するためのオプションのパブリックキー、および追加の設定情報が含まれています。次の図は、AWS IoT Core でのカスタム認証の認可ワークフローを示しています。
AWS IoT Core カスタム認証と認可ワークフロー
次のリストでは、カスタム認証および認可ワークフローの各ステップについて説明します。
-
デバイスは、サポートされているいずれかの デバイス通信プロトコル を使用して、お客様の AWS IoT Core データエンドポイントに接続します。デバイスは、リクエストのヘッダーフィールドまたはクエリパラメータ (HTTP Publish または MQTT over WebSocket プロトコルの場合)、または MQTT CONNECT メッセージのユーザー名とパスワードフィールド (MQTT および MQTT over WebSockets プロトコルの場合) で認証情報を渡します。
-
AWS IoT Core は、次の 2 つの条件のいずれかをチェックします。
-
受信リクエストはオーソライザーを指定します。
-
リクエストを受信する AWS IoT Core データエンドポイントには、デフォルトのオーソライザーが設定されています。
AWS IoT Core がこれらのいずれかの方法でオーソライザーを見つけた場合、AWS IoT Core はオーソライザーに関連付けられた Lambda 関数をトリガーします。
-
-
(オプション) トークン署名を有効にしている場合、AWS IoT Core は、Lambda 関数をトリガーする前に、オーソライザーに保存されているパブリックキーを使用してリクエストの署名を検証します。検証が失敗した場合、AWS IoT Core は Lambda 関数を呼び出さずにリクエストを停止します。
-
Lambda 関数は、リクエスト内の認証情報と接続メタデータを受け取り、認証の可否を判断します。
-
Lambda 関数は、認証の可否の判断の結果と、接続で許可されるアクションを指定する AWS IoT Core ポリシードキュメントを返します。Lambda 関数は、Lambda 関数を呼び出して AWS IoT Core がリクエストの認証情報を再検証する頻度を指定する情報も返します。
-
AWS IoT Core は、Lambda 関数から受け取ったポリシーに照らして、接続のアクティビティを評価します。
-
接続が確立され、カスタムオーソライザー Lambda が最初に呼び出された後、MQTT オペレーションなしでアイドル状態の接続では、次の呼び出しが最大 5 分間遅延する可能性があります。その後、それ以降の呼び出しはカスタムオーソライザー Lambda の更新間隔に従います。このアプローチにより、AWS アカウント の Lambda 同時実行制限を超える可能性のある過剰な呼び出しを防ぐことができます。
スケーリングに関する考慮事項
Lambda 関数はオーソライザーの認証と認可を処理するため、関数は Lambda の料金とサービスの制限 (同時実行率など) の対象となります。Lambda の料金の詳細については、「Lambda の料金refreshAfterInSeconds および disconnectAfterInSeconds パラメータを調整することで、Lambda 関数の負荷を管理できます。Lambda 関数のレスポンスの内容の詳細については、Lambda 関数の定義 を参照してください。
注記
署名を有効にしておくと、認識されないクライアントによる Lambda の過度なトリガーを防ぐことができます。オーソライザーで署名を無効にする前に、これを考慮してください。
注記
カスタムオーソライザーの Lambda 関数のタイムアウト制限は 5 秒です。