認証は、Azure Cloud HSM 内で安全にアクセスして動作する上で重要な側面です。 この記事では、コマンド ライン インターフェイス (CLI)、PKCS#11、Java Cryptography Extension (JCE)、OpenSSL などの認証方法について説明します。 この記事では、マルチスレッドとセッション処理のベスト プラクティスについても説明します。
Cloud HSM CLI 認証
対話型モードまたは単一コマンド モードで などの CLI ツールを使用して認証できます。 対話型モードでは、 コマンドを使用します。 単一コマンド モードの場合は、とのパラメーターを含めます。 アプリケーションが HSM 資格情報を使用していない場合は、HSM 資格情報を安全に格納することをお勧めします。
対話型モード
./azcloudhsm_util
loginHSM -u CU -s cu1 -p user1234
単一コマンド モード
sudo ./azcloudhsm_util singlecmd loginHSM -u CU -s cu1 -p user1234 findKey
PKCS#11 認証
PKCS#11 では、を使用してセッションを開いた後、 API を使用してサインインします。 スロットごとに 1 回だけ を使用する必要があります (Cloud HSM クラスター)。 正常にサインインしたら、もう一度サインインしなくても、 を使用して追加のセッションを開くことができます。
char pPin[256] = "cu1:user1234";
…
rv = (func_list->C_Initialize) (NULL);
rv = (func_list->C_GetTokenInfo) (slot, &token_info);
rv = (func_list->C_OpenSession) (slot, CKF_SERIAL_SESSION | CKF_RW_SESSION, NULL, NULL, &session_rw);
rv = (func_list->C_Login) (session_rw, CKU_USER, (CK_UTF8CHAR_PTR) pPin, n_pin);
…
PKCS#11 に対する認証のコード例を取得するには、PKCS#11 と Azure Cloud HSM を統合するための
JCE 認証
Azure Cloud HSM の JCE プロバイダーでは、暗黙的なサインイン方法と明示的なサインイン方法の両方がサポートされています。 それぞれ異なるユース ケースに適しています。
SDK が認証を自律的に管理するため、可能な限り暗黙的なサインインを使用することをお勧めします。 この方法は、アプリケーションがクラスターから切断され、再認証が必要な場合に特に便利です。 暗黙的なサインインにより、アプリケーション コードを直接制御できないプラットフォームとの統合中に、アプリケーションに資格情報を提供することも容易になります。
LoginManager lm = LoginManager.getInstance();
lm.login("PARTITION_1","cu1", "user1234");
…
lm.logout();
…
サインイン方法の詳細については、JCE と Azure Cloud HSM の統合に関するガイドを参照してください。
OpenSSL 認証
Azure Cloud HSM に OpenSSL エンジンを使用する場合、環境変数によって資格情報が提供されます。 アプリケーションが HSM 資格情報を使用していない場合は、HSM 資格情報を安全に格納することをお勧めします。 手動入力を回避するために、これらの環境変数を自動的に取得して設定するように環境を構成するのが理想的です。
export azcloudhsm_password="cu1:user1234"
export azcloudhsm_openssl_conf=/opt/azurecloudhsm/bin/azcloudhsm_openssl_dynamic.conf
export LD_LIBRARY_PATH=/opt/azurecloudhsm/lib64/:$LD_LIBRARY_PATH
…
sudo ./azcloudhsm_client azcloudhsm_client.cfg > /dev/null 2>&1 &
openssl genpkey -algorithm RSA -out private_key.pem -engine azcloudhsm_openssl
…
注
インストールされている SDK のバージョンに合わせてパスを更新します。 既定のインストール パスは です。 最新の SDK については、Azure Cloud HSM SDK リリースを参照してください。
OpenSSL での認証の詳細については、OpenSSL と Azure Cloud HSM の統合に関するガイドを参照してください。
マルチスレッド手法
Azure Cloud HSM はマルチスレッド アプリケーションをサポートしていますが、それらを処理する際の考慮事項があります。
- PKCS#11: を 1 回だけ使用して PKCS#11 ライブラリを初期化します。 を使用して、各スレッドに独自のセッションを割り当てます。 複数のスレッドで同じセッションを使用しないでください。
- JCE: Azure Cloud HSM プロバイダーを 1 回だけ初期化します。 スレッド間でサービス プロバイダー インターフェイス (SPI) オブジェクトのインスタンスを共有しないようにします。 たとえば、 、 、 、 、 、および オブジェクトは、それぞれのスレッド コンテキスト内でのみ使用します。
HSM 操作の統合の再試行
Microsoft は、デバイスで障害が発生した場合など、運用またはメンテナンスの目的で、Azure Cloud HSM クラスター内の HSM をスワップアウトする場合があります。 このようなシナリオに備えてアプリケーションを準備するには、クラスターに送信されるすべての操作にクライアント側の再試行ロジックを追加することをお勧めします。 このセットアップでは、置き換えや一時的なメンテナンスの停止に関係なく、失敗した操作に対する後続の再試行が成功することが予測されます。
Cloud HSM クライアント セッションの処理
Azure Cloud HSM クライアントは、アプリケーションがサインインまたはサインアウトを実行するたびに、すべての HSM セッションに対してサインインとサインアウトを行います。その結果、2 つ目のアプリケーションが azurecloudhsm_client を使用する場合、同じセッションを共有し、同じホストから実行されている場合は同じサインイン資格情報を継承します。 ツールは、どのアプリケーションがサインインを試みるかを追跡します。 これにより、適切にサインインしたアプリケーションで、認証を必要とするコマンドを実行できます。
たとえば、azurecloudhsm_util でサインインしていて、Azure Cloud HSM プロバイダーを使用して別のターミナル ウィンドウでアプリケーションまたはキー ツールを実行しようとすると、アクティブなセッションが既に開いているため、エラーが発生します。 アプリケーションが認証のためにホスト上で実行されているセッションを作成するには、アプリケーションの セッションを閉じる必要があります。