Share via


Azure Resource Manager 템플릿을 사용하여 ILB ASEv1을 만드는 방법

Important

이 문서는 App Service Environment v1에 관한 것입니다. App Service Environment v1은 2024년 8월 31일에 사용 중지됩니다. 사용하기 더 쉽고 더 강력한 인프라에서 실행되는 새로운 버전의 App Service Environment가 있습니다. 새 버전에 대한 자세한 내용은 App Service Environment 소개를 참조하세요. 현재 App Service Environment v1을 사용 중인 경우 이 문서의 단계에 따라 새 버전으로 마이그레이션하세요.

2024년 1월 29일부터 ARM/Bicep 템플릿, Azure Portal, Azure CLI 또는 REST API를 포함하여 사용 가능한 방법을 사용하여 더 이상 새로운 App Service Environment v1 리소스를 만들 수 없습니다. 리소스 삭제 및 데이터 손실을 방지하려면 2024년 8월 31일 마이그레이션에 App Service Environment v3으로 마이그레이션해야 합니다.

개요

App Service Environment는 공용 VIP 대신 가상 네트워크 내부 주소를 사용하여 만들 수 있습니다. 이 내부 주소는 ILB(내부 부하 분산 장치)라는 Azure 구성 요소에서 제공됩니다. Azure Portal을 사용하여 ILB ASE를 만들 수 있습니다. Azure Resource Manager 템플릿을 통해 자동화를 사용하여 만들 수도 있습니다. 이 문서에서는 Azure Resource Manager 템플릿을 사용하여 ILB ASE를 만드는 데 필요한 단계 및 구문을 안내합니다.

ILB ASE 만들기를 자동화하는 데는 다음 세 가지 단계가 있습니다.

  1. 먼저 공용 VIP 대신 내부 부하 분산 장치 주소를 사용하여 가상 네트워크에 기본 ASE가 생성됩니다. 이 단계의 일부로 루트 do기본 이름이 ILB ASE에 할당됩니다.
  2. ILB ASE가 만들어지면 TLS/SSL 인증서가 업로드됩니다.
  3. 업로드된 TLS/SSL 인증서는 ILB ASE에 "기본" TLS/SSL 인증서로 명시적으로 할당됩니다. 이 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 앱 Service의 공용 변형에서 모든 웹앱에 대한 기본 루트 do기본 azurewebsites.net. 그러나 ILB ASE는 고객의 가상 네트워크 내부이므로 공용 서비스의 기본 루트 do기본 사용하는 것은 의미가 없습니다. 대신, ILB ASE에는 회사의 내부 가상 네트워크 내에서 사용하기 적합한 기본 루트 도메인이 있어야 합니다. 예를 들어 가상 Contoso Corporation은 Contoso의 가상 네트워크 내에서만 확인할 수 있고 액세스할 수 있도록 하는 앱에 대해 기본 루트 do기본 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-do기본-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: 인증서를 ID로 지정하는 데 사용되는 고유한 선택 항목의 친숙한 문자열 식별자입니다. 이름은 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를 즉시 만들 수 있습니다. 신용 카드가 필요하지 않으며 약정이 없습니다.