チュートリアル:Java Spring アプリで Key Vault 参照を使用する

このチュートリアルでは、Azure App Configuration サービスを Azure Key Vault と共に使用する方法について説明します。 App Configuration と Key Vault は補完的なサービスであり、ほとんどのアプリケーションのデプロイで併用されます。

これらをまとめて使用できるように、App Configuration では、Key Vault に格納されている値を参照するキーを作成できます。 App Configuration でこのようなキーを作成すると、App Configuration には、その値そのものではなく、Key Vault の値の URI が格納されます。

App Configuration に格納されているその他のキーの場合と同様、お使いのアプリケーションは App Configuration クライアント プロバイダーを使用して Key Vault 参照を取得します。 この場合、App Configuration に格納された値は、Key Vault の値を参照する URI です。 これらは、Key Vault の値でも資格情報でもありません。 クライアント プロバイダーはキーを Key Vault 参照として認識し、Key Vault を使用して値を取得します。

アプリケーションの役割は、App Configuration と Key Vault の両方に正しく認証されることです。 この 2 つのサービスが直接通信することはありません。

このチュートリアルでは、自分のコードに Key Vault 参照を実装する方法について説明します。 これは、クイック スタートで紹介されている Web アプリに基づいています。 先に進む前に、App Configuration を使用した Java Spring アプリの作成を済ませておいてください。

このチュートリアルの手順は、任意のコード エディターを使用して実行できます。 たとえば、Visual Studio Code は、Windows、macOS、および Linux の各オペレーティング システムで使用できるクロスプラットフォーム コード エディターです。

このチュートリアルでは、以下の内容を学習します。

  • Key Vault に格納されている値を参照する App Configuration キーを作成する。
  • Java Spring アプリケーションからこのキーの値にアクセスする。

前提条件

コンテナーの作成

  1. Azure Portal の左上隅にある [リソースの作成] オプションを選択します。

    Screenshot shows the Create a resource option in the Azure portal.

  2. 検索ボックスに「Key Vault」と入力します。

  3. 結果リストで、左側の [キー コンテナー] を選択します。

  4. [キー コンテナー] で、 [追加] を選択します。

  5. [キー コンテナーの作成] の右側に、次の情報を入力します。

    • [サブスクリプション] を選択してサブスクリプションを選択します。
    • [リソース グループ] で、 [新規作成] を選択し、リソース グループの名前を入力します。
    • [キー コンテナー名] では、一意の名前が必要です。 このチュートリアルでは、「Contoso-vault2」と入力します。
    • [リージョン] ドロップダウン リストで、場所を選択します。
  6. [キー コンテナーの作成] オプションは既定値のままにしておきます。

  7. [作成] を選択します

この時点で、お使いの Azure アカウントが、この新しいコンテナーへのアクセスが承認されている唯一のアカウントになります。

Screenshot shows your key vault.

Key Vault にシークレットを追加する

シークレットをコンテナーに追加するには、いくつかの追加の手順を行う必要があります。 この場合、Key Vault の取得をテストするために使用できるメッセージを追加します。 このメッセージは Message という名前で、それには "Hello from Key Vault" という値が格納されます。

  1. Key Vault のプロパティ ページで、 [シークレット] を選択します。
  2. [Generate/Import](生成/インポート) を選択します。
  3. [シークレットの作成] ウィンドウで、次の値を入力します。
    • [アップロード オプション] :「Manual」と入力します。
    • Name:「Message」と入力します。
    • : 「Hello from Key Vault」と入力します。
  4. [シークレットの作成] の他のプロパティは既定値のままにしておきます。
  5. [作成] を選択します

App Configuration に Key Vault 参照を追加する

  1. Azure portal にサインインします。 [すべてのリソース] を選択し、クイック スタートで作成した App Configuration ストア インスタンスを選択します。

  2. [構成エクスプローラー] を選択します。

  3. [+ 作成][キー コンテナー参照] の順に選択し、次の値を指定します。

    • [キー] : [/application/config.keyvaultmessage] を選択します。
    • ラベル:この値は空白のままにしておきます。
    • [サブスクリプション][リソース グループ][キー コンテナー] : 前のセクションで作成したキー コンテナーの値に対応する値を入力します。
    • [シークレット] : 前のセクションで作成した、Message という名前のシークレットを選択します。

