クイック スタート: Key Vault を使用してアプリケーション シークレットを読み込む
Note
Basic、Standard、Enterprise プランは、2025 年 3 月中旬以降非推奨になり、廃止期間は 3 年間です。 Azure Container Apps に移行することをお勧めします。 詳細については、「Azure Spring Apps の廃止のお知らせ」を参照してください。
Standard 従量課金と専用プランは、2024 年 9 月 30 日以降に非推奨になり、6 か月後に完全にシャットダウンされます。 Azure Container Apps に移行することをお勧めします。 詳細については、「Azure Spring Apps の Standard 従量課金および専用プランを Azure Container Apps に移行する」を参照してください。
この記事の適用対象: ❎ Basic/Standard ✅ Enterprise
このクイックスタートでは、Azure Spring Apps Enterprise プランを実行しているアプリに対して Azure Key Vault を使用してシークレットを安全に読み込む方法を示します。
すべてのアプリケーションには、その環境とサポート サービスに接続するプロパティがあります。 これらのサービスには、データベース、ログ記録と監視ツール、メッセージング プラットフォームなどのリソースが含まれます。 各リソースには、検索してアクセスする方法が必要です。多くの場合、これは URL と資格情報の形式です。 この情報は法律で保護されていることが多く、顧客データを保護するために秘匿しておく必要があります。 Azure Spring Apps では、マネージド ID と Azure ロールベースのアクセス制御を使用して、これらのシークレットを Key Vault からメモリに直接読み込むアプリケーションを構成できます。
前提条件
- アクティブなサブスクリプションが含まれる Azure アカウント。 無料でアカウントを作成できます。
- Azure Marketplace の Enterprise プランの「要件」セクションを理解し、要件を満たします。
- Azure CLI バージョン 2.45.0 以降。
- Git.
- jq
- Azure Spring Apps Enterprise プランの拡張機能。 次のコマンドを使用して、以前のバージョンを削除し、最新の Enterprise プランの拡張機能をインストールします。 以前に
spring-cloud
拡張機能をインストールした場合は、構成とバージョンの不一致を回避するためにそれをアンインストールします。az extension add --upgrade --name spring az extension remove --name spring-cloud
- 以下のクイックスタートの手順を完了します。
キー コンテナーをプロビジョニングしてシークレットを格納する
次の手順では、キー コンテナーを作成し、アプリケーション シークレットを安全に保存する方法について説明します。
次のコマンドを使用して、リソースを保持する変数を作成します。 プレースホルダーは必ず、独自の値で置き換えてください。
Note
Microsoft では、使用可能な最も安全な認証フローを使用することをお勧めします。 この手順で説明されている認証フロー (データベース、キャッシュ、メッセージング、AI サービスなど) には、アプリケーションで非常に高い信頼度が要求されるため、他のフローには存在しないリスクが伴います。 このフローは、パスワードレス接続またはキーレス接続のマネージド ID など、より安全なオプションが有効でない場合にのみ使用します。 ローカル コンピューターの操作では、パスワードレス接続またはキーレス接続にユーザー ID を使用します。
export RESOURCE_GROUP=<resource-group-name> export KEY_VAULT_NAME=<key-vault-name> export POSTGRES_SERVER_NAME=<postgres-server-name> export POSTGRES_USERNAME=<postgres-username> export POSTGRES_PASSWORD=<postgres-password> export REDIS_CACHE_NAME=<redis-cache-name> export AZURE_SPRING_APPS_SERVICE_INSTANCE_NAME=<Azure-Spring-Apps-service-instance-name>
次のコマンドを使用して、アプリケーション シークレットを格納するキー コンテナーを作成します。
az keyvault create \ --resource-group ${RESOURCE_GROUP} \ --name ${KEY_VAULT_NAME}
次のコマンドを使用して、完全なデータベース サーバー名をキー コンテナーに格納します。
az keyvault secret set \ --vault-name ${KEY_VAULT_NAME} \ --name "POSTGRES-SERVER-NAME" \ --value "${POSTGRES_SERVER_NAME}.postgres.database.azure.com"
次のコマンドを使用して、データベース名をカタログ サービス アプリケーションのキー コンテナーに格納します。
az keyvault secret set \ --vault-name ${KEY_VAULT_NAME} \ --name "CATALOG-DATABASE-NAME" \ --value "acmefit_catalog"
次のコマンドを使用して、データベース ログイン資格情報をキー コンテナーに格納します。
Note
Microsoft では、使用可能な最も安全な認証フローを使用することをお勧めします。 この手順で説明されている認証フロー (データベース、キャッシュ、メッセージング、AI サービスなど) には、アプリケーションで非常に高い信頼度が要求されるため、他のフローには存在しないリスクが伴います。 このフローは、パスワードレス接続またはキーレス接続のマネージド ID など、より安全なオプションが有効でない場合にのみ使用します。 ローカル コンピューターの操作では、パスワードレス接続またはキーレス接続にユーザー ID を使用します。
az keyvault secret set \ --vault-name ${KEY_VAULT_NAME} \ --name "POSTGRES-LOGIN-NAME" \ --value "${POSTGRES_USERNAME}" az keyvault secret set \ --vault-name ${KEY_VAULT_NAME} \ --name "POSTGRES-LOGIN-PASSWORD" \ --value "${POSTGRES_PASSWORD}"
次のコマンドを使用して、データベース接続文字列を注文サービス アプリケーションのキー コンテナーに格納します。
Note
Microsoft では、使用可能な最も安全な認証フローを使用することをお勧めします。 この手順で説明されている認証フロー (データベース、キャッシュ、メッセージング、AI サービスなど) には、アプリケーションで非常に高い信頼度が要求されるため、他のフローには存在しないリスクが伴います。 このフローは、パスワードレス接続またはキーレス接続のマネージド ID など、より安全なオプションが有効でない場合にのみ使用します。 ローカル コンピューターの操作では、パスワードレス接続またはキーレス接続にユーザー ID を使用します。
az keyvault secret set \ --vault-name ${KEY_VAULT_NAME} \ --name "ConnectionStrings--OrderContext" \ --value "Server=${POSTGRES_SERVER_NAME};Database=acmefit_order;Port=5432;Ssl Mode=Require;User Id=${POSTGRES_USERNAME};Password=${POSTGRES_PASSWORD};"
次のコマンドを使用して、Redis 接続プロパティを取得し、キー コンテナーに格納します。
Note
Microsoft では、使用可能な最も安全な認証フローを使用することをお勧めします。 この手順で説明されている認証フロー (データベース、キャッシュ、メッセージング、AI サービスなど) には、アプリケーションで非常に高い信頼度が要求されるため、他のフローには存在しないリスクが伴います。 このフローは、パスワードレス接続またはキーレス接続のマネージド ID など、より安全なオプションが有効でない場合にのみ使用します。 ローカル コンピューターの操作では、パスワードレス接続またはキーレス接続にユーザー ID を使用します。
export REDIS_HOST=$(az redis show \ --resource-group ${RESOURCE_GROUP} \ --name ${REDIS_CACHE_NAME} | jq -r '.hostName') export REDIS_PORT=$(az redis show \ --resource-group ${RESOURCE_GROUP} \ --name ${REDIS_CACHE_NAME} | jq -r '.sslPort') export REDIS_PRIMARY_KEY=$(az redis list-keys \ --resource-group ${RESOURCE_GROUP} \ --name ${REDIS_CACHE_NAME} | jq -r '.primaryKey') az keyvault secret set \ --vault-name ${KEY_VAULT_NAME} \ --name "CART-REDIS-CONNECTION-STRING" \ --value "rediss://:${REDIS_PRIMARY_KEY}@${REDIS_HOST}:${REDIS_PORT}/0"
シングル サインオンを構成した場合は、次のコマンドを使用して、JSON Web Key (JWK) URI をキー コンテナーに格納します。
az keyvault secret set \ --vault-name ${KEY_VAULT_NAME} \ --name "SSO-PROVIDER-JWK-URI" \ --value <jwk-uri>
キー コンテナー内のシークレットへのアクセス権をアプリケーションに付与する
次の手順では、Azure Spring Apps Enterprise プランにデプロイされたアプリケーションに、Key Vault シークレットへのアクセス権を付与する方法について説明します。
次のコマンドを使用して、カート サービス アプリケーションのシステム割り当て ID を有効にします。
az spring app identity assign \ --resource-group ${RESOURCE_GROUP} \ --name cart-service \ --service ${AZURE_SPRING_APPS_SERVICE_INSTANCE_NAME}
次のコマンドを使用して、カート サービス アプリケーションのキー コンテナーに対する
get list
のアクセス ポリシーを設定します。export CART_SERVICE_APP_IDENTITY=$(az spring app show \ --resource-group ${RESOURCE_GROUP} \ --name cart-service \ --service ${AZURE_SPRING_APPS_SERVICE_INSTANCE_NAME} | jq -r '.identity.principalId') az keyvault set-policy \ --name ${KEY_VAULT_NAME} \ --object-id ${CART_SERVICE_APP_IDENTITY} \ --resource-group ${RESOURCE_GROUP} \ --secret-permissions get list
次のコマンドを使用して、注文サービス アプリケーションのシステム割り当て ID を有効にします。
az spring app identity assign \ --resource-group ${RESOURCE_GROUP} \ --name order-service \ --service ${AZURE_SPRING_APPS_SERVICE_INSTANCE_NAME}
次のコマンドを使用して、注文サービス アプリケーションのキー コンテナーに対する
get list
のアクセス ポリシーを設定します。export ORDER_SERVICE_APP_IDENTITY=$(az spring app show \ --resource-group ${RESOURCE_GROUP} \ --name order-service \ --service ${AZURE_SPRING_APPS_SERVICE_INSTANCE_NAME} | jq -r '.identity.principalId') az keyvault set-policy \ --name ${KEY_VAULT_NAME} \ --object-id ${ORDER_SERVICE_APP_IDENTITY} \ --resource-group ${RESOURCE_GROUP} \ --secret-permissions get list
次のコマンドを使用して、カタログ サービス アプリケーションのシステム割り当て ID を有効にします。
az spring app identity assign \ --resource-group ${RESOURCE_GROUP} \ --name catalog-service \ --service ${AZURE_SPRING_APPS_SERVICE_INSTANCE_NAME}
次のコマンドを使用して、カタログ サービス アプリケーションのキー コンテナーに対する
get list
のアクセス ポリシーを設定します。export CATALOG_SERVICE_APP_IDENTITY=$(az spring app show \ --resource-group ${RESOURCE_GROUP} \ --name catalog-service \ --service ${AZURE_SPRING_APPS_SERVICE_INSTANCE_NAME} | jq -r '.identity.principalId') az keyvault set-policy \ --name ${KEY_VAULT_NAME} \ --object-id ${CATALOG_SERVICE_APP_IDENTITY} \ --resource-group ${RESOURCE_GROUP} \ --secret-permissions get list
シングル サインオンを構成した場合は、次のコマンドを使用して、ID サービス アプリケーションのシステム割り当て ID を有効にします。
az spring app identity assign \ --resource-group ${RESOURCE_GROUP} \ --name identity-service \ --service ${AZURE_SPRING_APPS_SERVICE_INSTANCE_NAME}
シングル サインオンを構成している場合は、次のコマンドを使って、ID サービス アプリケーションのキー コンテナーに対する
get list
のアクセス ポリシーを設定します。export IDENTITY_SERVICE_APP_IDENTITY=$(az spring app show \ --resource-group ${RESOURCE_GROUP} \ --name identity-service \ --service ${AZURE_SPRING_APPS_SERVICE_INSTANCE_NAME} | jq -r '.identity.principalId') az keyvault set-policy \ --name ${KEY_VAULT_NAME} \ --object-id ${IDENTITY_SERVICE_APP_IDENTITY} \ --resource-group ${RESOURCE_GROUP} \ --secret-permissions get list
アプリケーションを更新して Key Vault シークレットを読み込む
キー コンテナーからシークレットを読み取るためのアクセス権を付与した後、次の手順を使用して、構成内で新しいシークレット値を使用するようにアプリケーションを更新します。
次のコマンドを使用して、アプリケーションの更新に使用するキー コンテナーの URI を取得します。
export KEYVAULT_URI=$(az keyvault show --name ${KEY_VAULT_NAME} --resource-group ${RESOURCE_GROUP} | jq -r '.properties.vaultUri')
次のコマンドを使用して、アプリケーションの更新に使用する Spring Cloud Gateway の URL を取得します。
export GATEWAY_URL=$(az spring gateway show \ --resource-group ${RESOURCE_GROUP} \ --service ${AZURE_SPRING_APPS_SERVICE_INSTANCE_NAME} | jq -r '.properties.url')
次のコマンドを使用して、注文サービス アプリケーションと Azure Database for PostgreSQL フレキシブル サーバーをバインドしているサービス コネクタを削除します。
az spring connection delete \ --resource-group ${RESOURCE_GROUP} \ --app order-service \ --connection order_service_db \ --service ${AZURE_SPRING_APPS_SERVICE_INSTANCE_NAME} \ --deployment default \ --yes
次のコマンドを使用して、キー コンテナーにアクセスするための URI で注文サービス環境を更新します。
Note
Microsoft では、使用可能な最も安全な認証フローを使用することをお勧めします。 この手順で説明されている認証フロー (データベース、キャッシュ、メッセージング、AI サービスなど) には、アプリケーションで非常に高い信頼度が要求されるため、他のフローには存在しないリスクが伴います。 このフローは、パスワードレス接続またはキーレス接続のマネージド ID など、より安全なオプションが有効でない場合にのみ使用します。 ローカル コンピューターの操作では、パスワードレス接続またはキーレス接続にユーザー ID を使用します。
az spring app update \ --resource-group ${RESOURCE_GROUP} \ --name order-service \ --service ${AZURE_SPRING_APPS_SERVICE_INSTANCE_NAME} \ --env "ConnectionStrings__KeyVaultUri=${KEYVAULT_URI}" "AcmeServiceSettings__AuthUrl=https://${GATEWAY_URL}" "DatabaseProvider=Postgres"
次のコマンドを使用して、カタログ サービス アプリケーションと Azure Database for PostgreSQL フレキシブル サーバーをバインドしているサービス コネクタを削除します。
az spring connection delete \ --resource-group ${RESOURCE_GROUP} \ --app catalog-service \ --connection catalog_service_db \ --service ${AZURE_SPRING_APPS_SERVICE_INSTANCE_NAME} \ --deployment default \ --yes
次のコマンドを使用して、キー コンテナーにアクセスするようにカタログ サービス環境と構成パターンを更新します。
az spring app update \ --resource-group ${RESOURCE_GROUP} \ --name catalog-service \ --service ${AZURE_SPRING_APPS_SERVICE_INSTANCE_NAME} \ --config-file-pattern catalog/default,catalog/key-vault \ --env "SPRING_CLOUD_AZURE_KEYVAULT_SECRET_PROPERTY_SOURCES_0_ENDPOINT=${KEYVAULT_URI}" "SPRING_CLOUD_AZURE_KEYVAULT_SECRET_PROPERTY_SOURCES_0_NAME='acme-fitness-store-vault'" "SPRING_PROFILES_ACTIVE=default,key-vault"
次のコマンドを使用して、カート サービス アプリケーションと Azure Cache for Redis をバインドしているサービス コネクタを削除します。
az spring connection delete \ --resource-group ${RESOURCE_GROUP} \ --app cart-service \ --connection cart_service_cache \ --service ${AZURE_SPRING_APPS_SERVICE_INSTANCE_NAME} \ --deployment default \ --yes
次のコマンドを使用して、キー コンテナーにアクセスするようにカートサービス環境を更新します。
az spring app update \ --resource-group ${RESOURCE_GROUP} \ --name cart-service \ --service ${AZURE_SPRING_APPS_SERVICE_INSTANCE_NAME} \ --env "CART_PORT=8080" "KEYVAULT_URI=${KEYVAULT_URI}" "AUTH_URL=https://${GATEWAY_URL}"
シングル サインオンを構成している場合は、次のコマンドを使って、キー コンテナーにアクセスするように ID サービス環境と構成パターンを更新します。
az spring app update \ --resource-group ${RESOURCE_GROUP} \ --name identity-service \ --service ${AZURE_SPRING_APPS_SERVICE_INSTANCE_NAME} \ --config-file-pattern identity/default,identity/key-vault \ --env "SPRING_CLOUD_AZURE_KEYVAULT_SECRET_PROPERTY_SOURCES_0_ENDPOINT=${KEYVAULT_URI}" "SPRING_CLOUD_AZURE_KEYVAULT_SECRET_PROPERTY_SOURCES_0_NAME='acme-fitness-store-vault'" "SPRING_PROFILES_ACTIVE=default,key-vault"
次のコマンドを使用して、Spring Cloud Gateway の URL を取得します。
export GATEWAY_URL=$(az spring gateway show \ --resource-group ${RESOURCE_GROUP} \ --service ${AZURE_SPRING_APPS_SERVICE_INSTANCE_NAME} | jq -r '.properties.url') echo "https://${GATEWAY_URL}"
ブラウザーで出力 URL を開いて、更新されたアプリケーションを探索できます。
リソースをクリーンアップする
後続のクイック スタートおよびチュートリアルを引き続き実行する場合は、これらのリソースをそのまま残しておくことができます。 不要になったら、リソース グループを削除します。これにより、リソース グループ内のリソースが削除されます。 Azure CLI を使用してリソース グループを削除するには、次のコマンドを使用します。
echo "Enter the Resource Group name:" &&
read resourceGroupName &&
az group delete --name $resourceGroupName &&
echo "Press [ENTER] to continue ..."
次のステップ
次のいずれかの省略可能なクイックスタートに進みます: