Azure Key Vault 用の Spring Boot Starter の使用方法How to use the Spring Boot Starter for Azure Key Vault

概要Overview

この記事では、Azure Key Vault 用 Spring Boot Starter を使用した Spring Initializr を用いて、キー コンテナーにシークレットとして格納されている接続文字列を取得するアプリを作成する方法について説明します。This article demonstrates creating an app with the Spring Initializr that uses the Spring Boot Starter for Azure Key Vault to retrieve a connection string that is stored as a secret in a key vault.

前提条件Prerequisites

この記事の手順を実行するには、次の前提条件を満たす必要があります。The following prerequisites are required in order to complete the steps in this article:

Spring Initializr を使用したアプリの作成Create an app using Spring Initializr

  1. https://start.spring.io/ を参照します。Browse to https://start.spring.io/.

  2. JavaMaven プロジェクトを生成することを指定し、アプリケーションの [Group](グループ)[Aritifact](アーティファクト) に名前を入力して、Spring Initializr の [Switch to the full version](完全バージョンへの切り替え) のリンクをクリックします。Specify that you want to generate a Maven project with Java, enter the Group and Aritifact names for your application, and then click the link to Switch to the full version of the Spring Initializr.

    グループとアーティファクトの名前を指定する

  3. 下へスクロールして [Azure] セクションを表示し、 [Azure Key Vault] チェック ボックスをオンにします。Scroll down to the Azure section and check the box for Azure Key Vault.

    Azure Key Vault スターターを選択する

  4. ページの下部までスクロールし、 [Generate Project](プロジェクトの生成) をクリックします。Scroll to the bottom of the page and click the button to Generate Project.

    Spring Boot プロジェクトを生成する

  5. メッセージが表示されたら、ローカル コンピューター上のパスにプロジェクトをダウンロードします。When prompted, download the project to a path on your local computer.

Azure へのサインインSign into Azure

  1. コマンド プロンプトを開きます。Open a command prompt.

  2. Azure CLI を使って、Azure アカウントにサインインします。Sign into your Azure account by using the Azure CLI:

    az login
    

    指示に従って、サインインを完了します。Follow the instructions to complete the sign-in process.

  3. サブスクリプションを一覧表示します。List your subscriptions:

    az account list
    

    Azure からサブスクリプションの一覧が返されます。使用するサブスクリプションの GUID をコピーする必要があります。次に例を示します。Azure will return a list of your subscriptions, and you will need to copy the GUID for the subscription that you want to use; for example:

    [
      {
        "cloudName": "AzureCloud",
        "id": "ssssssss-ssss-ssss-ssss-ssssssssssss",
        "isDefault": true,
        "name": "Converted Windows Azure MSDN - Visual Studio Ultimate",
        "state": "Enabled",
        "tenantId": "tttttttt-tttt-tttt-tttt-tttttttttttt",
        "user": {
          "name": "contoso@microsoft.com",
          "type": "user"
        }
      }
    ]
    
  4. Azure で使用するアカウントの GUID を指定します。例を次に示します。Specify the GUID for the account you want to use with Azure; for example:

    az account set -s ssssssss-ssss-ssss-ssss-ssssssssssss
    