Key Vault に接続する

  1. このチュートリアルでは、Key Vault の認証にサービス プリンシパルを使用します。 このサービス プリンシパルを作成するには、Azure CLI の az ad sp create-for-rbac コマンドを使用します。

    az ad sp create-for-rbac -n "http://mySP" --role Contributor --scopes /subscriptions/{subscription-id} --sdk-auth
    

    この操作では、一連のキーと値のペアが返されます。

    {
    "clientId": "7da18cae-779c-41fc-992e-0527854c6583",
    "clientSecret": "b421b443-1669-4cd7-b5b1-394d5c945002",
    "subscriptionId": "443e30da-feca-47c4-b68f-1636b75e16b3",
    "tenantId": "35ad10f1-7799-4766-9acf-f2d946161b77",
    "activeDirectoryEndpointUrl": "https://login.microsoftonline.com",
    "resourceManagerEndpointUrl": "https://management.azure.com/",
    "sqlManagementEndpointUrl": "https://management.core.windows.net:8443/",
    "galleryEndpointUrl": "https://gallery.azure.com/",
    "managementEndpointUrl": "https://management.core.windows.net/"
    }
    
  2. 次のコマンドを実行して、サービス プリンシパルがキー コンテナーにアクセスできるようにします。

    az keyvault set-policy -n <your-unique-keyvault-name> --spn <clientId-of-your-service-principal> --secret-permissions delete get
    
  3. 次のコマンドを実行して object-id を取得し、それを App Configuration に追加します。

    az ad sp show --id <clientId-of-your-service-principal>
    az role assignment create --role "App Configuration Data Reader" --scope /subscriptions/<subscriptionId>/resourceGroups/<group-name> --assignee-principal-type --assignee-object-id <objectId-of-your-service-principal> --resource-group <your-resource-group>
    
  4. AZURE_CLIENT_IDAZURE_CLIENT_SECRET、および AZURE_TENANT_ID 環境変数を作成します。 前の手順で表示されたサービス プリンシパルの値を使用します。 コマンド ラインで次のコマンドを実行してコマンド プロンプトを再起動し、変更が反映されるようにします。

    setx AZURE_CLIENT_ID "clientId"
    setx AZURE_CLIENT_SECRET "clientSecret"
    setx AZURE_TENANT_ID "tenantId"
    

    Windows PowerShell を使用する場合は、次のコマンドを実行します。

    $Env:AZURE_CLIENT_ID = "clientId"
    $Env:AZURE_CLIENT_SECRET = "clientSecret"
    $Env:AZURE_TENANT_ID = "tenantId"
    

    macOS または Linux を使用する場合は、次のコマンドを実行します。

    export AZURE_CLIENT_ID ='clientId'
    export AZURE_CLIENT_SECRET ='clientSecret'
    export AZURE_TENANT_ID ='tenantId'
    

Note

これらの Key Vault 資格情報は、お使いのアプリケーション内でのみ使用されます。 アプリケーションの認証は、App Configuration サービスを必要とせず、これらの資格情報を使用して Key Vault に対して直接行われます。 Key Vault は、キーを共有したり公開したりすることなく、アプリケーションと App Configuration サービスの両方の認証を提供します。

Key Vault 参照を使用するようコードを更新する

  1. APP_CONFIGURATION_ENDPOINT という環境変数を作成します。 その値を App Configuration ストアのエンドポイントに設定します。 エンドポイントは、Azure portal の [アクセス キー] ブレードで確認できます。 変更を有効にするために、コマンド プロンプトを再起動します。

  2. resources フォルダーの構成ファイルを開きます。 APP_CONFIGURATION_ENDPOINT 値を使用するようにこのファイルを更新します。 このファイル内の接続文字列への参照をすべて削除します。

spring:
    cloud:
        azure:
            appconfiguration:
                stores:
                    - endpoint: ${APP_CONFIGURATION_ENDPOINT}

注意

Spring Cloud Azure のグローバル構成を使用して、Key Vault に接続することもできます。

  1. MessageProperties.java を開きます。 keyVaultMessage という新しい変数を追加します。

    private String keyVaultMessage;
    
    public String getKeyVaultMessage() {
        return keyVaultMessage;
    }
    
    public void setKeyVaultMessage(String keyVaultMessage) {
        this.keyVaultMessage = keyVaultMessage;
    }
    
  2. HelloController.java を開きます。 Key Vault から取得したメッセージが含まれるように getMessage メソッドを更新します。

    @GetMapping
    public String getMessage() {
        return "Message: " + properties.getMessage() + "\nKey Vault message: " + properties.getKeyVaultMessage();
    }
    
  3. Spring Boot アプリケーションを Maven でビルドし、実行します。次に例を示します。

    mvn clean package
    mvn spring-boot:run
    
  4. アプリケーションが実行されたら、curl を使用してアプリケーションをテストできます。次に例を示します。

    curl -X GET http://localhost:8080/
    

    App Configuration ストアに入力したメッセージが表示されます。 Key Vault に入力したメッセージも表示されます。

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

この記事で作成したリソースを継続して使用しない場合は、ここで作成したリソース グループを削除して課金されないようにしてください。

重要

リソース グループを削除すると、元に戻すことができません。 リソース グループとそのすべてのリソースは完全に削除されます。 間違ったリソース グループやリソースをうっかり削除しないようにしてください。 この記事のリソースを、保持したい他のリソースを含むリソース グループ内に作成した場合は、リソース グループを削除する代わりに、各リソースをそれぞれのペインから個別に削除します。

  1. Azure portal にサインインし、 [リソース グループ] を選択します。
  2. [名前でフィルター] ボックスにリソース グループの名前を入力します。
  3. 結果一覧でリソース グループ名を選択し、概要を表示します。
  4. [リソース グループの削除] を選択します。
  5. リソース グループの削除の確認を求めるメッセージが表示されます。 確認のためにリソース グループの名前を入力し、 [削除] を選択します。

しばらくすると、リソース グループとそのすべてのリソースが削除されます。

次のステップ

このチュートリアルでは、Key Vault に格納されている値を参照する App Configuration キーを作成しました。 その他の質問については、リファレンス ドキュメントを参照してください。Spring Cloud Azure App Configuration ライブラリのしくみに関する詳細がすべて記載されています。 Java Spring アプリケーションで機能フラグを使用する方法については、次のチュートリアルに進んでください。