Application Gateway에서 TLS 종료를 사용하여 애플리케이션을 인터넷에 노출
참고 항목
기본, 표준 및 엔터프라이즈 계획은 2025년 3월 중순부터 사용되지 않으며 3년의 은퇴 기간이 있습니다. Azure Container Apps로 전환하는 것이 좋습니다. 자세한 내용은 Azure Spring Apps 사용 중지 공지 사항을 참조하세요.
표준 소비 및 전용 계획은 2024년 9월 30일부터 사용되지 않으며 6개월 후에 완전히 종료됩니다. Azure Container Apps로 전환하는 것이 좋습니다. 자세한 내용은 Azure Spring Apps 표준 사용량 및 전용 계획을 Azure Container Apps로 마이그레이션을 참조 하세요.
이 문서에서는 Application Gateway를 사용하여 애플리케이션을 인터넷에 노출하는 방법을 설명합니다.
Azure Spring Apps 서비스 인스턴스를 VNET(가상 네트워크)에 배포하는 경우 서비스 인스턴스의 애플리케이션은 비공개 네트워크에서만 액세스할 수 있습니다. 인터넷에서 애플리케이션에 액세스할 수 있도록 하려면 Azure Application Gateway와 통합해야 합니다. 들어오는 암호화된 트래픽은 애플리케이션 게이트웨이에서 암호 해독되거나 엔드투엔드 TLS/SSL을 달성하기 위해 암호화된 Azure Spring Apps에 전달될 수 있습니다. 개발 및 테스트 목적으로 이 가이드에 설명된 애플리케이션 게이트웨이에서 SSL 종료로 시작할 수 있습니다. 프로덕션의 경우 가상 네트워크에서 엔드투엔드 TLS로 애플리케이션 노출에서 설명하는 대로, 프라이빗 인증서를 사용하는 엔드투엔드 TLS/SSL을 사용하는 것이 좋습니다.
필수 조건
- Azure CLI 버전 2.0.4 이상을 사용하세요.
- 기본
.private.azuremicroservices.io
도메인 접미사를 사용하여 프라이빗 네트워크를 통해 액세스할 수 있는 애플리케이션이 있는 가상 네트워크에 배포된 Azure Spring Apps 서비스 인스턴스. 자세한 내용은 가상 네트워크에 Azure Spring Apps 배포를 참조하세요. - 애플리케이션 액세스에 사용할 사용자 지정 도메인.
- HTTPS 수신기를 설정하는 데 사용할 사용자 지정 도메인과 일치하는, Key Vault에 저장된 인증서. 자세한 내용은 자습서: Azure Key Vault에서 인증서 가져오기를 참조하세요.
Azure Spring Apps에 대한 Application Gateway 구성
브라우저에서 볼 수 있듯이 도메인 이름은 Application Gateway가 트래픽을 Azure Spring Apps 백 엔드로 전송하는 데 사용하는 호스트 이름과 같은 것이 좋습니다. 이 권장 사항은 Application Gateway를 사용하여 Azure Spring Apps에서 호스트되고 가상 네트워크에 상주하는 애플리케이션을 노출할 때 최상의 환경을 제공합니다. Application Gateway에 의해 노출된 도메인이 Azure Spring Apps에서 허용하는 도메인과 다른 경우 쿠키 및 생성된 리디렉션 URL 등이 손상될 수 있습니다. 자세한 내용은 호스트 이름 유지를 참조하세요.
프라이빗 VNET의 Azure Spring Apps 앞에 Application Gateway를 구성하려면 다음 단계를 사용합니다.
- 가상 네트워크에 Azure Spring Apps 배포의 지침을 따릅니다.
- 프라이빗 네트워크에서 애플리케이션 액세스의 지침을 따릅니다.
- 선택한 도메인에 대한 인증서를 획득하고 Key Vault에 저장합니다. 자세한 내용은 자습서: Azure Key Vault에서 인증서 가져오기를 참조하세요.
- Azure Spring Apps에 배포된 앱의 Key Vault에서 사용자 지정 도메인 및 해당 인증서를 구성합니다. 자세한 내용은 자습서: Azure Spring Apps에 기존 사용자 지정 도메인 매핑을 참조하세요.
- 다음 목록에 따라 구성된 가상 네트워크에 Application Gateway를 배포합니다.
- 백 엔드 풀에서 Azure Spring Apps을 사용하며, 접미사
private.azuremicroservices.io
가 붙은 도메인으로 참조합니다. - Key Vault에서 동일한 인증서를 사용하는 HTTPS 수신기를 포함합니다.
- 접미사
private.azuremicroservices.io
가 붙은 도메인 대신, Azure Spring Apps에 구성된 사용자 지정 도메인 이름을 사용하는 HTTP 설정으로 가상 네트워크를 구성합니다.
- 백 엔드 풀에서 Azure Spring Apps을 사용하며, 접미사
- 애플리케이션 게이트웨이를 가리키도록 공용 DNS를 구성합니다.
변수 정의
이제 다음 명령을 사용하여 가상 네트워크에 Azure Spring Apps 배포의 지시대로 만든 리소스 그룹과 가상 네트워크의 변수를 정의합니다. <...> 자리 표시자를 실제 환경에 따라 실제 값으로 바꿉니다. SPRING_APP_PRIVATE_FQDN
을 정의할 때 URI에서 https://
를 제거합니다.
export SUBSCRIPTION='<subscription-id>'
export RESOURCE_GROUP='<resource-group-name>'
export LOCATION='eastus'
export SPRING_CLOUD_NAME='<name-of-Azure-Spring-Apps-instance>'
export APPNAME='<name-of-app-in-Azure-Spring-Apps>'
export SPRING_APP_PRIVATE_FQDN='$APPNAME.private.azuremicroservices.io'
export VIRTUAL_NETWORK_NAME='azure-spring-apps-vnet'
export APPLICATION_GATEWAY_SUBNET_NAME='app-gw-subnet'
export APPLICATION_GATEWAY_SUBNET_CIDR='10.1.2.0/24'
Azure에 로그인
다음 명령을 사용하여 Azure CLI에 로그인하고 활성 구독을 선택합니다.
az login
az account set --subscription $SUBSCRIPTION
Azure Spring Apps에서 공용 도메인 이름 구성
트래픽은 퍼블릭 도메인 이름을 사용하여 Azure Spring Apps에 배포된 애플리케이션에 들어갑니다. HTTP를 통해 이 호스트 이름을 수신 대기하도록 애플리케이션을 구성하려면 다음 명령을 사용하여 앱에 사용자 지정 도메인을 추가하고 <...> 자리 표시자를 실제 값으로 바꿉니다.
export KV_NAME='<name-of-key-vault>'
export KV_RG='<resource-group-name-of-key-vault>'
export CERT_NAME_IN_KV='<name-of-certificate-with-intermediaries-in-key-vault>'
export DOMAIN_NAME=myapp.mydomain.com
az spring app custom-domain bind \
--resource-group $RESOURCE_GROUP \
--service $SPRING_CLOUD_NAME \
--domain-name $DOMAIN_NAME \
--app $APPNAME
네트워크 리소스 만들기
만들 애플리케이션 게이트웨이는 Azure Spring Apps 서비스 인스턴스와 동일한 가상 네트워크에 조인합니다. 먼저 가상 네트워크에 애플리케이션 게이트웨이에 대한 새 서브넷을 만들고, 다음 예제처럼 애플리케이션 게이트웨이의 프런트 엔드로 공용 IP 주소를 만듭니다.
export APPLICATION_GATEWAY_PUBLIC_IP_NAME='app-gw-public-ip'
az network vnet subnet create \
--name $APPLICATION_GATEWAY_SUBNET_NAME \
--resource-group $RESOURCE_GROUP \
--vnet-name $VIRTUAL_NETWORK_NAME \
--address-prefix $APPLICATION_GATEWAY_SUBNET_CIDR
az network public-ip create \
--resource-group $RESOURCE_GROUP \
--location $LOCATION \
--name $APPLICATION_GATEWAY_PUBLIC_IP_NAME \
--allocation-method Static \
--sku Standard
애플리케이션 게이트웨이에 대한 관리 ID 만들기
애플리케이션 게이트웨이는 인증서를 읽기 위해 Key Vault에 액세스할 수 있어야 합니다. 이를 위해 애플리케이션 게이트웨이는 사용자 할당 관리 ID를 사용합니다. 자세한 내용은 Azure 리소스에 대한 관리 ID란?을 참조하세요. 다음 명령을 사용하여 관리 ID를 만들고 <...> 자리 표시자를 대체합니다.
export APPGW_IDENTITY_NAME='<name-for-appgw-managed-identity>'
az identity create \
--resource-group $RESOURCE_GROUP \
--name $APPGW_IDENTITY_NAME
그런 다음, 다음 명령을 사용하여 관리 ID에 대해 objectId
를 가져옵니다. 이 값은 나중에 Key Vault 인증서에 액세스할 수 있는 권한을 부여하는 데 사용됩니다.
export APPGW_IDENTITY_CLIENTID=$(az identity show \
--resource-group $RESOURCE_GROUP \
--name $APPGW_IDENTITY_NAME \
--query clientId \
--output tsv)
export APPGW_IDENTITY_OID=$(az ad sp show \
--id $APPGW_IDENTITY_CLIENTID \
--query objectId \
--output tsv)
Key Vault에서 정책 설정
애플리케이션 게이트웨이의 관리 ID가 Key Vault에 저장된 인증서에 액세스할 수 있도록 다음 명령을 사용하여 Key Vault를 구성합니다.
az keyvault set-policy \
--resource-group $KV_RG \
--name $KV_NAME \
--object-id $APPGW_IDENTITY_OID \
--secret-permissions get list \
--certificate-permissions get list
애플리케이션 게이트웨이 만들기
az network application-gateway create
를 사용하여 애플리케이션 게이트웨이를 만들고 애플리케이션의 비공개 FQD(정규화된 도메인 이름)을 백 엔드 풀에서 서버로 지정합니다. 사용자가 할당한 관리 ID를 사용하고, 인증서의 비밀 ID를 사용하여 Key Vault 인증서를 가리켜야 합니다.
export APPGW_NAME='<name-for-application-gateway>'
export CERT_NAME_IN_KV='<name-of-certificate-in-key-vault>'
export KEYVAULT_SECRET_ID_FOR_CERT=$(az keyvault certificate show \
--name $CERT_NAME_IN_KV \
--vault-name $KV_NAME \
--query sid \
--output tsv)
az network application-gateway create \
--name $APPGW_NAME \
--resource-group $RESOURCE_GROUP \
--location $LOCATION \
--capacity 2 \
--sku Standard_v2 \
--frontend-port 443 \
--http-settings-cookie-based-affinity Disabled \
--http-settings-port 80 \
--http-settings-protocol Http \
--public-ip-address $APPLICATION_GATEWAY_PUBLIC_IP_NAME \
--vnet-name $VIRTUAL_NETWORK_NAME \
--subnet $APPLICATION_GATEWAY_SUBNET_NAME \
--servers $SPRING_APP_PRIVATE_FQDN \
--key-vault-secret-id $KEYVAULT_SECRET_ID_FOR_CERT \
--identity $APPGW_IDENTITY_NAME
Azure가 애플리케이션 게이트웨이를 만들 때까지 최대 30분이 걸릴 수 있습니다.
백 엔드에 대해 도메인 이름을 사용하도록 HTTP 설정 업데이트
Azure Spring Apps로 트래픽을 보내기 위해 접미사 .private.azuremicroservices.io
가 추가된 도메인 대신, 공용 도메인 이름을 호스트 이름으로 사용하도록 HTTP 설정을 업데이트합니다.
az network application-gateway http-settings update \
--resource-group $RESOURCE_GROUP \
--gateway-name $APPGW_NAME \
--host-name-from-backend-pool false \
--host-name $DOMAIN_NAME \
--name appGatewayBackendHttpSettings
애플리케이션 게이트웨이 배포 확인
만든 후에는 다음 명령을 사용하여 백 엔드 상태를 확인합니다. 이 명령의 출력을 사용하면 애플리케이션 게이트웨이가 프라이빗 FQDN(정규화된 도메인 이름)을 통해 애플리케이션에 도달하는지 여부를 확인할 수 있습니다.
az network application-gateway show-backend-health \
--name $APPGW_NAME \
--resource-group $RESOURCE_GROUP
출력은 다음 예제와 같이 백 엔드 풀이 정상 상태임을 나타냅니다.
{
"backendAddressPools": [
{
"backendHttpSettingsCollection": [
{
"servers": [
{
"address": "my-azure-spring-apps-hello-vnet.private.azuremicroservices.io",
"health": "Healthy",
"healthProbeLog": "Success. Received 200 status code",
"ipConfiguration": null
}
]
}
]
}
]
}
DNS 구성 및 애플리케이션 액세스
CNAME 또는 A 레코드를 사용하여 애플리케이션 게이트웨이를 가리키도록 공용 DNS를 구성합니다. 다음 명령을 사용하여 애플리케이션 게이트웨이에 대한 공용 주소를 찾을 수 있습니다.
az network public-ip show \
--resource-group $RESOURCE_GROUP \
--name $APPLICATION_GATEWAY_PUBLIC_IP_NAME \
--query [ipAddress] \
--output tsv
이제 공용 도메인 이름을 사용하여 애플리케이션에 액세스할 수 있습니다.
리소스 정리
후속 문서로 계속 작업하려는 경우 이러한 리소스를 그대로 유지할 수 있습니다. 더 이상 필요 없으면 리소스 그룹을 삭제합니다. 그러면 리소스 그룹의 리소스가 삭제됩니다. Azure CLI를 사용하여 리소스 그룹을 삭제하려면 다음 명령을 사용합니다.
az group delete --name $RESOURCE_GROUP