Azure Key Vault を使用して TLS/SSL 証明書を JVM に配信する
この記事では、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
手記
各 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 クライアント シークレットを作成するには、次のコマンドを使用して、<...>
プレースホルダーを独自の値に置き換えます。 必ず、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
手記
ユーザー割り当てマネージド ID を使用する場合は、マネージド ID のオブジェクト ID もプリンシパル ID と呼ばれます。
クライアント/サーバー側の TLS/SSL の例
クライアント/サーバー側 TLS/SSL の例については、Java用 Azure Key Vault JCA クライアント ライブラリ