デバイスごとの一意の証明書認証モードでは、アプリケーションサーバは、対応する ApsaraMQ for MQTT ブローカーから各デバイスの一意のアクセス資格情報を申請します。デバイスのアクセス資格情報は、デバイスのクライアント ID、AccessKey ID、および AccessKey シークレットで構成されます。クライアントが ApsaraMQ for MQTT ブローカーへの接続を確立する場合、認証のためにデバイスのアクセス資格情報に基づいて、ユーザー名とパスワードのパラメーターを構成する必要があります。認証に合格した後でのみ、デバイスをアクティブ化し、デバイスと ApsaraMQ for MQTT 間でデータを転送できます。
用語
用語 | 説明 |
デバイスアクセス資格情報 | ApsaraMQ for MQTT ブローカーが ApsaraMQ for MQTT クライアントに発行するグローバルに一意の資格情報。デバイスアクセス資格情報は、クライアントの AccessKey ID、AccessKey シークレット、およびクライアント ID で構成されます。クライアントが ApsaraMQ for MQTT ブローカーへの接続を確立する場合、事前に定義されたルールに基づいて、デバイスアクセス資格情報内の AccessKey ID と AccessKey シークレットを使用して、認証リクエストのユーザー名とパスワードのパラメーターを構成する必要があります。 |
アプリケーションサーバ | ローカルアカウントを管理し、クライアントに代わってデバイスアクセス資格情報を申請および管理するために使用するサーバー。 |
ApsaraMQ for MQTT ブローカー | ApsaraMQ for MQTT が権限認証とメッセージングに使用するサーバー。ApsaraMQ for MQTT ブローカーは、アプリケーションサーバによって開始された認証関連のリクエストを処理し、クライアント間のメッセージングのミドルウェアとして機能します。 |
計算方法
このセクションでは、ApsaraMQ for MQTT クライアントが ApsaraMQ for MQTT ブローカーに送信する CONNECT パケットのユーザー名とパスワードのパラメーターを指定するためのルールについて説明します。これらのパラメーターは、デバイスごとの一意の証明書認証を実行するために使用されます。詳細については、「認証の概要」をご参照ください。
ユーザー名
ユーザー名パラメーターの有効な値は、認証モード名、クライアントの AccessKey ID、およびインスタンス ID で構成されます。3 つの部分は縦棒(|)で区切られます。デバイスごとの一意の証明書認証を有効にする場合は、認証モードを DeviceCredential に設定します。
たとえば、ID が GID_Test@@@0001 の ApsaraMQ for MQTT クライアントが AccessKey ID YYYYY を使用して ID が mqtt-xxxxx の ApsaraMQ for MQTT インスタンスにアクセスする場合、ユーザー名パラメーターを DeviceCredential|YYYYY|mqtt-xxxxx に設定します。
クライアント ID の詳細については、「用語」をご参照ください。
パスワード
パスワードパラメーターは、クライアント ID の署名計算結果を指定します。クライアント ID の署名の計算方法の例を次に示します。
ID が GID_Test@@@0001 の ApsaraMQ for MQTT クライアントは、XXXXX を AccessKey シークレットとして使用します。
署名対象の文字列 GID_Test@@@0001 の署名を HMAC SHA-1 アルゴリズムを使用して計算し、バイナリ配列を取得します。AccessKey シークレット XXXXX は、HMAC 計算のキーとして使用されます。バイナリ配列を Base64 でエンコードして、パスワードパラメーターの最終的な署名文字列を取得します。
各プログラミング言語には、HMAC SHA-1 アルゴリズムを実装するための関数ライブラリが付属しています。ビジネス要件に基づいて、対応する関数を使用できます。
プロセス
デバイスごとの一意の証明書認証モードを使用する場合は、次のプロセスに基づいてアプリケーションサーバをデプロイします。初期化中に、ApsaraMQ for MQTT クライアントがアプリケーションサーバと対話してデバイスアクセス資格情報を取得および更新できることを確認してください。
図 1. 認証プロセス
デバイスごとの一意の証明書認証の手順を以下に示します。
アプリケーションサーバは、ApsaraMQ for MQTT クライアントのデバイスアクセス資格情報を申請するために、API リクエストを ApsaraMQ for MQTT ブローカーに送信します。
ApsaraMQ for MQTT ブローカーはリクエストを認証します。ブローカーがリクエストが有効であると判断した場合、ブローカーは対応するデバイスアクセス資格情報を発行します。
アプリケーションサーバは、返されたデバイスアクセス資格情報をローカルキャッシュに保存し、デバイスアクセス資格情報をクライアントにマッピングします。デバイスアクセス資格情報のキャッシュには、次の利点があります。
クライアントでデバイスアクセス資格情報が漏洩しない限り、デバイスアクセス資格情報を更新する必要はありません。クライアントがブローカーに再接続すると、アプリケーションサーバはキャッシュからデバイスアクセス資格情報をクライアントに直接返すことができます。これにより、アクセス資格情報を申請するための API 操作を呼び出すオーバーヘッドがなくなります。
ApsaraMQ for MQTT クライアントが新しいデバイスアクセス資格情報を申請し、ApsaraMQ for MQTT ブローカーでエラーが発生した場合、アプリケーションサーバはローカルディザスタリカバリのために以前に申請されたデバイスアクセス資格情報を返します。
アプリケーションサーバは、リクエストされたデバイスアクセス資格情報を対応する ApsaraMQ for MQTT クライアントに発行します。
ApsaraMQ for MQTT クライアントは、ApsaraMQ for MQTT ブローカーに接続するために認証リクエストを送信します。認証リクエストの関連パラメーターは、事前に定義されたルールに基づいて、デバイスアクセス資格情報に含まれる情報を使用して構成されます。ApsaraMQ for MQTT クライアントは認証に合格した後、メッセージを送受信できます。
制限
インスタンスの仕様
ApsaraMQ for MQTT インスタンスによってデバイスに提供されるアクセス資格情報のクォータは、インスタンスに指定された最大接続数と同じです。上限に達すると、新しいデバイスのアクセス資格情報を申請できません。インスタンス構成をスペックアップして、アクセス資格情報のクォータを増やすことができます。詳細については、「インスタンスの更新とインスタンス構成のスペックアップまたはスペックダウン」をご参照ください。
デバイスごとの一意の証明書認証モードを使用する場合は、UnRegisterDeviceCredential 操作を呼び出して、使用されなくなったデバイスアクセス資格情報をできるだけ早く削除し、クォータを節約することをお勧めします。
ApsaraMQ for MQTT クライアント
ApsaraMQ for MQTT クライアントは、ApsaraMQ for MQTT ブローカーへの接続を確立するたびに、認証リクエストにユーザー名とパスワードのパラメーターを含めます。ユーザー名とパスワードのパラメーターは、事前に定義されたルールに基づいて、デバイスアクセス資格情報内の AccessKey ID と AccessKey シークレットを使用して構成されていることを確認してください。
ApsaraMQ for MQTT クライアントが ApsaraMQ for MQTT ブローカーに再接続するたびに同じデバイスアクセス資格情報を申請する必要がないようにするには、クライアントはアプリケーションサーバから返されたデバイスアクセス資格情報を永続的に保存する必要があります。これは、多数の ApsaraMQ for MQTT クライアントが同時に ApsaraMQ for MQTT ブローカーに接続するときに、アプリケーションサーバが予期せず終了するのを防ぐのに役立ちます。
アプリケーションサーバ
アプリケーションサーバは、デバイスアクセス資格情報と ApsaraMQ for MQTT クライアント間のマッピングを管理する必要があります。これにより、同じクライアントに対して資格情報申請操作を繰り返し呼び出す必要がなくなります。
アプリケーションサーバは、ローカルディザスタリカバリを実装する必要があります。これは、ApsaraMQ for MQTT ブローカーが一時的に使用できなくなった場合の業務継続性を確保するのに役立ちます。
関連 API 操作
対応する API 操作を呼び出して、デバイスごとの一意の証明書認証を実行できます。アプリケーションサーバは、デバイスアクセス資格情報の申請と管理を担当します。 HTTPS 経由で API 操作を呼び出すことによって、ApsaraMQ for MQTT ブローカーと対話します。
各 API 操作では、AccessKey ペアとリクエスト署名を使用して実行される ID 検証が必要です。ApsaraMQ for MQTT は、デバイスアクセス資格情報を作成、クエリ、削除、および更新できる API 操作を提供します。詳細については、「デバイスごとの一意の証明書認証操作」をご参照ください。