新しい Azure Key Vault の作成Create a new Azure Key Vault

  1. キー コンテナーに使用する Azure リソースのリソース グループを作成します。次に例を示します。Create a resource group for the Azure resources you will use for your key vault; for example:

    az group create --name wingtiptoysresources --location westus
    

    各値の説明:Where:

    パラメーターParameter 説明Description
    name リソース グループの一意の名前を指定します。Specifies a unique name for your resource group.
    location リソース グループをホストする Azure リージョンを指定します。Specifies the Azure region where your resource group will be hosted.

    次のように、Azure CLI に、リソース グループ作成の結果が表示されます。The Azure CLI will display the results of your resource group creation; for example:

    {
      "id": "/subscriptions/ssssssss-ssss-ssss-ssss-ssssssssssss/resourceGroups/wingtiptoysresources",
      "location": "westus",
      "managedBy": null,
      "name": "wingtiptoysresources",
      "properties": {
        "provisioningState": "Succeeded"
      },
      "tags": null
    }
    
  2. アプリケーション登録から Azure サービス プリンシパルを作成します。次に例を示します。Create an Azure service principal from your application registration; for example:

    az ad sp create-for-rbac --name "wingtiptoysuser"
    

    各値の説明:Where:

    パラメーターParameter 説明Description
    name Azure サービス プリンシパルの名前を指定します。Specifies the name for your Azure service principal.

    Azure CLI から JSON ステータス メッセージが返されます。このメッセージに含まれている appIdpassword は、後でクライアント ID およびクライアント パスワードとして使用します。次に例を示します。The Azure CLI will return a JSON status message that contains the appId and password, which you will use later as the client id and client password; for example:

    {
      "appId": "iiiiiiii-iiii-iiii-iiii-iiiiiiiiiiii",
      "displayName": "wingtiptoysuser",
      "name": "http://wingtiptoysuser",
      "password": "pppppppp-pppp-pppp-pppp-pppppppppppp",
      "tenant": "tttttttt-tttt-tttt-tttt-tttttttttttt"
    }
    
  3. リソース グループに新しいキー コンテナーを作成します。次に例を示します。Create a new key vault in the resource group; for example:

    az keyvault create --name wingtiptoyskeyvault --resource-group wingtiptoysresources --location westus --enabled-for-deployment true --enabled-for-disk-encryption true --enabled-for-template-deployment true --sku standard --query properties.vaultUri
    

    各値の説明:Where:

    パラメーターParameter 説明Description
    name キー コンテナーの一意の名前を指定します。Specifies a unique name for your key vault.
    location リソース グループをホストする Azure リージョンを指定します。Specifies the Azure region where your resource group will be hosted.
    enabled-for-deployment キー コンテナーのデプロイ オプションを指定します。Specifies the key vault deployment option.
    enabled-for-disk-encryption キー コンテナーの暗号化オプションを指定します。Specifies the key vault encryption option.
    enabled-for-template-deployment キー コンテナーの暗号化オプションを指定します。Specifies the key vault encryption option.
    sku キー コンテナーの SKU オプションを指定します。Specifies the key vault SKU option.
    query 応答から取得する値を指定します。これは、このチュートリアルを完了するために必要なキー コンテナーの URI です。Specifies a value to retrieve from the response, which is the key vault URI that you will need to complete this tutorial.

    Azure CLI にキー コンテナーの URI が表示されます。この URI は後で使用します。次に例を示します。The Azure CLI will display the URI for key vault, which you will use later; for example:

    "https://wingtiptoyskeyvault.vault.azure.net"
    
  4. 前の手順で作成した Azure サービス プリンシパルのアクセス ポリシーを設定します。次に例を示します。Set the access policy for the Azure service principal you created earlier; for example:

    az keyvault set-policy --name wingtiptoyskeyvault --secret-permission set get list delete --spn "iiiiiiii-iiii-iiii-iiii-iiiiiiiiiiii"
    

    各値の説明:Where:

    パラメーターParameter 説明Description
    name 前の手順で作成したキー コンテナーの名前を指定します。Specifies your key vault name from earlier.
    secret-permission キー コンテナーのセキュリティ ポリシーを指定します。Specifies the security policies for your key vault.
    spn アプリケーションの登録時に取得した GUID を指定します。Specifies the GUID for your application registration from earlier.

    Azure CLI にセキュリティ ポリシー作成の結果が表示されます。次に例を示します。The Azure CLI will display the results of your security policy creation; for example:

    {
      "id": "/subscriptions/ssssssss-ssss-ssss-ssss-ssssssssssss/...",
      "location": "westus",
      "name": "wingtiptoyskeyvault",
      "properties": {
        ...
        ... (A long list of values will be displayed here.)
        ...
      },
      "resourceGroup": "wingtiptoysresources",
      "tags": {},
      "type": "Microsoft.KeyVault/vaults"
    }
    
  5. 新しいキー コンテナーにシークレットを格納します。次に例を示します。Store a secret in your new key vault; for example:

    az keyvault secret set --vault-name "wingtiptoyskeyvault" --name "connectionString" --value "jdbc:sqlserver://SERVER.database.windows.net:1433;database=DATABASE;"
    

    各値の説明:Where:

    パラメーターParameter 説明Description
    vault-name 前の手順で作成したキー コンテナーの名前を指定します。Specifies your key vault name from earlier.
    name シークレットの名前を指定します。Specifies the name of your secret.
    value シークレットの値を指定します。Specifies the value of your secret.

    Azure CLI にシークレット作成の結果が表示されます。次に例を示します。The Azure CLI will display the results of your secret creation; for example:

    {
      "attributes": {
        "created": "2017-12-01T09:00:16+00:00",
        "enabled": true,
        "expires": null,
        "notBefore": null,
        "recoveryLevel": "Purgeable",
        "updated": "2017-12-01T09:00:16+00:00"
      },
      "contentType": null,
      "id": "https://wingtiptoyskeyvault.vault.azure.net/secrets/connectionString/123456789abcdef123456789abcdef",
      "kid": null,
      "managed": null,
      "tags": {
        "file-encoding": "utf-8"
      },
      "value": "jdbc:sqlserver://wingtiptoys.database.windows.net:1433;database=DATABASE;"
    }
    

