Activer le pare-feu d’applications web avec Azure PowerShell
Vous pouvez limiter le trafic sur une passerelle d’application à l’aide d’un pare-feu d’applications web (WAF). Le WAF utilise des règles OWASP pour protéger votre application. Ces règles incluent la protection contre les attaques telles que l’injection de code SQL, les attaques de script entre sites et les détournements de session.
Dans cet article, vous apprendrez comment :
- Configurer le réseau
- Créer une passerelle d’application avec WAF activé
- Créer un groupe de machines virtuelles identiques
- Créer un compte de stockage et configurer des diagnostics
Si vous préférez, vous pouvez terminer cet article à l’aide du Portail Azure ou d’Azure CLI.
Si vous n’avez pas d’abonnement Azure, créez un compte gratuit avant de commencer.
Notes
Nous vous recommandons d’utiliser le module Azure Az PowerShell pour interagir avec Azure. Pour bien démarrer, consultez Installer Azure PowerShell. Pour savoir comment migrer vers le module Az PowerShell, consultez Migrer Azure PowerShell depuis AzureRM vers Az.
Azure Cloud Shell
Azure héberge Azure Cloud Shell, un environnement d’interpréteur de commandes interactif que vous pouvez utiliser dans votre navigateur. Vous pouvez utiliser Bash ou PowerShell avec Cloud Shell pour utiliser les services Azure. Vous pouvez utiliser les commandes préinstallées Cloud Shell pour exécuter le code de cet article sans avoir à installer quoi que ce soit dans votre environnement local.
Pour démarrer Azure Cloud Shell :
Option | Exemple/Lien |
---|---|
Sélectionnez Essayer dans le coin supérieur droite d’un bloc de codes ou de commandes. La sélection de Essayer ne copie pas automatiquement le code ni la commande dans Cloud Shell. | |
Accédez à https://shell.azure.com ou sélectionnez le bouton Lancer Cloud Shell pour ouvrir Cloud Shell dans votre navigateur. | |
Sélectionnez le bouton Cloud Shell dans la barre de menus en haut à droite du portail Azure. |
Pour utiliser Azure Cloud Shell :
Démarrez Cloud Shell.
Sélectionnez le bouton Copier sur un bloc de codes (ou un bloc de commandes) pour copier le code ou la commande.
Collez le code ou la commande dans la session Cloud Shell en sélectionnant Ctrl+Maj+V sur Windows et Linux ou en sélectionnant Cmd+Maj+V sur macOS.
Sélectionnez Entrer pour exécuter le code ou la commande.
Si vous choisissez d’installer et d’utiliser PowerShell en local, vous devez exécuter le module Azure PowerShell version 1.0.0 ou ultérieure pour les besoins de cet article. Exécutez Get-Module -ListAvailable Az
pour trouver la version. Si vous devez effectuer une mise à niveau, consultez Installer le module Azure PowerShell. Si vous exécutez PowerShell en local, vous devez également exécuter Login-AzAccount
pour créer une connexion avec Azure.
Créer un groupe de ressources
Un groupe de ressources est un conteneur logique dans lequel les ressources Azure sont déployées et gérées. Créez un groupe de ressources Azure à l’aide de New-AzResourceGroup.
$location = "eastus"
$rgname = New-AzResourceGroup -Name myResourceGroupAG -Location $location
Créer des ressources réseau
Créez les configurations du sous-réseau nommé myBackendSubnet et myAGSubnet en utilisant la cmdlet New-AzVirtualNetworkSubnetConfig. Créez le réseau virtuel nommé myVNet à l’aide de New-AzVirtualNetwork avec les configurations de sous-réseau. Enfin, créez l’adresse IP publique nommée myAGPublicIPAddress à l’aide de New-AzPublicIpAddress. Ces ressources sont utilisées pour fournir la connectivité réseau à la passerelle d’application et à ses ressources associées.
$backendSubnetConfig = New-AzVirtualNetworkSubnetConfig `
-Name myBackendSubnet `
-AddressPrefix 10.0.1.0/24
$agSubnetConfig = New-AzVirtualNetworkSubnetConfig `
-Name myAGSubnet `
-AddressPrefix 10.0.2.0/24
$vnet = New-AzVirtualNetwork `
-ResourceGroupName myResourceGroupAG `
-Location eastus `
-Name myVNet `
-AddressPrefix 10.0.0.0/16 `
-Subnet $backendSubnetConfig, $agSubnetConfig
$pip = New-AzPublicIpAddress `
-ResourceGroupName myResourceGroupAG `
-Location eastus `
-Name myAGPublicIPAddress `
-AllocationMethod Static `
-Sku Standard
Créer une passerelle Application Gateway
Dans cette section, vous créez des ressources qui prennent en charge la passerelle d’application, puis vous la créez ainsi qu’un WAF. Les ressources que vous créez sont les suivantes :
- Configurations IP et port frontend : associe le sous-réseau que vous avez créé précédemment pour la passerelle d’application et assigne un port à utiliser pour y accéder.
- Pool par défaut : toutes les passerelles d’application doivent avoir au moins un pool principal de serveurs.
- Écouteur et règle par défaut : l’écouteur par défaut écoute le trafic sur le port assigné et la règle par défaut envoie le trafic au pool par défaut.
Créer les configurations IP et le port frontal
Associez myAGSubnet créé précédemment à la passerelle d’application à l’aide de New-AzApplicationGatewayIPConfiguration. Affectez myAGPublicIPAddress à la passerelle d’application à l’aide de New-AzApplicationGatewayFrontendIPConfig.
$vnet = Get-AzVirtualNetwork `
-ResourceGroupName myResourceGroupAG `
-Name myVNet
$subnet=$vnet.Subnets[1]
$gipconfig = New-AzApplicationGatewayIPConfiguration `
-Name myAGIPConfig `
-Subnet $subnet
$fipconfig = New-AzApplicationGatewayFrontendIPConfig `
-Name myAGFrontendIPConfig `
-PublicIPAddress $pip
$frontendport = New-AzApplicationGatewayFrontendPort `
-Name myFrontendPort `
-Port 80
Créer le pool principal et les paramètres
Créez le pool back-end nommé appGatewayBackendPool pour la passerelle d’application à l’aide de New-AzApplicationGatewayBackendAddressPool. Configurez les paramètres pour les pools d’adresses back-end à l’aide de New-AzApplicationGatewayBackendHttpSettings.
$defaultPool = New-AzApplicationGatewayBackendAddressPool `
-Name appGatewayBackendPool
$poolSettings = New-AzApplicationGatewayBackendHttpSettings `
-Name myPoolSettings `
-Port 80 `
-Protocol Http `
-CookieBasedAffinity Enabled `
-RequestTimeout 120
Créer l’écouteur et la règle par défaut
Un écouteur est requis pour permettre à la passerelle d’application d’acheminer le trafic de manière appropriée vers les pools d’adresses principaux. Dans cet exemple, vous créez un écouteur de base qui écoute le trafic vers l’URL racine.
Créez un écouteur nommé mydefaultListener à l’aide de New-AzApplicationGatewayHttpListener avec la configuration front-end et le port front-end que vous avez créés précédemment. Une règle est requise pour que l’écouteur sache quel pool principal utiliser pour le trafic entrant. Créez une règle de base nommée rule1 à l’aide de New-AzApplicationGatewayRequestRoutingRule.
$defaultlistener = New-AzApplicationGatewayHttpListener `
-Name mydefaultListener `
-Protocol Http `
-FrontendIPConfiguration $fipconfig `
-FrontendPort $frontendport
$frontendRule = New-AzApplicationGatewayRequestRoutingRule `
-Name rule1 `
-RuleType Basic `
-Priority 1000 `
-HttpListener $defaultlistener `
-BackendAddressPool $defaultPool `
-BackendHttpSettings $poolSettings
Créer la passerelle d’application avec le WAF
Maintenant que vous avez créé les ressources nécessaires pour la prise en charge, spécifiez les paramètres de la passerelle d’application à l’aide de New-AzApplicationGatewaySku. Spécifiez la stratégie de pare-feu à l’aide de New-AzApplicationGatewayFirewallPolicy. Ensuite, créez la passerelle d’application nommée myAppGateway à l’aide de New-AzApplicationGateway.
$sku = New-AzApplicationGatewaySku `
-Name WAF_v2 `
-Tier WAF_v2 `
-Capacity 2
$policySetting = New-AzApplicationGatewayFirewallPolicySetting `
-Mode Prevention -State Enabled `
-MaxRequestBodySizeInKb 100 -MaxFileUploadInMb 256
$wafPolicy = New-AzApplicationGatewayFirewallPolicy -Name wafpolicyNew -ResourceGroup myResourceGroupAG `
-Location $location -PolicySetting $PolicySetting
$appgw = New-AzApplicationGateway `
-Name myAppGateway `
-ResourceGroupName myResourceGroupAG `
-Location eastus `
-BackendAddressPools $defaultPool `
-BackendHttpSettingsCollection $poolSettings `
-FrontendIpConfigurations $fipconfig `
-GatewayIpConfigurations $gipconfig `
-FrontendPorts $frontendport `
-HttpListeners $defaultlistener `
-RequestRoutingRules $frontendRule `
-Sku $sku `
-FirewallPolicy $wafPolicy
Créer un groupe de machines virtuelles identiques
Dans cet exemple, vous créez un groupe de machines virtuelles identiques pour fournir des serveurs pour le pool principal dans la passerelle d’application. Vous assignez le groupe identique au pool principal lorsque vous configurez les paramètres IP.
Remplacez <username> et <password> par vos valeurs avant d’exécuter ce script.
$vnet = Get-AzVirtualNetwork `
-ResourceGroupName myResourceGroupAG `
-Name myVNet
$appgw = Get-AzApplicationGateway `
-ResourceGroupName myResourceGroupAG `
-Name myAppGateway
$backendPool = Get-AzApplicationGatewayBackendAddressPool `
-Name appGatewayBackendPool `
-ApplicationGateway $appgw
$ipConfig = New-AzVmssIpConfig `
-Name myVmssIPConfig `
-SubnetId $vnet.Subnets[0].Id `
-ApplicationGatewayBackendAddressPoolsId $backendPool.Id
$vmssConfig = New-AzVmssConfig `
-Location eastus `
-SkuCapacity 2 `
-SkuName Standard_DS2 `
-UpgradePolicyMode Automatic
Set-AzVmssStorageProfile $vmssConfig `
-ImageReferencePublisher MicrosoftWindowsServer `
-ImageReferenceOffer WindowsServer `
-ImageReferenceSku 2016-Datacenter `
-ImageReferenceVersion latest `
-OsDiskCreateOption FromImage
Set-AzVmssOsProfile $vmssConfig `
-AdminUsername <username> `
-AdminPassword "<password>" `
-ComputerNamePrefix myvmss
Add-AzVmssNetworkInterfaceConfiguration `
-VirtualMachineScaleSet $vmssConfig `
-Name myVmssNetConfig `
-Primary $true `
-IPConfiguration $ipConfig
New-AzVmss `
-ResourceGroupName myResourceGroupAG `
-Name myvmss `
-VirtualMachineScaleSet $vmssConfig
Installer IIS
$publicSettings = @{ "fileUris" = (,"https://raw.githubusercontent.com/Azure/azure-docs-powershell-samples/master/application-gateway/iis/appgatewayurl.ps1");
"commandToExecute" = "powershell -ExecutionPolicy Unrestricted -File appgatewayurl.ps1" }
$vmss = Get-AzVmss -ResourceGroupName myResourceGroupAG -VMScaleSetName myvmss
Add-AzVmssExtension -VirtualMachineScaleSet $vmss `
-Name "customScript" `
-Publisher "Microsoft.Compute" `
-Type "CustomScriptExtension" `
-TypeHandlerVersion 1.8 `
-Setting $publicSettings
Update-AzVmss `
-ResourceGroupName myResourceGroupAG `
-Name myvmss `
-VirtualMachineScaleSet $vmss
Créer un compte de stockage et configurer des diagnostics
Dans cet article, la passerelle d’application utilise un compte de stockage pour stocker des données à des fins de détection et de prévention. Vous pouvez également utiliser les journaux d’activité Azure Monitor ou Event Hub pour enregistrer des données.
Créer le compte de stockage
Créez un compte de stockage nommé myagstore1 à l’aide de New-AzStorageAccount.
$storageAccount = New-AzStorageAccount `
-ResourceGroupName myResourceGroupAG `
-Name myagstore1 `
-Location eastus `
-SkuName "Standard_LRS"
Configuration de la collecte des diagnostics
Configurez des diagnostics pour enregistrer des données dans les journaux ApplicationGatewayAccessLog, ApplicationGatewayPerformanceLog et ApplicationGatewayFirewallLog à l’aide de Set-AzDiagnosticSetting.
$appgw = Get-AzApplicationGateway `
-ResourceGroupName myResourceGroupAG `
-Name myAppGateway
$store = Get-AzStorageAccount `
-ResourceGroupName myResourceGroupAG `
-Name myagstore1
Set-AzDiagnosticSetting `
-ResourceId $appgw.Id `
-StorageAccountId $store.Id `
-Category ApplicationGatewayAccessLog, ApplicationGatewayPerformanceLog, ApplicationGatewayFirewallLog `
-Enabled $true `
-RetentionEnabled $true `
-RetentionInDays 30
Tester la passerelle d’application
Vous pouvez utiliser Get-AzPublicIPAddress pour obtenir l’adresse IP publique de la passerelle d’application. Copiez l’adresse IP publique, puis collez-la dans la barre d’adresses de votre navigateur.
Get-AzPublicIPAddress -ResourceGroupName myResourceGroupAG -Name myAGPublicIPAddress
Nettoyer les ressources
Quand vous n’en avez plus besoin, supprimez le groupe de ressources, la passerelle d’application et toutes les ressources associées à l’aide de Remove-AzResourceGroup.
Remove-AzResourceGroup -Name myResourceGroupAG