Een gelaagde beveiligingsarchitectuur implementeren met App Service-omgevingen

Belangrijk

Dit artikel gaat over App Service Environment v1. App Service Environment v1 wordt op 31 augustus 2024 buiten gebruik gesteld. Er is een nieuwe versie van App Service Environment die eenvoudiger te gebruiken is en wordt uitgevoerd op een krachtigere infrastructuur. Voor meer informatie over de nieuwe versie begint u met de inleiding tot de App Service-omgeving. Als u momenteel App Service Environment v1 gebruikt, volgt u de stappen in dit artikel om te migreren naar de nieuwe versie.

Vanaf 29 januari 2024 kunt u geen nieuwe App Service Environment v1-resources meer maken met behulp van een van de beschikbare methoden, waaronder ARM/Bicep-sjablonen, Azure Portal, Azure CLI of REST API. U moet vóór 31 augustus 2024 migreren naar App Service Environment v3 om te voorkomen dat resources worden verwijderd en gegevens verloren gaan.

Omdat App Service Environments een geïsoleerde runtime-omgeving bieden die is geïmplementeerd in een virtueel netwerk, kunnen ontwikkelaars een gelaagde beveiligingsarchitectuur maken die verschillende netwerktoegangsniveaus biedt voor elke fysieke toepassingslaag.

Een veelvoorkomende wens is om API-back-ends te verbergen voor algemene internettoegang en alleen API's toe te staan die worden aangeroepen door upstream-web-apps. Netwerkbeveiligingsgroepen (NSG's) kunnen worden gebruikt op subnetten met App Service Environments om openbare toegang tot API-toepassingen te beperken.

In het onderstaande diagram ziet u een voorbeeldarchitectuur met een webAPI-app die is geïmplementeerd in een App Service-omgeving. Drie afzonderlijke web-app-exemplaren, geïmplementeerd in drie afzonderlijke App Service-omgevingen, voeren back-end-aanroepen uit naar dezelfde WebAPI-app.

Conceptual Architecture

De groene plustekens geven aan dat de netwerkbeveiligingsgroep in het subnet met 'apiase' binnenkomende aanroepen van de upstream-web-apps en aanroepen vanaf zichzelf toestaat. Dezelfde netwerkbeveiligingsgroep weigert echter expliciet de toegang tot algemeen binnenkomend verkeer vanaf internet.

In de rest van dit artikel worden de stappen beschreven die nodig zijn voor het configureren van de netwerkbeveiligingsgroep in het subnet met 'apiase'.

Het netwerkgedrag bepalen

Als u wilt weten welke netwerkbeveiligingsregels nodig zijn, moet u bepalen welke netwerkclients de App Service Environment met de API-app mogen bereiken en welke clients worden geblokkeerd.

Omdat netwerkbeveiligingsgroepen (NSG's) worden toegepast op subnetten en App Service-omgevingen worden geïmplementeerd in subnetten, zijn de regels in een NSG van toepassing op alle apps die worden uitgevoerd in een App Service Environment. Wanneer u de voorbeeldarchitectuur voor dit artikel gebruikt, wordt, zodra een netwerkbeveiligingsgroep is toegepast op het subnet met 'apiase', alle apps die worden uitgevoerd in de App Service-omgeving 'apiase' beveiligd door dezelfde set beveiligingsregels.

  • Bepaal het uitgaande IP-adres van upstream-bellers: Wat is het IP-adres of de adressen van de upstream-bellers? Deze adressen moeten expliciet toegang krijgen in de NSG. Omdat aanroepen tussen App Service Environments worden beschouwd als 'internet'-aanroepen, moet het uitgaande IP-adres dat is toegewezen aan elk van de drie upstream App Service-omgevingen, toegang krijgen in de NSG voor het subnet 'apiase'. Zie het artikel Overzicht van netwerkarchitectuur voor meer informatie over het bepalen van het uitgaande IP-adres voor apps die worden uitgevoerd in een App Service-omgeving.
  • Moet de back-end-API-app zichzelf aanroepen? Een soms over het hoofd gezien en subtiel punt is het scenario waarin de back-endtoepassing zichzelf moet aanroepen. Als een back-end-API-toepassing in een App Service Environment zichzelf moet aanroepen, wordt deze ook behandeld als een internetaanroep. In de voorbeeldarchitectuur moet hiervoor ook toegang worden toegestaan vanuit het uitgaande IP-adres van de App Service Environment 'apiase'.

De netwerkbeveiligingsgroep instellen

Zodra de set uitgaande IP-adressen bekend is, bestaat de volgende stap uit het maken van een netwerkbeveiligingsgroep. Netwerkbeveiligingsgroepen kunnen worden gemaakt voor zowel op Resource Manager gebaseerde virtuele netwerken als klassieke virtuele netwerken. In de onderstaande voorbeelden ziet u hoe u een NSG maakt en configureert in een klassiek virtueel netwerk met behulp van PowerShell.

Voor de voorbeeldarchitectuur bevinden de omgevingen zich in VS - zuid-centraal, dus er wordt een lege NSG gemaakt in die regio:

New-AzureNetworkSecurityGroup -Name "RestrictBackendApi" -Location "South Central US" 
-Label "Only allow web frontend and loopback traffic"

Eerst wordt er een expliciete regel voor toestaan toegevoegd voor de Azure-beheerinfrastructuur, zoals vermeld in het artikel over inkomend verkeer voor App Service Environments.

#Open ports for access by Azure management infrastructure
Get-AzureNetworkSecurityGroup -Name "RestrictBackendApi" | Set-AzureNetworkSecurityRule -Name "ALLOW AzureMngmt" 
-Type Inbound -Priority 100 -Action Allow -SourceAddressPrefix 'INTERNET' -SourcePortRange '*' 
-DestinationAddressPrefix '*' -DestinationPortRange '454-455' -Protocol TCP

Vervolgens worden er twee regels toegevoegd om HTTP- en HTTPS-aanroepen toe te staan vanuit de eerste upstream App Service Environment ('fe1ase').

#Grant access to requests from the first upstream web front-end
Get-AzureNetworkSecurityGroup -Name "RestrictBackendApi" | Set-AzureNetworkSecurityRule -Name "ALLOW HTTP fe1ase" 
-Type Inbound -Priority 200 -Action Allow -SourceAddressPrefix '65.52.xx.xyz'  -SourcePortRange '*' 
-DestinationAddressPrefix '*' -DestinationPortRange '80' -Protocol TCP
Get-AzureNetworkSecurityGroup -Name "RestrictBackendApi" | Set-AzureNetworkSecurityRule -Name "ALLOW HTTPS fe1ase" 
-Type Inbound -Priority 300 -Action Allow -SourceAddressPrefix '65.52.xx.xyz'  -SourcePortRange '*' 
-DestinationAddressPrefix '*' -DestinationPortRange '443' -Protocol TCP

Spoel en herhaal deze voor de tweede en derde upstream App Service Environments ('fe2ase' en 'fe3ase').

#Grant access to requests from the second upstream web front-end
Get-AzureNetworkSecurityGroup -Name "RestrictBackendApi" | Set-AzureNetworkSecurityRule -Name "ALLOW HTTP fe2ase" 
-Type Inbound -Priority 400 -Action Allow -SourceAddressPrefix '191.238.xyz.abc'  -SourcePortRange '*' 
-DestinationAddressPrefix '*' -DestinationPortRange '80' -Protocol TCP
Get-AzureNetworkSecurityGroup -Name "RestrictBackendApi" | Set-AzureNetworkSecurityRule -Name "ALLOW HTTPS fe2ase" 
-Type Inbound -Priority 500 -Action Allow -SourceAddressPrefix '191.238.xyz.abc'  -SourcePortRange '*' 
-DestinationAddressPrefix '*' -DestinationPortRange '443' -Protocol TCP

#Grant access to requests from the third upstream web front-end
Get-AzureNetworkSecurityGroup -Name "RestrictBackendApi" | Set-AzureNetworkSecurityRule -Name "ALLOW HTTP fe3ase" 
-Type Inbound -Priority 600 -Action Allow -SourceAddressPrefix '23.98.abc.xyz'  -SourcePortRange '*' 
-DestinationAddressPrefix '*' -DestinationPortRange '80' -Protocol TCP
Get-AzureNetworkSecurityGroup -Name "RestrictBackendApi" | Set-AzureNetworkSecurityRule -Name "ALLOW HTTPS fe3ase" 
-Type Inbound -Priority 700 -Action Allow -SourceAddressPrefix '23.98.abc.xyz'  -SourcePortRange '*' 
-DestinationAddressPrefix '*' -DestinationPortRange '443' -Protocol TCP

Tot slot verleent u toegang tot het uitgaande IP-adres van de App Service Environment van de back-end-API, zodat deze weer in zichzelf kan worden aangeroepen.

#Allow apps on the apiase environment to call back into itself
Get-AzureNetworkSecurityGroup -Name "RestrictBackendApi" | Set-AzureNetworkSecurityRule -Name "ALLOW HTTP apiase" 
-Type Inbound -Priority 800 -Action Allow -SourceAddressPrefix '70.37.xyz.abc'  -SourcePortRange '*' 
-DestinationAddressPrefix '*' -DestinationPortRange '80' -Protocol TCP
Get-AzureNetworkSecurityGroup -Name "RestrictBackendApi" | Set-AzureNetworkSecurityRule -Name "ALLOW HTTPS apiase" 
-Type Inbound -Priority 900 -Action Allow -SourceAddressPrefix '70.37.xyz.abc'  -SourcePortRange '*' 
-DestinationAddressPrefix '*' -DestinationPortRange '443' -Protocol TCP

Er zijn geen andere netwerkbeveiligingsregels vereist, omdat elke NSG standaard een set standaardregels heeft waarmee binnenkomende toegang van internet wordt geblokkeerd.

Hieronder ziet u de volledige lijst met regels in de netwerkbeveiligingsgroep. Let op hoe de laatste regel, die is gemarkeerd, binnenkomende toegang blokkeert van alle bellers, behalve bellers die expliciet toegang hebben verleend.

NSG Configuration

De laatste stap is het toepassen van de NSG op het subnet dat de 'apiase' App Service Environment bevat.

#Apply the NSG to the backend API subnet
Get-AzureNetworkSecurityGroup -Name "RestrictBackendApi" | Set-AzureNetworkSecurityGroupToSubnet 
-VirtualNetworkName 'yourvnetnamehere' -SubnetName 'API-ASE-Subnet'

Nu de NSG is toegepast op het subnet, mogen alleen de drie upstream App Service-omgevingen en de App Service-omgeving die de API-back-end bevat, worden aangeroepen in de apiase-omgeving.

Informatie over netwerkbeveiligingsgroepen.

Informatie over uitgaande IP-adressen en App Service-omgevingen.

Netwerkpoorten die worden gebruikt door App Service Environments.

Notitie

Als u aan de slag wilt met Azure App Service voordat u zich aanmeldt voor een Azure-account, gaat u naar App Service uitproberen. Hier kunt u direct een tijdelijke web-app maken in App Service. U hebt geen creditcard nodig en u gaat geen verplichtingen aan.