Skapa en ASE med hjälp av en Azure Resource Manager-mall

Översikt

Anteckning

Den här artikeln handlar om App Service Environment v2 och App Service Environment v3 som används med isolerade App Service-planer

Azure App Service-miljöer (ASE) kan skapas med en internettillgänglig slutpunkt eller en slutpunkt på en intern adress i ett virtuellt Azure-nätverk. När slutpunkten skapas med en intern slutpunkt tillhandahålls den av en Azure-komponent som kallas intern lastbalanserare (ILB). ASE på en intern IP-adress kallas för en ILB ASE. ASE med en offentlig slutpunkt kallas extern ASE.

En ASE kan skapas med hjälp av Azure-portalen eller en Azure Resource Manager-mall. Den här artikeln beskriver de steg och syntax du behöver för att skapa en extern ASE eller ILB ASE med Resource Manager-mallar. Information om hur du skapar en ASEv2 i Azure-portalen finns i Skapa en extern ASE eller Skapa en ILB ASE. Information om hur du skapar en ASEv3 i Azure-portalen finns i Skapa ASEv3.

När du skapar en ASE i Azure-portalen kan du skapa ditt virtuella nätverk samtidigt eller välja ett befintligt virtuellt nätverk att distribuera till.

När du skapar en ASE från en mall måste du börja med:

  • Ett virtuellt Azure-nätverk.
  • Ett undernät i det virtuella nätverket. Vi rekommenderar en ASE-undernätsstorlek på /24 med 256 adresser för framtida tillväxt- och skalningsbehov. När ASE har skapats kan du inte ändra storleken.
  • När du skapar en ASE i ett befintligt virtuellt nätverk och undernät krävs det befintliga resursgruppens namn, namn på virtuellt nätverk och undernätsnamn.
  • Den prenumeration som du vill distribuera till.
  • Den plats som du vill distribuera till.

