クイックスタート: Azure Key Vault の Java 用証明書クライアントライブラリ (証明書)

JavaのAzure Key Vault証明書クライアント ライブラリの使用を開始します。 以下の手順に従ってパッケージをインストールし、基本タスクのコード例を試してみましょう。

Tip

Spring アプリケーションで Azure Key Vault Certificates リソースを使用している場合は、代わりに Spring Cloud Azure を検討することをお勧めします。 Spring Cloud Azure は、Azure サービスとのシームレスな Spring 統合を提供するオープンソース プロジェクトです。 Spring Cloud Azureの詳細と、Key Vault証明書の使用例については、「Azure Key Vault証明書を使用した Spring Boot での ENable HTTPS」を参照>。

その他のリソース:

Prerequisites

このクイック スタートでは、Linux ターミナル ウィンドウで Azure CLIApache Maven を実行していることを前提としています。

セットアップ中

このクイック スタートでは、Azure ID ライブラリとAzure CLIを使用して、Azure Services に対するユーザーの認証を行います。 開発者は、Visual StudioまたはVisual Studio Codeを使用して呼び出しを認証することもできます。詳細については、「 Identity クライアント ライブラリを使用してクライアントAzure認証するを参照してください。

Azureにサインインする

  1. login コマンドを実行します。

    az login
    

    CLI で既定のブラウザーを開くことができる場合は、そのブラウザーが開き、Azureサインイン ページが読み込まれます。

    それ以外の場合は、https://aka.ms/devicelogin でブラウザー ページを開き、ターミナルに表示されている認証コードを入力します。

  2. ブラウザーでアカウントの資格情報を使用してサインインします。

新しいJavaコンソール アプリを作成する

コンソール ウィンドウで、mvn コマンドを使用して、akv-certificates-java という名前の新しいJavaコンソール アプリを作成します。

mvn archetype:generate -DgroupId=com.keyvault.certificates.quickstart
                       -DartifactId=akv-certificates-java
                       -DarchetypeArtifactId=maven-archetype-quickstart
                       -DarchetypeVersion=1.4
                       -DinteractiveMode=false

プロジェクトの生成からの出力は、次のようになります。

[INFO] ----------------------------------------------------------------------------
[INFO] Using following parameters for creating project from Archetype: maven-archetype-quickstart:1.4
[INFO] ----------------------------------------------------------------------------
[INFO] Parameter: groupId, Value: com.keyvault.certificates.quickstart
[INFO] Parameter: artifactId, Value: akv-certificates-java
[INFO] Parameter: version, Value: 1.0-SNAPSHOT
[INFO] Parameter: package, Value: com.keyvault.certificates.quickstart
[INFO] Parameter: packageInPathFormat, Value: com/keyvault/quickstart
[INFO] Parameter: package, Value: com.keyvault.certificates.quickstart
[INFO] Parameter: groupId, Value: com.keyvault.certificates.quickstart
[INFO] Parameter: artifactId, Value: akv-certificates-java
[INFO] Parameter: version, Value: 1.0-SNAPSHOT
[INFO] Project created from Archetype in dir: /home/user/quickstarts/akv-certificates-java
[INFO] ------------------------------------------------------------------------
[INFO] BUILD SUCCESS
[INFO] ------------------------------------------------------------------------
[INFO] Total time:  38.124 s
[INFO] Finished at: 2019-11-15T13:19:06-08:00
[INFO] ------------------------------------------------------------------------

新しく作成された akv-certificates-java/ フォルダーにディレクトリを変更します。

cd akv-certificates-java

パッケージをインストールする

テキスト エディターで pom.xml ファイルを開きます。 依存関係のグループに、次の dependency 要素を追加します。

    <dependency>
      <groupId>com.azure</groupId>
      <artifactId>azure-security-keyvault-certificates</artifactId>
      <version>4.8.6</version>
    </dependency>

    <dependency>
      <groupId>com.azure</groupId>
      <artifactId>azure-identity</artifactId>
      <version>1.18.2</version>
    </dependency>

リソース グループとキー コンテナーを作成する

このクイック スタートでは、事前に作成されたAzureキーボールトを使用します。 次のクイックスタート内の手順に従って、キー コンテナーを作成できます。

