Share via


Azure Key Vault を使用して JVM に TLS/SSL 証明書を配信する

この記事では、Azure Key Vault を JVM に統合して TLS/SSL 証明書を配信する方法について説明します。

java.security ファイルに JCA プロバイダーを追加する

JCA プロバイダーを登録するには、JVM が JCA プロバイダーについて認識している必要があります。 このタスクを完了するには、次の手順を使用します。

  1. JVM インストール内に java.security ファイルのコピーを作成し、my.java.security という名前を付けます。

  2. ファイル内で security.provider.<maximum-value> 行を探します。 <maximum-value> プレースホルダーは、すべてのエントリのこの位置にある最大値に置き換えてください。 (例: security.provider.13=SunPKCS11)。

  3. このエントリの数値を 1 だけインクリメントします。 たとえば、security.provider.13security.provider.14 のようになります。

  4. 次の行を追加します。

    security.provider.14=com.azure.security.keyvault.jca.KeyVaultJcaProvider
    

Note

security.provider.<X> エントリの数値が <X> の数値と異なっていることを確認し、1 から増分的に順序付けされていくようにします。

アプリケーションの実行方法

アプリケーションを実行するには、次の手順を使用し、<...> プレースホルダーを独自の値に置き換えます。

  1. azure-security-keyvault-jca-X.Y.Z.jar ファイルをクラスパスに追加します。 たとえば、Tomcat 9 と統合する場合は、tomcat9w.exe を使用して、azure-security-keyvault-jca-X.Y.Z.jar ファイルの完全なパスを Java クラスパスに追加する必要があります。

  2. -Djava.security.properties==my.java.security をコマンド ラインに追加します。

  3. -Dazure.keyvault.uri=<your-keyvault-uri> をコマンド ラインに追加して、使用する Azure Key Vault を示します。 (例: -Dazure.keyvault.uri=https://some.vault.azure.net/)。

  4. シナリオに応じて、次の一覧に示されている引数を追加します。

    • サービス プリンシパルを使用して認証する場合は、次の引数を追加します。

      • -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 クライアント シークレットを作成するには、次のコマンドを使用して <...> プレースホルダーを独自の値に置き換えます。 返される値 (例: appIdpasswordtenant) は必ず格納してください。

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 クライアント ライブラリの「」セクションを参照してください。

次のステップ