Följ riktlinjerna i avsnitten nedan för att automatisera skapandet av ASE. Om du skapar en ILB ASEv2 med anpassat dnsSuffix (till exempel internal-contoso.com), finns det några fler saker att göra.

  1. När din ILB ASE med anpassat dnsSuffix har skapats ska ett TLS/SSL-certifikat som matchar din ILB ASE-domän laddas upp.

  2. Det uppladdade TLS/SSL-certifikatet tilldelas till ILB ASE som sitt "standardcertifikat" TLS/SSL. Det här certifikatet används för TLS/SSL-trafik till appar på ILB ASE när de använder den vanliga rotdomänen som har tilldelats TILL ASE (till exempel https://someapp.internal-contoso.com).

Skapa ASE

En Resource Manager-mall som skapar en ASE och dess associerade parameterfil finns på GitHub för ASEv3 och ASEv2.

Om du vill skapa en ASE använder du dessa Exempel på Resource Manager-mallen ASEv3 eller ASEv2 . De tillgodoser det användningsfallet. De flesta parametrarna i filen azuredeploy.parameters.json är gemensamma för skapandet av ILB ASE:er och externa ASE:er. I följande lista visas parametrar med särskild anteckning, eller som är unika, när du skapar en ILB ASE med ett befintligt undernät.

ASEv3-parametrar

  • aseName: Krävs. Den här parametern definierar ett unikt ASE-namn.
  • internalLoadBalancingMode: Krävs. I de flesta fall anger du detta till 3, vilket innebär både HTTP/HTTPS-trafik på portarna 80/443. Om den här egenskapen är inställd på 0 förblir HTTP/HTTPS-trafiken på den offentliga VIP:en.
  • zoneRedundant: Krävs. I de flesta fall anger du värdet false, vilket innebär att ASE inte distribueras till tillgänglighetszoner (AZ). Zonindelade ASE:er kan distribueras i vissa regioner. Du kan referera till detta.
  • dedicatedHostCount: Krävs. I de flesta fall anger du värdet 0, vilket innebär att ASE distribueras som vanligt utan att dedikerade värdar distribueras.
  • useExistingVnetandSubnet: Krävs. Ange till true om du använder ett befintligt virtuellt nätverk och undernät.
  • vNetResourceGroupName: Krävs om du använder ett befintligt virtuellt nätverk och undernät. Den här parametern definierar resursgruppsnamnet för det befintliga virtuella nätverket och undernätet där ASE ska finnas.
  • virtualNetworkName: Krävs om du använder ett befintligt virtuellt nätverk och undernät. Den här parametern definierar namnet på det virtuella nätverket för det befintliga virtuella nätverket och undernätet där ASE kommer att finnas.
  • subnetName: Krävs om du använder ett befintligt virtuellt nätverk och undernät. Den här parametern definierar undernätsnamnet för det befintliga virtuella nätverket och undernätet där ASE kommer att finnas.
  • createPrivateDNS: Ange till sant om du vill skapa en privat DNS-zon efter att ASEv3 har skapats. När den här parametern anges till true för en ILB ASE skapas en privat DNS-zon som ASE-namn med appserviceenvironment.net DNS-suffix.

ASEv2-parametrar

  • aseName: Den här parametern definierar ett unikt ASE-namn.
  • plats: Den här parametern definierar platsen för App Service Environment.
  • existingVirtualNetworkName: Den här parametern definierar det virtuella nätverksnamnet för det befintliga virtuella nätverket och undernätet där ASE ska finnas.
  • existingVirtualNetworkResourceGroup: parametern definierar resursgruppsnamnet för det befintliga virtuella nätverket och undernätet där ASE ska finnas.
  • subnetName: Den här parametern definierar undernätsnamnet för det befintliga virtuella nätverket och undernätet där ASE kommer att finnas.
  • internalLoadBalancingMode: I de flesta fall anger du detta till 3, vilket innebär att både HTTP/HTTPS-trafik på portarna 80/443 och kontroll-/datakanalportarna som lyssnar på FTP-tjänsten i ASE kommer att bindas till en intern ILB-allokerad intern adress för virtuellt nätverk. Om den här egenskapen är inställd på 2 är det bara FTP-tjänstrelaterade portar (både kontroll- och datakanaler) som är bundna till en ILB-adress. Om den här egenskapen är inställd på 0 förblir HTTP/HTTPS-trafiken på den offentliga VIP:en.
  • dnsSuffix: Den här parametern definierar standardrotdomänen som är tilldelad till ASE. I den offentliga varianten av Azure App Service är standardrotdomänen för alla webbappar azurewebsites.net. Eftersom en ILB ASE är intern för en kunds virtuella nätverk är det inte meningsfullt att använda den offentliga tjänstens standardrotdomän. I stället bör en ILB ASE ha en standardrotdomän som är lämplig för användning i ett företags interna virtuella nätverk. Contoso Corporation kan till exempel använda en standardrotdomän för internal-contoso.com för appar som är avsedda att matchas och endast är tillgängliga i Contosos virtuella nätverk.
  • ipSslAddressCount: Den här parametern använder automatiskt värdet 0 i filen azuredeploy.json eftersom ILB-ASE:er bara har en enda ILB-adress. Det finns inga explicita IP-SSL-adresser för en ILB ASE. Ip-SSL-adresspoolen för en ILB ASE måste därför vara inställd på noll. Annars uppstår ett etableringsfel.

När filen azuredeploy.parameters.json har fyllts i skapar du ASE med hjälp av PowerShell-kodfragmentet. Ändra filsökvägarna så att de matchar resource manager-mallfilplatserna på datorn. Kom ihåg att ange egna värden för Resource Manager-distributionsnamnet och resursgruppens namn:

$templatePath="PATH\azuredeploy.json"
$parameterPath="PATH\azuredeploy.parameters.json"

New-AzResourceGroupDeployment -Name "CHANGEME" -ResourceGroupName "YOUR-RG-NAME-HERE" -TemplateFile $templatePath -TemplateParameterFile $parameterPath

Det tar ungefär två timmar för ASE-filen att skapas. Sedan visas ASE i portalen i listan över ASE:er för prenumerationen som utlöste distributionen.

Ladda upp och konfigurera TLS/SSL-standardcertifikatet

Ett TLS/SSL-certifikat måste associeras med ASE som det "standard"-TLS/SSL-certifikat som används för att upprätta TLS-anslutningar till appar. Om ASE:s standard-DNS-suffix är internal-contoso.com kräver en anslutning till https://some-random-app.internal-contoso.com ett TLS/SSL-certifikat som är giltigt för *.internal-contoso.com.

Skaffa ett giltigt TLS/SSL-certifikat genom att använda interna certifikatutfärdare, köpa ett certifikat från en extern utfärdare eller använda ett självsignerat certifikat. Oavsett källan för TLS/SSL-certifikatet måste följande certifikatattribut konfigureras korrekt:

  • Ämne: Det här attributet måste anges till *.your-root-domain-here.com.
  • Alternativt namn för certifikatmottagare: Det här attributet måste innehålla både *.your-root-domain-here.com och *.scm.your-root-domain-here.com. TLS-anslutningar till SCM/Kudu-webbplatsen som är associerad med varje app använder en adress i formuläret your-app-name.scm.your-root-domain-here.com.

Med ett giltigt TLS/SSL-certifikat behövs ytterligare två förberedande steg. Konvertera/spara TLS/SSL-certifikatet som en .pfx-fil. Kom ihåg att .pfx-filen måste innehålla alla mellanliggande certifikat och rotcertifikat. Skydda den med ett lösenord.

.pfx-filen måste konverteras till en base64-sträng eftersom TLS/SSL-certifikatet laddas upp med hjälp av en Resource Manager-mall. Eftersom Resource Manager-mallar är textfiler måste .pfx-filen konverteras till en base64-sträng. På så sätt kan den inkluderas som en parameter för mallen.

Använd följande PowerShell-kodfragment för att:

  • Generera ett självsignerat certifikat.
  • Exportera certifikatet som en .pfx-fil.
  • Konvertera .pfx-filen till en base64-kodad sträng.
  • Spara den base64-kodade strängen i en separat fil.

Den här PowerShell-koden för base64-kodning har anpassats från PowerShell-skriptbloggen:

$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")

När TLS/SSL-certifikatet har genererats och konverterats till en base64-kodad sträng använder du resource manager-exempelmallen Konfigurera standard-SSL-certifikatet på GitHub.

Parametrarna i filen azuredeploy.parameters.json visas här:

  • appServiceEnvironmentName: Namnet på den ILB ASE som konfigureras.
  • existingAseLocation: Textsträng som innehåller Den Azure-region där ILB ASE distribuerades. Exempel: "USA, södra centrala".
  • pfxBlobString: Den based64-kodade strängrepresentationen av .pfx-filen. Använd kodfragmentet som visades tidigare och kopiera strängen som finns i "exportedcert.pfx.b64". Klistra in den som värdet för pfxBlobString-attributet .
  • lösenord: Lösenordet som används för att skydda .pfx-filen.
  • certificateThumbprint: Certifikatets tumavtryck. Om du hämtar det här värdet från PowerShell (till exempel $certificate. Tumavtryck från det tidigare kodfragmentet) kan du använda värdet som det är. Om du kopierar värdet från dialogrutan Windows-certifikat bör du komma ihåg att ta bort de överflödiga blankstegen. CertificateThumbprint bör se ut ungefär så här: AF3143EB61D43F6727842115BB7F17BBCECAECAE.
  • certificateName: En egen egen strängidentifierare som används för att identifiera certifikatet. Namnet används som en del av den unika Resource Manager-identifieraren för entiteten Microsoft.Web/certificates som representerar TLS/SSL-certifikatet. Namnet måste sluta med följande suffix: _yourASENameHere_InternalLoadBalancingASE. Azure-portalen använder det här suffixet som en indikator på att certifikatet används för att skydda en ILB-aktiverad ASE.

Ett förkortat exempel på azuredeploy.parameters.json visas här:

{
  "$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"
    }
  }
}

När filen azuredeploy.parameters.json har fyllts i konfigurerar du TLS/SSL-standardcertifikatet med hjälp av PowerShell-kodfragmentet. Ändra sökvägarna så att de matchar platsen där Resource Manager-mallfilerna finns på datorn. Kom ihåg att ange egna värden för Resource Manager-distributionsnamnet och resursgruppens namn:

$templatePath="PATH\azuredeploy.json"
$parameterPath="PATH\azuredeploy.parameters.json"

New-AzResourceGroupDeployment -Name "CHANGEME" -ResourceGroupName "YOUR-RG-NAME-HERE" -TemplateFile $templatePath -TemplateParameterFile $parameterPath

Det tar ungefär 40 minuter per ASE-klientdel att tillämpa ändringen. För en ASE i standardstorlek som använder två klientdelar tar mallen cirka en timme och 20 minuter att slutföra. När mallen körs kan ASE inte skalas.

När mallen är klar kan appar på ILB ASE nås via HTTPS. Anslutningarna skyddas med hjälp av standardcertifikatet för TLS/SSL. Standardcertifikatet för TLS/SSL används när appar på ILB ASE adresseras med hjälp av en kombination av programnamnet plus standardvärdnamnet. Använder till exempel https://mycustomapp.internal-contoso.com TLS/SSL-standardcertifikatet för *.internal-contoso.com.

Men precis som appar som körs på den offentliga multitenanttjänsten kan utvecklare konfigurera anpassade värdnamn för enskilda appar. De kan också konfigurera unika SNI TLS/SSL-certifikatbindningar för enskilda appar.