Azure Key Vault を使用して JVM に TLS/SSL 証明書を配信する
この記事では、Azure Key Vault を JVM に統合して TLS/SSL 証明書を配信する方法について説明します。
java.security ファイルに JCA プロバイダーを追加する
JCA プロバイダーを登録するには、JVM が JCA プロバイダーについて認識している必要があります。 このタスクを完了するには、次の手順を使用します。
JVM インストール内に java.security ファイルのコピーを作成し、my.java.security という名前を付けます。
ファイル内で
security.provider.<maximum-value>
行を探します。<maximum-value>
プレースホルダーは、すべてのエントリのこの位置にある最大値に置き換えてください。 (例:security.provider.13=SunPKCS11
)。このエントリの数値を 1 だけインクリメントします。 たとえば、
security.provider.13
はsecurity.provider.14
のようになります。次の行を追加します。
security.provider.14=com.azure.security.keyvault.jca.KeyVaultJcaProvider
Note
各 security.provider.<X>
エントリの数値が <X>
の数値と異なっていることを確認し、1 から増分的に順序付けされていくようにします。
アプリケーションの実行方法
アプリケーションを実行するには、次の手順を使用し、<...>
プレースホルダーを独自の値に置き換えます。
azure-security-keyvault-jca-X.Y.Z.jar ファイルをクラスパスに追加します。 たとえば、Tomcat 9 と統合する場合は、tomcat9w.exe を使用して、azure-security-keyvault-jca-X.Y.Z.jar ファイルの完全なパスを Java クラスパスに追加する必要があります。
-Djava.security.properties==my.java.security
をコマンド ラインに追加します。-Dazure.keyvault.uri=<your-keyvault-uri>
をコマンド ラインに追加して、使用する Azure Key Vault を示します。 (例:-Dazure.keyvault.uri=https://some.vault.azure.net/
)。シナリオに応じて、次の一覧に示されている引数を追加します。
サービス プリンシパルを使用して認証する場合は、次の引数を追加します。
-Dazure.keyvault.tenant-id=<your-tenant-id>
-Dazure.keyvault.client-id=<your-client-id>
-Dazure.keyvault.client-secret=<your-client-secret>
システム割り当てマネージド ID を使用して認証する場合、それ以上の引数は必要ありません。
ユーザー割り当てマネージド ID を使用して認証する場合は、次の引数を追加します。
-Dazure.keyvault.managed-identity=<object-id-of-your-user-managed-identity>
これらの認証シナリオの詳細については、「 Microsoft Entra ID のアプリケーション オブジェクトとサービス プリンシパル オブジェクト」および 「Azure リソースのマネージド ID と Azure 仮想マシンの連携方法」を参照してください。
サービス プリンシパルを使用する
Azure クライアント ID と Azure クライアント シークレットを作成するには、次のコマンドを使用して <...>
プレースホルダーを独自の値に置き換えます。 返される値 (例: appId
、password
、tenant
) は必ず格納してください。
export CLIENT_NAME=<your-client-name>
az ad sp create-for-rbac --skip-assignment --name ${CLIENT_NAME}
export CLIENT_ID=$(az ad sp list --display-name ${CLIENT_NAME} | jq -r '.[0].appId')
az ad app credential reset --id ${CLIENT_ID}
後で使用できるように、返された値を格納します。
CLIENT_ID
で指定されたクライアントがターゲットの Key Vault にアクセスできることを確認します。 アクセス権を付与するには、次のコマンドを使用して <your-key-vault-name>
プレースホルダーを置き換えます。
az keyvault set-policy \
--name <your-key-vault-name> \
--spn ${CLIENT_ID} \
--secret-permissions get list \
--certificate-permissions get list \
--key-permissions get list
マネージド ID の使用
システム割り当てマネージド ID を有効にするか、ユーザー割り当てマネージド ID を作成するには、「Azure CLI を使用して Azure VM 上に Azure リソースのマネージド ID を構成する」の手順に従います。
マネージド ID のオブジェクト ID を取得した後、次のコマンドを使用して、マネージド ID の Key Vault のアクセス ポリシーを作成します。
az keyvault set-policy \
--name <your-key-vault-name> \
--object-id <object-id-of-your-managed-identity> \
--secret-permissions get list \
--certificate-permissions get list \
--key-permissions get list
Note
ユーザー割り当てマネージド ID を使用する場合は、マネージド ID のオブジェクト ID もプリンシパル ID と呼ばれます。
クライアント/サーバー側の TLS/SSL の例
クライアント/サーバー側 TLS/SSL の例については、Java 用 Azure Key Vault JCA クライアント ライブラリの「例」セクションを参照してください。