Azure Resource Manager 템플릿을 사용하여 ILB ASEv1을 만드는 방법
Important
이 문서는 App Service Environment v1에 관한 것입니다. App Service Environment v1 및 v2는 2024년 8월 31일부터 사용 중지됩니다. 사용하기 더 쉽고 더 강력한 인프라에서 실행되는 새로운 버전의 App Service Environment가 있습니다. 새 버전에 대한 자세한 내용은 App Service Environment 소개를 참조하세요. 현재 App Service Environment v1을 사용 중인 경우 이 문서의 단계에 따라 새 버전으로 마이그레이션하세요.
2024년 8월 31일부터 서비스가 중지된 제품이기 계속 운영되는 App Service Environment v1 및 v2 워크로드에는 SLA(서비스 수준 계약) 및 서비스 크레딧이 더 이상 적용되지 않습니다. App Service Environment v1 및 v2 하드웨어의 서비스 해제가 시작되었으며, 이는 앱과 데이터의 가용성 및 성능에 영향을 미칠 수 있습니다.
즉시 App Service Environment v3으로의 마이그레이션을 완료해야 합니다. 그렇지 않으면 앱과 리소스가 삭제될 수 있습니다. Microsoft는 현재 위치 마이그레이션 기능을 사용하여 남아 있는 App Service Environment v1 및 v2를 최선을 다해 자동 마이그레이션하려고 하지만, 자동 마이그레이션 후의 애플리케이션 가용성에 대해 어떠한 클레임이나 보장도 하지 않습니다. 마이그레이션을 완료하고 사용자 요구 사항에 맞게 App Service 요금제 SKU 선택을 최적화하려면 수동 구성을 수행해야 할 수도 있습니다. 자동 마이그레이션이 불가능한 경우 리소스와 관련 앱 데이터가 삭제됩니다. 이러한 극단적인 상황을 피하기 위해 지금 실행하기를 강력히 요청드립니다.
시간이 더 필요한 경우 마이그레이션을 완료하기 위해 일회성인 30일 유예 기간을 제공해 드릴 수 있습니다. 자세한 내용을 확인하고 이 유예 기간을 요청하려면 유예 기간 개요를 검토한 다음, Azure Porta 로 이동하여 각 App Service Environment에 대한 마이그레이션 블레이드를 방문하세요.
App Service Environment v1/v2 사용 중지에 대한 최신 정보는 App Service Environment v1 및 v2 사용 중지 업데이트를 참조하세요.
개요
App Service Environment는 공용 VIP 대신 가상 네트워크 내부 주소를 사용하여 만들 수 있습니다. 이 내부 주소는 ILB(내부 부하 분산 장치)라고 하는 Azure 구성 요소에서 제공됩니다. Azure 포털을 사용하여 ILB ASE를 만들 수 있습니다. Azure Resource Manager 템플릿을 통해 자동화 방식으로 만들 수도 있습니다. 이 문서에서는 Azure Resource Manager 템플릿으로 ILB ASE를 만드는 데 필요한 단계와 구문을 안내합니다.
ILB ASE 생성을 자동화하는 과정은 세 단계로 진행됩니다.
- 먼저 공용 VIP 대신 내부 부하 분산 장치 주소를 사용하여 가상 네트워크에 기본 ASE가 생성됩니다. 이 단계의 일부로 루트 도메인 이름이 ILB ASE에 할당됩니다.
- ILB ASE가 만들어지면 TLS/SSL 인증서가 업로드됩니다.
- 업로드된 TLS/SSL 인증서는 “기본” TLS/SSL 인증서로 해당 ILB ASE에 명시적으로 할당됩니다. 이 TLS/SSL 인증서는 ASE에 할당된 공용 루트 도메인(예:
https://someapp.mycustomrootcomain.com
)을 사용하여 앱의 주소를 지정할 때 ILB ASE의 앱에 대한 TLS 트래픽에 사용됩니다
기본 ILB ASE 만들기
예제 Azure Resource Manager 템플릿 및 관련 매개 변수 파일은 여기에서 사용할 수 있습니다.
azuredeploy.parameters.json 파일 대부분의 매개 변수는 공용 VIP에 바인딩된 ILB ASE와 ASE를 모두 만드는 데 일반적입니다. 아래 목록에서는 ILB ASE를 만들 때 특별한 고려 사항이 있거나 고유한 매개 변수를 호출합니다.
- internalLoadBalancingMode: 컨트롤 및 데이터 포트가 노출되는 방법을 결정합니다.
- 3은 포트 80/443의 HTTP/HTTPS 트래픽과 ASE의 FTP 서비스에서 수신하는 컨트롤/데이터 채널 포트가 ILB 할당 가상 네트워크 내부 주소에 바인딩될 것임을 의미합니다.
- 2는 FTP 서비스 관련 포트(컨트롤 및 데이터 채널 모두)만 ILB 주소에 바인딩되지만, HTTP/HTTPS 트래픽은 공용 VIP에 유지됨을 의미합니다.
- 0은 모든 트래픽이 ASE를 외부로 만드는 공용 VIP에 바인딩됨을 의미합니다.
- dnsSuffix: 이 매개 변수는 ASE에 할당될 기본 루트 도메인을 정의합니다. Azure App Service의 공용 변형에서 모든 웹앱용 기본 루트 도메인은 azurewebsites.net입니다. 그러나 ILB ASE는 고객의 가상 네트워크 내부에 있으므로 공용 서비스의 기본 루트 도메인을 사용하는 것은 적합하지 않습니다. 대신, ILB ASE에는 회사의 내부 가상 네트워크 내에서 사용하기 적합한 기본 루트 도메인이 있어야 합니다. 예를 들어 가상의 Contoso Corporation은 Contoso의 가상 네트워크 내에서만 확인 가능하고 액세스할 수 있는 앱에 기본 루트 도메인 internal-contoso.com을 사용할 수 있습니다.
- ipSslAddressCount: 이 매개 변수는 ILB ASE가 단일 ILB 주소만 가지므로 azuredeploy.json 파일에서 자동으로 기본값인 0을 갖습니다. ILB ASE에 대한 명시적 IP-SSL 주소가 없으므로 ILB ASE에 대한 IP-SSL 주소 풀을 0으로 설정해야 합니다. 그렇지 않으면 프로비전 오류가 발생합니다.
ILB ASE에 사용할 azuredeploy.parameters.json 파일이 채워지면 다음 PowerShell 코드 조각을 사용하여 ILB ASE를 만들 수 있습니다. 머신에서 Azure Resource Manager 템플릿 파일이 있는 위치와 일치하도록 파일 경로를 변경합니다. 또한 Azure Resource Manager 배포 이름 및 리소스 그룹 이름에 대해 고유한 값을 제공해야 합니다.
$templatePath="PATH\azuredeploy.json"
$parameterPath="PATH\azuredeploy.parameters.json"
New-AzResourceGroupDeployment -Name "CHANGEME" -ResourceGroupName "YOUR-RG-NAME-HERE" -TemplateFile $templatePath -TemplateParameterFile $parameterPath
Azure Resource Manager 템플릿이 제출된 후에 ILB ASE가 만들어지는 데 몇 시간 정도 소요됩니다. 다 만들어지면 배포를 트리거한 구독에 대한 App Service Environment 목록의 포털 UX에 ILB ASE가 표시됩니다.
“기본” TLS/SSL 인증서 업로드 및 구성
ILB ASE를 만든 후에는 TLS/SSL 인증서를 앱에 TLS/SSL 연결을 설정하는 데 사용하는 “기본” TLS/SSL 인증서로 ASE와 연결해야 합니다. 가상의 Contoso Corporation 예제를 계속 살펴보면, ASE의 기본 DNS 접미사가 internal-contoso.com이고 https://some-random-app.internal.contoso.com
에 연결하려는 경우 *.internal-contoso.com에 유효한 TLS/SSL 인증서가 있어야 합니다.
유효한 TLS/SSL 인증서를 구하는 방법에는 내부 CA를 사용하거나, 외부 발급자로부터 인증서를 구입하거나, 자체 서명된 인증서를 사용하는 등 다양한 방법이 있습니다. TLS/SSL 인증서 소스에 관계없이 다음 인증서 특성을 올바르게 구성해야 합니다.
- Subject: 이 특성은 *.your-root-domain-here.com으로 설정되어야 합니다
- 주체 대체 이름: 이 특성에는 .your-root-domain-here.com 및 *.scm.your-root-domain-here.com* 둘 다 포함되어야 합니다. 두 번째 항목을 포함해야 하는 이유는 각 앱과 연결된 SCM/Kudu 사이트에 대한 TLS 연결이 your-app-name.scm.your-root-domain-here.com 형식의 주소를 사용하여 만들어지기 때문입니다.
유효한 TLS/SSL 인증서가 있는 경우 두 가지 추가 준비 단계가 필요합니다. TLS/SSL 인증서를 .pfx 파일로 변환/저장해야 합니다. .pfx 파일에는 모든 중간 인증서 및 루트 인증서가 포함되어야 하며 암호로 보호되어야 합니다.
TLS/SSL 인증서는 Azure Resource Manager 템플릿을 사용하여 업로드되므로 결과 .pfx 파일을 Base64 문자열로 변환해야 합니다. Azure Resource Manager 템플릿은 텍스트 파일이므로 .pfx 파일은 템플릿의 매개 변수로 포함될 수 있게 Base64 문자열로 변환해야 합니다.
아래의 PowerShell 코드 조각은 자체 서명된 인증서를 생성하고, 인증서를 .pfx 파일로 내보내고, .pfx 파일을 Base64 인코딩 문자열로 변환한 다음 Base64 인코딩 문자열을 개별 파일로 저장하는 예를 보여 줍니다. Base64 인코딩을 위한 PowerShell 코드는 PowerShell 스크립트 블로그에서 조정되었습니다.
$certificate = New-SelfSignedCertificate -certstorelocation cert:\localmachine\my -dnsname "*.internal.contoso.com","*.scm.internal.contoso.com"
$certThumbprint = "cert:\localMachine\my\" + $certificate.Thumbprint
$password = ConvertTo-SecureString -String "CHANGETHISPASSWORD" -Force -AsPlainText
$fileName = "exportedcert.pfx"
Export-PfxCertificate -cert $certThumbprint -FilePath $fileName -Password $password
$fileContentBytes = get-content -encoding byte $fileName
$fileContentEncoded = [System.Convert]::ToBase64String($fileContentBytes)
$fileContentEncoded | set-content ($fileName + ".b64")
TLS/SSL 인증서가 생성되고 Base64 인코딩 문자열로 변환되면 기본값 TLS/SSL 인증서 구성에 대한 Azure Resource Manager 템플릿 예제를 사용할 수 있습니다.
azuredeploy.parameters.json 파일의 매개 변수는 다음과 같습니다.
- appServiceEnvironmentName: 구성하는 ILB ASE의 이름입니다.
- existingAseLocation: ILB ASE가 배포된 Azure 지역을 포함하는 텍스트 문자열입니다. 예를 들어 "미국 중남부"입니다.
- pfxBlobString: .pfx 파일의 Base64 인코딩 문자열 표현입니다. 앞서 표시된 코드 조각을 사용하여 "exportedcert.pfx.b64"에 포함된 문자열을 복사한 후 pfxBlobString 특성의 값으로 붙여 넣습니다.
- password: .pfx 파일을 보호하는 데 사용되는 암호입니다.
- certificateThumbprint: 인증서의 지문입니다. PowerShell에서 이 값을 검색하는 경우(예: 이전 코드 조각의 $certThumbprint) 값을 있는 그대로 사용할 수 있습니다. 그러나 Windows 인증서 대화 상자의 값을 복사하는 경우 불필요한 공백을 제거해야 합니다. certificateThumbprint 는 AF3143EB61D43F6727842115BB7F17BBCECAECAE와 같이 나타납니다.
- certificateName: 인증서를 식별하는 데 사용되는 직접 선택한 친숙한 문자열 식별자입니다. 이 이름은 TLS/SSL 인증서를 나타내는 Microsoft.Web/certificates 엔터티에 대한 고유한 Azure Resource Manager 식별자의 일부로 사용됩니다. 이름은 다음 접미사 _yourASENameHere_InternalLoadBalancingASE와 함께 종료해야 합니다. 이 접미사는 포털에서 인증서가 ILB 지원 ASE 보안에 사용되는 표시기로 사용됩니다.
azuredeploy.parameters.json 을 축약한 예는 다음과 같습니다.
{
"$schema": "https://schema.management.azure.com/schemas/2015-01-01/deploymentParameters.json",
"contentVersion": "1.0.0.0",
"parameters": {
"appServiceEnvironmentName": {
"value": "yourASENameHere"
},
"existingAseLocation": {
"value": "East US 2"
},
"pfxBlobString": {
"value": "MIIKcAIBAz...snip...snip...pkCAgfQ"
},
"password": {
"value": "PASSWORDGOESHERE"
},
"certificateThumbprint": {
"value": "AF3143EB61D43F6727842115BB7F17BBCECAECAE"
},
"certificateName": {
"value": "DefaultCertificateFor_yourASENameHere_InternalLoadBalancingASE"
}
}
}
azuredeploy.parameters.json 파일이 채워지면 다음 PowerShell 코드 조각을 사용하여 기본 TLS/SSL 인증서를 구성할 수 있습니다. 머신에서 Azure Resource Manager 템플릿 파일이 있는 위치와 일치하도록 파일 경로를 변경합니다. 또한 Azure Resource Manager 배포 이름 및 리소스 그룹 이름에 대해 고유한 값을 제공해야 합니다.
$templatePath="PATH\azuredeploy.json"
$parameterPath="PATH\azuredeploy.parameters.json"
New-AzResourceGroupDeployment -Name "CHANGEME" -ResourceGroupName "YOUR-RG-NAME-HERE" -TemplateFile $templatePath -TemplateParameterFile $parameterPath
Azure Resource Manager 템플릿이 제출된 후에 변경 내용을 적용하는 데 ASE 프런트 엔드당 대략 40분이 소요됩니다. 예를 들어 두 개의 프런트 엔드를 사용하는 기본값 크기의 ASE의 경우 템플릿을 완료하는 데 약 1시간 20분이 소요됩니다. 템플릿이 실행되는 동안에는 ASE 크기를 조정할 수 없습니다.
템플릿이 완료되면 ILB ASE의 앱에 HTTPS를 통해 액세스할 수 있으며 기본 TLS/SSL 인증서를 사용하여 연결이 보호됩니다. 기본 TLS/SSL 인증서는 애플리케이션 이름 및 기본 호스트 이름 조합을 사용하여 ILB ASE의 앱 주소를 지정할 때 사용됩니다. 예를 들어 https://mycustomapp.internal.contoso.com
에서는 *.internal-contoso.com에 기본 TLS/SSL 인증서를 사용합니다.
그러나 공용 다중 테넌트 서비스에서 실행 중인 앱의 경우와 마찬가지로, 개발자는 개별 앱에 대한 사용자 지정 호스트 이름을 구성한 다음 개별 앱에 대해 고유한 SNI TLS/SSL 인증서 바인딩을 구성할 수 있습니다.
시작하기
App Service Environment를 시작하려면 App Service Environment 소개를 참조하세요.
참고 항목
Azure 계정을 등록하기 전에 Azure App Service를 시작하려면 App Service 체험으로 이동합니다. 여기서 App Service에 단기 시작 Web Apps를 즉시 만들 수 있습니다. 신용 카드가 필요하지 않으며 약정이 없습니다.