참고
기본, 표준 및 엔터프라이즈 계획은 2025년 3월 17일에 사용 중지 기간에 들어갔습니다. 자세한 내용은 Azure Spring 앱 사용 중지 공지 사항을 참조하세요.
이 문서의 적용 대상:✅ 기본/표준 ✅ 엔터프라이즈
TLS/SSL을 사용하여 Azure Spring Apps에서 Azure Container Apps로 사용자 지정 도메인을 마이그레이션하려면 원활한 전환을 위한 몇 가지 단계가 포함됩니다. 이 문서에서는 클라이언트 트래픽, 애플리케이션 간 트래픽 및 외부 서비스에 대한 트래픽을 다루는 프로세스를 안내합니다.
필수 구성 요소
- 기존 Azure 컨테이너 앱입니다. 자세한 내용은 빠른 시작: Azure Portal을 사용하여 첫 번째 컨테이너 앱 배포를 참조하세요.
- Azure CLI
- 기존 TLS/SSL 인증서(예: Azure KeyVault에 저장된 인증서)입니다.
- (선택 사항) Azure Storage 파일 공유에서 트러스트 저장소로 인증서를 로드하려는 경우 기존 Azure Storage 계정입니다. 자세한 내용은 Azure Storage 계정 만들기를 참조하세요.
애플리케이션에 대한 클라이언트 트래픽
기본적으로 컨테이너 앱의 모든 인바운드 트래픽은 HTTPS를 사용하지만, 다음 명령을 사용하여 HTTP 트래픽을 수동으로 활성화할 수 있습니다.
az containerapp ingress update \
--resource-group "my-resource-group" \
--name "my-app" \
--allow-insecure
앱에 대한 수신을 구성하는 방법에 대한 자세한 내용은 Azure Container Apps에서 앱에 대한 수신 구성을 참조하세요.
사용자 지정 도메인
Azure Container Apps에서 사용자 지정 DNS(도메인 이름 시스템) 이름을 보호하려면 디지털 보안 인증서를 추가하세요. 이렇게 하면 앱 간의 보안 통신이 지원됩니다.
Azure Container Apps에서 사용자 지정 도메인을 보호해야 하는 경우 무료이며 사용하기 쉬운 프라이빗 인증서를 사용할 수 있습니다. 자세한 내용은 Azure Container Apps의 사용자 지정 도메인 이름 및 무료 관리 인증서를 참조하세요.
로컬에 저장된 개인 인증서가 있는 경우 업로드할 수 있습니다. 자세한 내용은 Azure Container Apps에서 사용자 지정 도메인 이름 및 자체 인증서 가져오기를 참조하세요.
인증서가 Azure Key Vault에서 온 경우 인증서를 Azure Container Apps로 직접 가져올 수 있습니다. 자세한 내용은 Azure Key Vault에서 Azure Container Apps로 인증서 가져오기를 참조하세요.
Azure Spring Apps의 원래 인증서 및 도메인 이름을 계속 사용하려면 컨테이너 앱 또는 Azure Key Vault에 인증서를 업로드할 수 있습니다. 또한 DNS 공급자에서 A 레코드 또는 CNAME을 업데이트하여 원래 도메인 이름을 컨테이너 앱 IP 또는 URL로 리디렉션할 수 있습니다.
클라이언트 및 컨테이너 앱 간에 mTLS 사용
클라이언트와 컨테이너 앱 간에 mTLS(상호 TLS)를 사용하도록 설정하려면 다음 단계를 따르세요.
다음 명령을 사용하여 YAML 형식으로 컨테이너 앱 구성을 내보내세요.
az containerapp show \ --resource-group "my-resource-group" \ --name "my-app" \ --output yaml > app.yaml다음 예제와 같이
clientCertificateMode의 값을 업데이트하세요.properties: configuration: ingress: clientCertificateMode: require이 속성을 다음 값 중 하나로 설정할 수 있습니다.
-
require: 컨테이너 앱에 대한 모든 요청에는 클라이언트 인증서가 필요합니다. -
accept: 클라이언트 인증서는 선택 사항입니다. 클라이언트 인증서가 제공되지 않으면 요청이 계속 수락됩니다. -
ignore: 클라이언트 인증서는 무시됩니다.
-
다음 명령을 사용하여 컨테이너 앱에
clientCertificateMode개 변경 사항을 적용:az containerapp update \ --resource-group "my-resource-group" \ --name "my-app" \ --yaml app.yaml
자세한 내용은 Azure Container Apps에서 클라이언트 인증서 인증 구성을 참조하세요.
코드에서 클라이언트 인증서 확인을 처리해야 합니다.
애플리케이션 간 트래픽
기본적으로 동일한 환경의 컨테이너 앱 간 트래픽은 HTTP를 사용합니다. 이 트래픽을 보호하려면 다음 명령을 사용하여 피어 투 피어 암호화를 사용하도록 설정합니다.
# enable when creating the container app
az containerapp env create \
--resource-group "my-resource-group" \
--name "my-app" \
--location "location" \
--enable-peer-to-peer-encryption
# enable for the existing container app
az containerapp env update \
--resource-group "my-resource-group" \
--name "my-app" \
--enable-peer-to-peer-encryption
사용하도록 설정되면 Azure Container Apps는 기본 제공 투명 프록시 기능을 통해 HTTP 트래픽을 자동으로 보호합니다. 일반적으로 애플리케이션은 트래픽이 암호화되었는지 여부를 신경 쓸 필요가 없습니다.
내부적으로 앱 간 통신에 HTTPS를 사용하려면 인증서 확인을 처리해야 합니다. 도메인 이름이 인증서의 CN(일반 이름) 또는 SAN(주체 대체 이름)과 일치하지 않을 수 있기 때문입니다.
자세한 내용은 Azure Container Apps 환경에서 인그레스 구성의 피어 투 피어 암호화 섹션을 참조하세요.
외부 서비스로의 트래픽
이 샘플에서는 라이브러리를 사용하여 Azure Key Vault에서 인증서를 로드하여 외부 서비스로의 트래픽에 대해 TLS 및 mTLS를 spring-cloud-azure-starter-keyvault-jca 사용하도록 설정하는 방법을 보여 줍니다. Java 프로젝트는 Spring Boot 3.1+를 사용해야 하며 pom.xml 파일에 다음 종속성을 포함해야 합니다.
<dependency>
<groupId>com.azure.spring</groupId>
<artifactId>spring-cloud-azure-starter-keyvault-jca</artifactId>
<version>5.23.0</version>
</dependency>
SSL 번들을 사용하여 Key Vault에서 트러스트 저장소로 인증서 로드
다음 단계를 따라 spring-cloud-azure-starter-keyvault-jca 라이브러리를 사용하여 Azure Key Vault에서 인증서를 신뢰 저장소에 로드합니다.
Azure Key Vault에서 인증서를 생성하거나 가져옵니다. 자세한 내용은 Azure Key Vault에서 인증서 만들기 및 가져오기를 참조하세요.
컨테이너 앱에서 관리 ID를 사용하도록 설정합니다. 컨테이너 앱에서 관리 ID를 사용하도록 설정하려면 Azure Container Apps의 관리 ID를 참조하세요.
Key Vault의
Key Vault Certificate User관리 ID에 역할을 부여합니다. 자세한 내용은 개별 키, 비밀 및 인증서 역할 할당에 대한 모범 사례를 참조하세요.application.yml 파일에 다음 구성을 추가합니다.
spring: ssl: bundle: keyvault: tlsClientBundle: truststore: keyvault-ref: keyvault1 cloud: azure: keyvault: jca: vaults: keyvault1: endpoint: ${KEY_VAULT_SSL_BUNDLES_KEYVAULT_URI_01} credential: client-id: ${KEY_VAULT_SSL_BUNDLES_CLIENT_ID} # Required for user-assigned managed identity managed-identity-enabled: trueKey Vault SSL 번들을 적용하려면 아래 예제와 같이
RestTemplate또는WebClient빈 구성을 업데이트하세요.// For RestTemplate @Bean RestTemplate restTemplateWithTLS(RestTemplateBuilder restTemplateBuilder, SslBundles sslBundles) { return restTemplateBuilder.sslBundle(sslBundles.getBundle("tlsClientBundle")).build(); } // For WebClient @Bean WebClient webClientWithTLS(WebClientSsl ssl) { return WebClient.builder().apply(ssl.fromBundle("tlsClientBundle")).build(); }
mTLS 통신 사용
다음 단계를 사용하여 클라이언트와 서버 간의 양방향 인증을 위한 mTLS를 설정합니다.
클라이언트 및 서버 인증서를 생성하거나 Azure Key Vault로 가져옵니다. 자세한 내용은 Azure Key Vault에서 인증서 만들기 및 가져오기를 참조하세요.
컨테이너 앱에 대한 관리 ID를 사용하도록 설정합니다. 컨테이너 앱에서 관리 ID를 사용하도록 설정하려면 Azure Container Apps의 관리 ID를 참조하세요.
두 키 자격 증명 모음의 관리 ID에
Key Vault Certificate User역할을 부여하세요. 자세한 내용은 개별 키, 비밀 및 인증서 역할 할당에 대한 모범 사례를 참조하세요.mTLS의 application.yml 파일에 다음 구성을 추가합니다.
spring: ssl: bundle: keyvault: mtlsClientBundle: key: alias: client for-client-auth: true keystore: keyvault-ref: keyvault2 truststore: keyvault-ref: keyvault1 cloud: azure: keyvault: jca: vaults: keyvault1: endpoint: ${KEY_VAULT_SSL_BUNDLES_KEYVAULT_URI_01} credential: client-id: ${KEY_VAULT_SSL_BUNDLES_CLIENT_ID} # Required for user-assigned managed identity managed-identity-enabled: true keyvault2: endpoint: ${KEY_VAULT_SSL_BUNDLES_KEYVAULT_URI_02} credential: client-id: ${KEY_VAULT_SSL_BUNDLES_CLIENT_ID} # Required for user-assigned managed identity managed-identity-enabled: trueKey Vault SSL 번들을 적용하려면 아래 예제와 같이
RestTemplate또는WebClient빈 구성을 업데이트하세요.// For RestTemplate @Bean RestTemplate restTemplateWithMTLS(RestTemplateBuilder restTemplateBuilder, SslBundles sslBundles) { return restTemplateBuilder.sslBundle(sslBundles.getBundle("mtlsClientBundle")).build(); } // For WebClient @Bean WebClient webClientWithMTLS(WebClientSsl ssl) { return WebClient.builder().apply(ssl.fromBundle("mtlsClientBundle")).build(); }
Spring Boot 애플리케이션에서 라이브러리를 사용하는 spring-cloud-azure-starter-keyvault-jca 방법에 대한 자세한 내용은 Spring Cloud Azure Starter Key Vault JCA 소개: 간소화된 TLS 및 Spring Boot용 mTLS를 참조하세요.
다음 단계를 수행하면 모든 트래픽 유형에서 안전하고 효율적인 통신을 유지하면서 TLS/SSL을 사용하여 사용자 지정 도메인을 Azure Spring Apps에서 Azure Container Apps로 성공적으로 마이그레이션할 수 있습니다.