このチュートリアルでは、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 アプリケーションからこのキーの値にアクセスする。
前提条件
- Azure サブスクリプション - 無料アカウントを作成する
- バージョン 17 でサポートされている Java Development Kit (JDK)。
- Apache Maven バージョン 3.0 以降。
- App Configuration を使用して Java Spring アプリを作成するクイック スタートを完了します。
キー保管庫を作成する
Azure ポータルにサインインし、リソースの作成を選択します。
検索ボックスに「Key Vault」と入力します。 結果の一覧で、 Key Vault を選択します。
[ Key Vault ] ページで、[ 作成] を選択します。
[ キー コンテナーの作成 ] ページで、次の情報を入力します。
- サブスクリプションの場合: サブスクリプションを選択します。
- リソース グループの場合: 既存のリソース グループの名前を入力するか、[新規作成] を選択してリソース グループ名を入力します。
- キー コンテナー名の場合: 一意の名前を入力します。
- リージョンの場合: 場所を選択します。
その他のオプションでは、既定値を使用します。
[Review + create](レビュー + 作成) を選択します。
システムが入力を検証して表示したら、[ 作成] を選択します。
この時点で、お使いの Azure アカウントが、この新しいコンテナーへのアクセスが承認されている唯一のアカウントになります。
Key Vault にシークレットを追加する
シークレットを Vault に追加して、Key Vault の取得をテストします。 シークレットは Message と呼ばれ、その値は "Hello from Key Vault" です。
[Key Vault リソース] メニューの [ オブジェクト>Secrets] を選択します。
[Generate/Import](生成/インポート) を選択します。
[ シークレットの作成 ] ダイアログで、次の値を入力します。
- [アップロード オプション] に「手動」と入力します。
- [名前]:メッセージを入力します。
- [シークレットの値] に「Hello from Key Vault」と入力します。
その他のオプションでは、既定値を使用します。
[作成] を選択します
App Configuration に Key Vault 参照を追加する
Azure portal にサインインします。 [すべてのリソース] を選択し、App Configuration ストアを選択します。
[構成エクスプローラー] を選択します。
[+ 作成]>キーボールト参照 を選択し、次の値を指定します。
- キー: /application/config.keyVaultMessage を入力します。
- ラベル:この値は空白のままにしておきます。
- サブスクリプション、 リソース グループ、 およびキー コンテナー: 前のセクションで作成したキー コンテナーに対応する値を入力します。
- [シークレット] : 前のセクションで作成した、Message という名前のシークレットを選択します。
Key Vault へのアクセス許可をアプリに付与する
アプリケーションでは、 DefaultAzureCredential を使用して、App Configuration と Key Vault の両方に対する認証を行います。 この資格情報は、Azure のマネージド ID とローカルの開発者資格情報で自動的に機能します。
Key Vault への ID アクセスを付与します。 Key Vault シークレット ユーザー ロールをユーザー アカウントまたはマネージド ID に割り当てます。
az role assignment create --role "Key Vault Secrets User" --scope /subscriptions/<subscriptionId>/resourceGroups/<group-name>/providers/Microsoft.KeyVault/vaults/<your-unique-keyvault-name> --assignee <your-azure-ad-user-or-managed-identity>ID に App Configuration へのアクセス権を付与します。 App Configuration データリーダー ロールを割り当てます。
az role assignment create --role "App Configuration Data Reader" --scope /subscriptions/<subscriptionId>/resourceGroups/<group-name>/providers/Microsoft.AppConfiguration/configurationStores/<your-app-configuration-store> --assignee <your-azure-ad-user-or-managed-identity>
Key Vault 参照を使用するようコードを更新する
APP_CONFIGURATION_ENDPOINT という環境変数を作成します。 その値を App Configuration ストアのエンドポイントに設定します。 エンドポイントは、Azure portal の [アクセス キー] ブレードで確認できます。 変更を有効にするために、コマンド プロンプトを再起動します。
resources フォルダーの構成ファイルを開きます。 APP_CONFIGURATION_ENDPOINT 値を使用するようにこのファイルを更新します。 このファイル内の接続文字列への参照をすべて削除します。
spring:
config:
import: azureAppConfiguration
cloud:
azure:
appconfiguration:
stores:
- endpoint: ${APP_CONFIGURATION_ENDPOINT}
注意
Spring Cloud Azure のグローバル構成を使用して、Key Vault に接続することもできます。
MyProperties.javaを開きます。 keyVaultMessage という新しい変数を追加します。
private String keyVaultMessage; public String getKeyVaultMessage() { return keyVaultMessage; } public void setKeyVaultMessage(String keyVaultMessage) { this.keyVaultMessage = keyVaultMessage; }HelloController.java を開きます。 Key Vault から取得したメッセージが含まれるように getMessage メソッドを更新します。
@GetMapping public String getMessage() { return "Message: " + properties.getMessage() + "\nKey Vault message: " + properties.getKeyVaultMessage(); }Spring Boot アプリケーションを Maven でビルドし、実行します。次に例を示します。
mvn clean package mvn spring-boot:runアプリケーションが実行されたら、curl を使用してアプリケーションをテストできます。次に例を示します。
curl -X GET http://localhost:8080/App Configuration ストアに入力したメッセージが表示されます。 Key Vault に入力したメッセージも表示されます。
リソースをクリーンアップする
この記事で作成したリソースを継続して使用しない場合は、ここで作成したリソース グループを削除して課金されないようにしてください。
重要
リソース グループを削除すると、元に戻すことができません。 リソース グループとそのすべてのリソースは完全に削除されます。 間違ったリソース グループやリソースをうっかり削除しないようにしてください。 この記事のリソースを、保持したい他のリソースを含むリソース グループ内に作成した場合は、リソース グループを削除する代わりに、各リソースをそれぞれのペインから個別に削除します。
- Azure portal にサインインし、 [リソース グループ] を選択します。
- [名前でフィルター] ボックスにリソース グループの名前を入力します。
- 結果一覧でリソース グループ名を選択し、概要を表示します。
- [リソース グループの削除] を選択します。
- リソース グループの削除の確認を求めるメッセージが表示されます。 確認のためにリソース グループの名前を入力し、 [削除] を選択します。
しばらくすると、リソース グループとそのすべてのリソースが削除されます。
次のステップ
このチュートリアルでは、Key Vault に格納されている値を参照する App Configuration キーを作成しました。 その他の質問については、リファレンス ドキュメントを参照してください。Spring Cloud Azure App Configuration ライブラリのしくみに関する詳細がすべて記載されています。 Java Spring アプリケーションで機能フラグを使用する方法については、次のチュートリアルに進んでください。