관리 ID를 사용하여 Key Vault에 Azure Spring Apps 연결
참고 항목
기본, 표준 및 엔터프라이즈 계획은 2025년 3월 중순부터 사용되지 않으며 3년의 은퇴 기간이 있습니다. Azure Container Apps로 전환하는 것이 좋습니다. 자세한 내용은 Azure Spring Apps 사용 중지 공지 사항을 참조하세요.
표준 소비 및 전용 계획은 2024년 9월 30일부터 사용되지 않으며 6개월 후에 완전히 종료됩니다. Azure Container Apps로 전환하는 것이 좋습니다. 자세한 내용은 Azure Spring Apps 표준 사용량 및 전용 계획을 Azure Container Apps로 마이그레이션을 참조 하세요.
이 문서는 Java ❎ C에✅ 적용됩니다.#
이 문서에서는 Azure Spring Apps에 배포된 앱에 대한 시스템이 할당한 관리 ID 또는 사용자가 할당한 관리 ID를 만들고 이 ID를 사용하여 Azure Key Vault에 액세스하는 방법을 보여 줍니다.
Azure Key Vault는 앱의 토큰, 암호, 인증서, API 키 및 기타 비밀에 대한 액세스를 안전하게 저장하고 긴밀하게 제어하는 데 사용할 수 있습니다. Microsoft Entra ID에서 관리 ID를 만들고, 코드에 자격 증명을 표시하지 않고도 Key Vault를 포함하여 Microsoft Entra 인증을 지원하는 모든 서비스에 인증할 수 있습니다.
다음 동영상에서는 Azure Key Vault를 사용하여 비밀을 관리하는 방법을 설명합니다.
필수 구성 요소
- Azure 구독 구독이 없는 경우 시작하기 전에 체험 계정을 만드세요.
- 대상 구독에서 Azure Spring Apps 엔터프라이즈 플랜 인스턴스를 처음 배포하는 경우 Azure Marketplace의 엔터프라이즈 플랜의 요구 사항 섹션을 참조하세요.
- Azure CLI 버전 2.55.0 이상
각 리소스 이름 제공
다음 명령을 사용하여 리소스 이름을 저장할 변수를 만듭니다. 자리 표시자를 사용자의 값으로 바꿔야 합니다.
export LOCATION=<location>
export RESOURCE_GROUP=myresourcegroup
export SPRING_APPS=myasa
export APP=springapp-system
export KEY_VAULT=<your-keyvault-name>
리소스 그룹 만들기
리소스 그룹은 Azure 리소스가 배포 및 관리되는 논리적 컨테이너입니다. 다음 예에서처럼 az group create 명령을 사용하여 Key Vault 및 Spring Cloud를 둘 다 포함하는 리소스 그룹을 만듭니다.
az group create --name ${RESOURCE_GROUP} --location ${LOCATION}
Key Vault 설정
Key Vault를 만들려면 다음 예에서처럼 az keyvault create 명령을 사용합니다.
Important
각 Key Vault마다 고유한 이름이 있어야 합니다.
az keyvault create \
--resource-group ${RESOURCE_GROUP} \
--name ${KEY_VAULT}
다음 명령을 사용하여 앱 URL을 표시한 다음 반환된 URL(형식: https://${KEY_VAULT}.vault.azure.net
)을 기록해 둡니다. 다음 단계에서 이 값을 사용합니다.
az keyvault show \
--resource-group ${RESOURCE_GROUP} \
--name ${KEY_VAULT} \
--query properties.vaultUri --output tsv
이제 다음 예제와 같이 az keyvault secret set 명령을 사용하여 Key Vault에 비밀을 배치할 수 있습니다.
az keyvault secret set \
--vault-name ${KEY_VAULT} \
--name "connectionString" \
--value "jdbc:sqlserver://SERVER.database.windows.net:1433;database=DATABASE;"
Azure Spring Apps 서비스 및 앱 만들기
해당 확장을 모두 설치한 후 다음 명령을 사용하여 Azure Spring Apps 인스턴스를 만듭니다.
az extension add --upgrade --name spring
az spring create \
--resource-group ${RESOURCE_GROUP} \
--sku Enterprise \
--name ${SPRING_APPS}
다음 예제에서는 --system-assigned
매개 변수에서 요청한 대로 시스템이 할당한 관리 ID를 사용하여 앱을 만듭니다.
az spring app create \
--resource-group ${RESOURCE_GROUP} \
--service ${SPRING_APPS} \
--name ${APP} \
--assign-endpoint true \
--system-assigned
export MANAGED_IDENTITY_PRINCIPAL_ID=$(az spring app show \
--resource-group ${RESOURCE_GROUP} \
--service ${SPRING_APPS} \
--name ${APP} \
--query identity.principalId --output tsv)
az extension add --upgrade --name spring
az spring create \
--resource-group ${RESOURCE_GROUP} \
--name ${SPRING_APPS}
다음 예제에서는 --system-assigned
매개 변수에서 요청한 대로 시스템이 할당한 관리 ID를 사용하여 springapp
이라는 앱을 만듭니다.
az spring app create \
--resource-group ${RESOURCE_GROUP} \
--service ${SPRING_APPS} \
--name ${APP} \
--assign-endpoint true \
--runtime-version Java_17 \
--system-assigned
export MANAGED_IDENTITY_PRINCIPAL_ID=$(az spring app show \
--resource-group ${RESOURCE_GROUP} \
--service ${SPRING_APPS} \
--name ${APP} \
--query identity.principalId --output tsv)
Key Vault에 앱 액세스 권한 부여
다음 명령을 사용하여 앱의 Key Vault에서 적절한 액세스 권한을 부여합니다.
az keyvault set-policy \
--name ${KEY_VAULT} \
--object-id ${MANAGED_IDENTITY_PRINCIPAL_ID} \
--secret-permissions set get list
참고 항목
시스템이 할당한 관리 ID의 경우 시스템 할당 관리 ID가 사용하지 않도록 설정된 후 az keyvault delete-policy --name ${KEY_VAULT} --object-id ${MANAGED_IDENTITY_PRINCIPAL_ID}
를 사용하여 앱에 대한 액세스 권한을 제거합니다.
Spring Boot 스타터를 사용하여 Spring Boot 앱 샘플 빌드
이 앱에는 Azure Key Vault에서 비밀을 가져올 수 있는 액세스 권한이 있습니다. Azure Key Vault 비밀 Spring Boot 스타터를 사용합니다. Azure Key Vault는 Spring PropertySource의 인스턴스로 추가됩니다. Azure Key Vault에 저장된 비밀은 외부화된 구성 속성(예: 파일의 속성)과 같이 편리하게 액세스하고 사용할 수 있습니다.
다음 명령을 사용하여 Azure Key Vault Spring 스타터로
start.spring.io
에서 샘플 프로젝트를 생성합니다.curl https://start.spring.io/starter.tgz -d dependencies=web,azure-keyvault -d baseDir=springapp -d bootVersion=3.2.1 -d javaVersion=17 -d type=maven-project | tar -xzvf -
앱에서 Key Vault를 지정합니다.
cd springapp vim src/main/resources/application.properties
Azure Spring Apps에 배포된 앱에 관리 ID를 사용하려면 다음 콘텐츠가 포함된 속성을 src/main/resources/application.properties 파일에 추가합니다.
spring.cloud.azure.keyvault.secret.property-sources[0].endpoint=<your-keyvault-url> spring.cloud.azure.keyvault.secret.property-sources[0].credential.managed-identity-enabled=true
참고 항목
이전과 같이 application.properties 파일에 키 자격 증명 모음 URL을 추가해야 합니다. 그렇지 않으면 런타임 중에 키 자격 증명 모음 URL이 캡처되지 않을 수 있습니다.
다음 코드의 예로 src/main/java/com/example/demo/DemoApplication.java를 업데이트합니다. 이 코드는 키 자격 증명 모음에서 연결 문자열을 검색합니다.
package com.example.demo; import org.springframework.boot.SpringApplication; import org.springframework.boot.autoconfigure.SpringBootApplication; import org.springframework.beans.factory.annotation.Value; import org.springframework.boot.CommandLineRunner; import org.springframework.web.bind.annotation.GetMapping; import org.springframework.web.bind.annotation.RestController; @SpringBootApplication @RestController public class DemoApplication implements CommandLineRunner { @Value("${connectionString}") private String connectionString; public static void main(String[] args) { SpringApplication.run(DemoApplication.class, args); } @GetMapping("get") public String get() { return connectionString; } public void run(String... args) throws Exception { System.out.println(String.format("\nConnection String stored in Azure Key Vault:\n%s\n",connectionString)); } }
pom.xml 파일을 열면 다음 예제와 같이
spring-cloud-azure-starter-keyvault
종속성을 볼 수 있습니다.<dependency> <groupId>com.azure.spring</groupId> <artifactId>spring-cloud-azure-starter-keyvault</artifactId> </dependency>
다음 명령을 사용하여 Azure Spring Apps에 앱을 배포합니다.
az spring app deploy \ --resource-group ${RESOURCE_GROUP} \ --service ${SPRING_APPS} \ --name ${APP} \ --source-path
다음 명령을 사용하여 Azure Spring Apps에 앱을 배포합니다.
az spring app deploy \ --resource-group ${RESOURCE_GROUP} \ --service ${SPRING_APPS} \ --name ${APP} \ --source-path \ --build-env BP_JVM_VERSION=17
앱을 테스트하려면 다음 명령을 사용하여 공용 엔드포인트 또는 테스트 엔드포인트에 액세스합니다.
curl https://${SPRING_APPS}-${APP}.azuremicroservices.io/get
응답 본문에 다음 메시지가 반환됩니다.
jdbc:sqlserver://SERVER.database.windows.net:1433;database=DATABASE;
리소스 정리
다음 명령을 사용하여 새로 만든 서비스 인스턴스를 포함한 전체 리소스 그룹을 삭제합니다.
az group delete --name ${RESOURCE_GROUP} --yes