빠른 시작: Key Vault를 사용하여 애플리케이션 비밀 로드
참고 항목
기본, 표준 및 엔터프라이즈 계획은 2025년 3월 중순부터 사용되지 않으며 3년의 은퇴 기간이 있습니다. Azure Container Apps로 전환하는 것이 좋습니다. 자세한 내용은 Azure Spring Apps 사용 중지 공지 사항을 참조하세요.
표준 소비 및 전용 계획은 2024년 9월 30일부터 사용되지 않으며 6개월 후에 완전히 종료됩니다. Azure Container Apps로 전환하는 것이 좋습니다. 자세한 내용은 Azure Spring Apps 표준 사용량 및 전용 계획을 Azure Container Apps로 마이그레이션을 참조 하세요.
이 문서는 기본/표준 ✅ 엔터프라이즈에 ❎ 적용됩니다.
이 빠른 시작에서는 Azure Spring Apps 엔터프라이즈 플랜을 실행하는 앱에 대해 Azure Key Vault를 사용하여 비밀을 안전하게 로드하는 방법을 보여 줍니다.
모든 애플리케이션에는 환경 및 지원 서비스에 연결하는 속성이 있습니다. 이러한 서비스에는 데이터베이스, 로깅 및 모니터링 도구, 메시징 플랫폼 등과 같은 리소스가 포함됩니다. 각 리소스에는 종종 URL 및 자격 증명의 형태로 리소스를 찾고 액세스하는 방법이 필요합니다. 이 정보는 종종 법으로 보호되며 고객 데이터를 보호하기 위해 비밀로 유지되어야 합니다. Azure Spring Apps에서 관리 ID 및 Azure 역할 기반 액세스 제어를 사용하여 이러한 비밀을 Key Vault에서 메모리로 직접 로드하도록 애플리케이션을 구성할 수 있습니다.
필수 조건
- 활성 구독이 있는 Azure 계정. 체험 계정을 만듭니다.
- Azure Marketplace 엔터프라이즈 플랜의 요구 사항 섹션을 이해하고 이행합니다.
- Azure CLI 버전 2.45.0 이상.
- Git
- jq
- Azure Spring Apps Enterprise 계획 확장입니다. 다음 명령을 사용하여 이전 버전을 제거하고 최신 엔터프라이즈 플랜 확장을 설치합니다. 이전에
spring-cloud
확장을 설치한 경우 구성 및 버전 불일치를 방지하기 위해 이 확장을 제거합니다.az extension add --upgrade --name spring az extension remove --name spring-cloud
- 다음 빠른 시작의 단계를 완료합니다.
Key Vault 프로비전 및 비밀 저장
다음 지침에서는 Key Vault를 만들고 애플리케이션 비밀을 안전하게 저장하는 방법을 설명합니다.
다음 명령을 사용하여 리소스 이름을 저장할 변수를 만듭니다. 자리 표시자를 사용자의 값으로 바꿔야 합니다.
참고 항목
사용 가능한 가장 안전한 인증 흐름을 사용하는 것이 권장됩니다. 데이터베이스, 캐시, 메시징 또는 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>
다음 명령을 사용하여 애플리케이션 비밀을 저장할 Key Vault를 만듭니다.
az keyvault create \ --resource-group ${RESOURCE_GROUP} \ --name ${KEY_VAULT_NAME}
다음 명령을 사용하여 전체 데이터베이스 서버 이름을 Key Vault에 저장합니다.
az keyvault secret set \ --vault-name ${KEY_VAULT_NAME} \ --name "POSTGRES-SERVER-NAME" \ --value "${POSTGRES_SERVER_NAME}.postgres.database.azure.com"
다음 명령을 사용하여 카탈로그 서비스 애플리케이션의 Key Vault에 데이터베이스 이름을 저장합니다.
az keyvault secret set \ --vault-name ${KEY_VAULT_NAME} \ --name "CATALOG-DATABASE-NAME" \ --value "acmefit_catalog"
다음 명령을 사용하여 Key Vault에 데이터베이스 로그인 자격 증명을 저장합니다.
참고 항목
사용 가능한 가장 안전한 인증 흐름을 사용하는 것이 권장됩니다. 데이터베이스, 캐시, 메시징 또는 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}"
다음 명령을 사용하여 Order Service 애플리케이션의 Key Vault에 데이터베이스 연결 문자열을 저장합니다.
참고 항목
사용 가능한 가장 안전한 인증 흐름을 사용하는 것이 권장됩니다. 데이터베이스, 캐시, 메시징 또는 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 연결 속성을 검색하고 Key Vault에 저장합니다.
참고 항목
사용 가능한 가장 안전한 인증 흐름을 사용하는 것이 권장됩니다. 데이터베이스, 캐시, 메시징 또는 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"
Single Sign-On을 구성한 경우 다음 명령을 사용하여 Key Vault에 JSON 웹 키(JWK) URI를 저장합니다.
az keyvault secret set \ --vault-name ${KEY_VAULT_NAME} \ --name "SSO-PROVIDER-JWK-URI" \ --value <jwk-uri>
애플리케이션에 Key Vault의 비밀에 대한 액세스 권한 부여
다음 지침에서는 Azure Spring Apps 엔터프라이즈 플랜에 배포된 애플리케이션에 Key Vault 비밀에 대한 액세스 권한을 부여하는 방법을 설명합니다.
카트 서비스 애플리케이션에 대한 시스템 할당 ID를 사용하도록 설정하려면 다음 명령을 사용합니다.
az spring app identity assign \ --resource-group ${RESOURCE_GROUP} \ --name cart-service \ --service ${AZURE_SPRING_APPS_SERVICE_INSTANCE_NAME}
다음 명령을 사용하여 Cart Service 애플리케이션에 대한 Key Vault에서
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}
다음 명령을 사용하여 주문 서비스 애플리케이션에 대한 Key Vault에서
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}
다음 명령을 사용하여 Catalog Service 애플리케이션에 대한 Key Vault에서
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
Single Sign-On을 구성한 경우 다음 명령을 사용하여 ID 서비스 애플리케이션에 대한 시스템 할당 ID를 사용하도록 설정합니다.
az spring app identity assign \ --resource-group ${RESOURCE_GROUP} \ --name identity-service \ --service ${AZURE_SPRING_APPS_SERVICE_INSTANCE_NAME}
Single Sign-On을 구성한 경우 다음 명령을 사용하여 Identity Service 애플리케이션에 대한 Key Vault의
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 비밀을 로드하도록 애플리케이션 업데이트
Key Vault에서 비밀을 읽을 수 있는 액세스 권한을 부여한 후 다음 단계에서 해당 구성에서 새 비밀 값을 사용하도록 애플리케이션을 업데이트합니다.
다음 명령을 사용하여 애플리케이션 업데이트에 사용할 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
다음 명령을 사용하여 Key Vault에 액세스하기 위한 URI로 주문 서비스 환경을 업데이트합니다.
참고 항목
사용 가능한 가장 안전한 인증 흐름을 사용하는 것이 권장됩니다. 데이터베이스, 캐시, 메시징 또는 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"
다음 명령을 사용하여 Catalog Service 애플리케이션과 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
다음 명령을 사용하여 카탈로그 서비스 환경 및 구성 패턴을 업데이트하여 Key Vault에 액세스합니다.
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
Key Vault에 액세스하도록 카트 서비스 환경을 업데이트하려면 다음 명령을 사용합니다.
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}"
Single Sign-On을 구성한 경우 다음 명령을 사용하여 Identity Service 환경 및 구성 패턴을 업데이트하여 Key Vault에 액세스합니다.
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 ..."
다음 단계
다음 중 원하는 빠른 시작을 계속 진행합니다.