または、これらのAzure CLIコマンドを実行することもできます。

Important

各キー コンテナーには一意の名前が必要です。 次の例では、 <vault-name> をキー コンテナーの名前に置き換えます。

az group create --name "myResourceGroup" -l "EastUS"

az keyvault create --name "<vault-name>" -g "myResourceGroup" --enable-rbac-authorization true

キー コンテナーへのアクセス許可を付与する

Role-Based Access Control (RBAC) を使用してキー コンテナーへのアクセス許可を取得するには、Azure CLI コマンド az ロールの割り当てを作成を使用して、ロールを "ユーザー プリンシパル名" (UPN) に割り当てます。

az role assignment create --role "Key Vault Certificates Officer" --assignee "<upn>" --scope "/subscriptions/<subscription-id>/resourceGroups/myResourceGroup/providers/Microsoft.KeyVault/vaults/<vault-name>"

<upn><subscription-id>、および<vault-name>を実際の値に置き換えます。 別のリソース グループ名を使用した場合は、"myResourceGroup" も置き換えます。 UPN は一般的に、メール アドレスの形式を取ります (例: username@domain.com)。

環境変数の設定

このアプリケーションでは、キー コンテナーの名前を、KEY_VAULT_NAME という環境変数として使用しています。

Windows

set KEY_VAULT_NAME=<vault-name>

Windows PowerShell

$Env:KEY_VAULT_NAME="<vault-name>"

macOS または Linux

export KEY_VAULT_NAME=<vault-name>

オブジェクト モデル

Java用の Azure Key Vault 証明書クライアント ライブラリを使用すると、証明書を管理できます。 「コード例」セクションでは、クライアントの作成、証明書の作成、証明書の取得、および証明書の削除の方法を示しています。

コンソール アプリ全体は以下にあります。

コード例

ディレクティブを追加する

コードの先頭に次のディレクティブを追加します。

import com.azure.core.util.polling.SyncPoller;
import com.azure.identity.DefaultAzureCredentialBuilder;

import com.azure.security.keyvault.certificates.CertificateClient;
import com.azure.security.keyvault.certificates.CertificateClientBuilder;
import com.azure.security.keyvault.certificates.models.CertificateOperation;
import com.azure.security.keyvault.certificates.models.CertificatePolicy;
import com.azure.security.keyvault.certificates.models.DeletedCertificate;
import com.azure.security.keyvault.certificates.models.KeyVaultCertificate;
import com.azure.security.keyvault.certificates.models.KeyVaultCertificateWithPolicy;

クライアントの認証と作成

ほとんどのAzure サービスに対するアプリケーション要求を承認する必要があります。 DefaultAzureCredential を使用して、コード内のAzure サービスへのパスワードレス接続を実装することをお勧めします。 DefaultAzureCredential は複数の認証方法をサポートしており、実行時に使用する方法が決定されます。 このアプローチを採用すると、環境固有のコードを実装することなく、異なる環境 (ローカルと運用環境) で異なる認証方法をアプリに使用できます。

このクイック スタートでは、DefaultAzureCredential は、Azure CLIにログインしたローカル開発ユーザーの資格情報を使用して、キー コンテナーに対して認証を行います。 アプリケーションを Azure にデプロイすると、同じDefaultAzureCredential コードで、App Service、仮想マシン、またはその他のサービスに割り当てられているマネージド ID を自動的に検出して使用できます。 詳細については、マネージド ID の概要に関するページを参照してください。

この例では、キー コンテナーの名前は、https://<vault-name>.vault.azure.net という形式でキー コンテナー URI に展開されます。 キー コンテナーに対する認証の詳細については、開発者ガイドを参照してください。

String keyVaultName = System.getenv("KEY_VAULT_NAME");
String keyVaultUri = "https://" + keyVaultName + ".vault.azure.net";

CertificateClient certificateClient = new CertificateClientBuilder()
    .vaultUrl(keyVaultUri)
    .credential(new DefaultAzureCredentialBuilder().build())
    .buildClient();

証明書の保存

アプリケーションが認証されたら、certificateClient.beginCreateCertificate メソッドを使用して、キー コンテナーに証明書を作成できます。 これには、証明書の名前と証明書ポリシーが必要です。このサンプルでは、値 "myCertificate" が certificateName 変数に割り当てられ、既定のポリシーが使用されます。

証明書の作成は実行時間の長い操作です。進行状況をポーリングすることも、操作が完了するまで待つこともできます。

SyncPoller<CertificateOperation, KeyVaultCertificateWithPolicy> certificatePoller =
    certificateClient.beginCreateCertificate(certificateName, CertificatePolicy.getDefault());
certificatePoller.waitForCompletion();

作成が完了したら、次の呼び出しを使用して証明書を取得できます。

KeyVaultCertificate createdCertificate = certificatePoller.getFinalResult();

証明書の取得

certificateClient.getCertificate メソッドを使用して以前に作成した証明書を取得できます。

KeyVaultCertificate retrievedCertificate = certificateClient.getCertificate(certificateName);

これで、retrievedCertificate.getNameretrievedCertificate.getProperties などの操作を使用して、取得した証明書の詳細にアクセスできるようになりました。内容を取得するには retrievedCertificate.getCer を使用します。

証明書の削除

最後に、certificateClient.beginDeleteCertificate メソッドを使用して、キー コンテナーから証明書を削除しましょう。これも実行時間の長い操作です。

SyncPoller<DeletedCertificate, Void> deletionPoller = certificateClient.beginDeleteCertificate(certificateName);
deletionPoller.waitForCompletion();

リソースをクリーンアップする

不要になったら、Azure CLIまたはAzure PowerShellを使用して、キー コンテナーと対応するリソース グループを削除できます。

az group delete -g "myResourceGroup"
Remove-AzResourceGroup -Name "myResourceGroup"

サンプル コード

package com.keyvault.certificates.quickstart;

import com.azure.core.util.polling.SyncPoller;
import com.azure.identity.DefaultAzureCredentialBuilder;

import com.azure.security.keyvault.certificates.CertificateClient;
import com.azure.security.keyvault.certificates.CertificateClientBuilder;
import com.azure.security.keyvault.certificates.models.CertificateOperation;
import com.azure.security.keyvault.certificates.models.CertificatePolicy;
import com.azure.security.keyvault.certificates.models.DeletedCertificate;
import com.azure.security.keyvault.certificates.models.KeyVaultCertificate;
import com.azure.security.keyvault.certificates.models.KeyVaultCertificateWithPolicy;

public class App {
    public static void main(String[] args) throws InterruptedException, IllegalArgumentException {
        String keyVaultName = System.getenv("KEY_VAULT_NAME");
        String keyVaultUri = "https://" + keyVaultName + ".vault.azure.net";

        System.out.printf("key vault name = %s and kv uri = %s \n", keyVaultName, keyVaultUri);

        CertificateClient certificateClient = new CertificateClientBuilder()
            .vaultUrl(keyVaultUri)
            .credential(new DefaultAzureCredentialBuilder().build())
            .buildClient();

        String certificateName = "myCertificate";

        System.out.print("Creating a certificate in " + keyVaultName + " called '" + certificateName + " ... ");

        SyncPoller<CertificateOperation, KeyVaultCertificateWithPolicy> certificatePoller =
            certificateClient.beginCreateCertificate(certificateName, CertificatePolicy.getDefault());
        certificatePoller.waitForCompletion();

        System.out.print("done.");
        System.out.println("Retrieving certificate from " + keyVaultName + ".");

        KeyVaultCertificate retrievedCertificate = certificateClient.getCertificate(certificateName);

        System.out.println("Your certificate's ID is '" + retrievedCertificate.getId() + "'.");
        System.out.println("Deleting your certificate from " + keyVaultName + " ... ");

        SyncPoller<DeletedCertificate, Void> deletionPoller = certificateClient.beginDeleteCertificate(certificateName);
        deletionPoller.waitForCompletion();

        System.out.print("done.");
    }
}

次のステップ

このクイックスタートでは、キー コンテナーを作成し、証明書を作成しました。さらに証明書を取得した後、これを削除しました。 Key Vaultとそのアプリケーションとの統合方法の詳細については、以下の記事に進んでください。