アプリの構成およびコンパイルConfigure and compile your app

  1. 以前にディレクトリにダウンロードした Spring Boot プロジェクトのパッケージ ファイルからファイルを抽出します。Extract the files from the Spring Boot project archive files that you downloaded earlier into a directory.

  2. プロジェクトの src/main/resources フォルダーに移動し、テキスト エディターで application.properties ファイルを開きます。Navigate to the src/main/resources folder in your project and open the application.properties file in a text editor.

  3. このチュートリアルで既に完了した手順で取得した値を使用して、キー コンテナーの値を追加します。次に例を示します。Add the values for your key vault using values from the steps that you completed earlier in this tutorial; for example:

    azure.keyvault.uri=https://wingtiptoyskeyvault.vault.azure.net/
    azure.keyvault.client-id=iiiiiiii-iiii-iiii-iiii-iiiiiiiiiiii
    azure.keyvault.client-key=pppppppp-pppp-pppp-pppp-pppppppppppp
    

    各値の説明:Where:

    パラメーターParameter 説明Description
    azure.keyvault.uri キー コンテナーの作成時に取得した URI を指定します。Specifies the URI from when you created your key vault.
    azure.keyvault.client-id サービス プリンシパルの作成時に取得した appId GUID を指定します。Specifies the appId GUID from when you created your service principal.
    azure.keyvault.client-key サービス プリンシパルの作成時に取得した password GUID を指定します。Specifies the password GUID from when you created your service principal.
  4. プロジェクトのメイン ソース コード ファイルに移動します (例: /src/main/java/com/wingtiptoys/secrets)。Navigate to the main source code file of your project; for example: /src/main/java/com/wingtiptoys/secrets.

  5. テキスト エディターでアプリケーションのメイン Java ファイルを開き(例: SecretsApplication.java)、ファイルに次の行を追加します。Open the application's main Java file in a file in a text editor; for example: SecretsApplication.java, and add the following lines to the file:

    package com.wingtiptoys.secrets;
    
    import org.springframework.boot.SpringApplication;
    import org.springframework.boot.autoconfigure.SpringBootApplication;
    import org.springframework.beans.factory.annotation.Value;
    import org.springframework.boot.CommandLineRunner;
    
    @SpringBootApplication
    public class SecretsApplication implements CommandLineRunner {
    
       @Value("${connectionString}")
       private String connectionString;
    
       public static void main(String[] args) {
          SpringApplication.run(SecretsApplication.class, args);
       }
    
       public void run(String... varl) throws Exception {
          System.out.println(String.format("\nConnection String stored in Azure Key Vault:\n%s\n",connectionString));
       }
    }
    

    このコード例では、キー コンテナーから接続文字列を取得し、コマンド ラインに表示します。This code example retrieves the connection string from the key vault and displays it to the command line.

  6. Java ファイルを保存して閉じます。Save and close the Java file.

アプリのビルドとテストBuild and test your app

  1. Spring Boot アプリの pom.xml ファイルがあるディレクトリに移動します。Navigate to the directory where the pom.xml file for your Spring Boot app is located:

  2. Spring Boot アプリケーションを Maven でビルドします。次に例を示します。Build your Spring Boot application with Maven; for example:

    mvn clean package
    

    Maven にビルドの結果が表示されます。Maven will display the results of your build.

    Spring Boot アプリケーションのビルドの状態

  3. Maven で Spring Boot アプリケーションを実行します。アプリケーションによって、キー コンテナーから取得した接続文字列が表示されます。Run your Spring Boot application with Maven; the application will display the connection string from your key vault. For example:For example:

    mvn spring-boot:run
    

    Spring Boot の実行時メッセージ

まとめSummary

このチュートリアルでは、 Spring Initializr を使用して新しい Java Web アプリケーションを作成しました。次に、機密情報を格納する Azure Key Vault を作成し、キー コンテナーから情報を取得するようにアプリケーションを構成しました。In this tutorial, you created a new Java web application using the Spring Initializr, created an Azure Key Vault to store sensitive information, and then configured your application to retrieve information from your key vault.

次の手順Next steps

Spring および Azure の詳細については、Azure ドキュメント センターで引き続き Spring に関するドキュメントをご確認ください。To learn more about Spring and Azure, continue to the Spring on Azure documentation center.

その他のリソースAdditional Resources

Azure Key Vault の使用方法の詳細については、次の記事をご覧ください。For more information about using Azure Key Vaults, see the following articles:

Azure での Spring Boot アプリケーションの使用の詳細については、次の記事を参照してください。For more information about using Spring Boot applications on Azure, see the following articles:

Java での Azure の使用の詳細については、「Java 開発者向けの Azure」および「Azure DevOps と Java の操作」を参照してください。For more information about using Azure with Java, see the Azure for Java Developers and the Working with Azure DevOps and Java.