Konfigurowanie zasad zapory aplikacji internetowej dla lokacji przy użyciu programu Azure PowerShell
Ustawienia zapory aplikacji internetowej (WAF) są zawarte w zasadach zapory aplikacji internetowej oraz w celu zmiany konfiguracji zapory aplikacji internetowej, która modyfikuje zasady zapory aplikacji internetowej.
Po skojarzeniu z usługą Application Gateway zasady i wszystkie ustawienia są odzwierciedlane globalnie. Dlatego jeśli masz pięć witryn za zaporą aplikacji internetowej, wszystkie pięć witryn jest chronionych przez te same zasady zapory aplikacji internetowej. Jest to doskonałe rozwiązanie, jeśli potrzebujesz tych samych ustawień zabezpieczeń dla każdej witryny. Można jednak również zastosować zasady zapory aplikacji internetowej do poszczególnych odbiorników w celu umożliwienia konfiguracji zapory aplikacji internetowej specyficznej dla lokacji.
Stosując zasady zapory aplikacji internetowej do odbiornika, można skonfigurować ustawienia zapory aplikacji internetowej dla poszczególnych witryn bez zmian wpływających na każdą witrynę. Najbardziej specyficzne zasady mają pierwszeństwo. Jeśli istnieją zasady globalne i zasady dla poszczególnych lokacji (zasady zapory aplikacji internetowej skojarzone z odbiornikiem), zasady dla poszczególnych lokacji zastępują globalne zasady zapory aplikacji internetowej dla tego odbiornika. Inne odbiorniki bez własnych zasad będą miały wpływ tylko na globalne zasady zapory aplikacji internetowej.
W tym artykule omówiono sposób wykonywania następujących zadań:
- Konfigurowanie sieci
- Tworzenie zasad zapory aplikacji internetowej
- Tworzenie bramy aplikacji z włączoną zaporą aplikacji internetowych
- Stosowanie zasad zapory aplikacji internetowej globalnie, dla poszczególnych witryn i identyfikatora URI
- Tworzenie zestawu skalowania maszyn wirtualnych
- Tworzenie konta magazynu i konfigurowanie diagnostyki
- Testowanie bramy aplikacji
Jeśli nie masz subskrypcji platformy Azure, przed rozpoczęciem utwórz bezpłatne konto.
Uwaga
Do interakcji z platformą Azure zalecamy używanie modułu Azure Az w programie PowerShell. Zobacz Instalowanie programu Azure PowerShell, aby rozpocząć. Aby dowiedzieć się, jak przeprowadzić migrację do modułu Az PowerShell, zobacz Migracja programu Azure PowerShell z modułu AzureRM do modułu Az.
Azure Cloud Shell
Na platforma Azure hostowane jest Azure Cloud Shell, interaktywne środowisko powłoki, z którego można korzystać w przeglądarce. Do pracy z usługami platformy Azure można używać programu Bash lub PowerShell w środowisku Cloud Shell. Aby uruchomić kod w tym artykule, możesz użyć wstępnie zainstalowanych poleceń usługi Cloud Shell bez konieczności instalowania niczego w środowisku lokalnym.
Aby uruchomić środowisko Azure Cloud Shell:
Opcja | Przykład/link |
---|---|
Wybierz pozycję Wypróbuj w prawym górnym rogu bloku kodu lub polecenia. Wybranie pozycji Wypróbuj nie powoduje automatycznego skopiowania kodu lub polecenia do usługi Cloud Shell. | |
Przejdź do witryny https://shell.azure.com lub wybierz przycisk Uruchom Cloud Shell, aby otworzyć środowisko Cloud Shell w przeglądarce. | |
Wybierz przycisk Cloud Shell na pasku menu w prawym górnym rogu witryny Azure Portal. |
Aby użyć usługi Azure Cloud Shell:
Uruchom usługę Cloud Shell.
Wybierz przycisk Kopiuj w bloku kodu (lub bloku poleceń), aby skopiować kod lub polecenie.
Wklej kod lub polecenie do sesji usługi Cloud Shell, wybierając Ctrl+Shift V w systemach Windows i Linux lub wybierając pozycję Cmd+Shift++V w systemie macOS.
Wybierz Enter, aby uruchomić kod lub polecenie.
Jeśli zdecydujesz się zainstalować program PowerShell i korzystać z niego lokalnie, ten artykuł wymaga modułu Azure PowerShell w wersji 1.0.0 lub nowszej. Uruchom polecenie Get-Module -ListAvailable Az
, aby dowiedzieć się, jaka wersja jest używana. Jeśli konieczne będzie uaktualnienie, zobacz Instalowanie modułu Azure PowerShell. Jeśli używasz programu PowerShell lokalnie, musisz też uruchomić polecenie Login-AzAccount
, aby utworzyć połączenie z platformą Azure.
Tworzenie grupy zasobów
Grupa zasobów to logiczny kontener przeznaczony do wdrażania zasobów platformy Azure i zarządzania nimi. Utwórz grupę zasobów platformy Azure przy użyciu polecenia New-AzResourceGroup.
$rgname = New-AzResourceGroup -Name myResourceGroupAG -Location eastus
Tworzenie zasobów sieciowych
Utwórz konfiguracje podsieci o nazwach myBackendSubnet i myAGSubnet przy użyciu polecenia New-AzVirtualNetworkSubnetConfig. Utwórz sieć wirtualną o nazwie myVNet przy użyciu polecenia New-AzVirtualNetwork z konfiguracjami podsieci. Na koniec utwórz publiczny adres IP o nazwie myAGPublicIPAddress przy użyciu polecenia New-AzPublicIpAddress. Te zasoby służą do zapewniania łączności sieciowej z bramą aplikacji i skojarzonymi z nią zasobami.
$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
Tworzenie bramy aplikacji
W tej sekcji utworzysz zasoby, które obsługują bramę aplikacji, a następnie utworzysz ją i zaporę aplikacji internetowej. Zasoby, które utworzysz, obejmują:
- Konfiguracje adresów IP i port frontonu — umożliwiają skojarzenie wcześniej utworzonej podsieci z bramą aplikacji i przypisanie portu, który ma być używany do uzyskiwania do niej dostępu.
- Domyślna pula — wszystkie bramy aplikacji muszą mieć co najmniej jedną pulę serwerów zaplecza.
- Odbiornik domyślny i reguła domyślna — odbiornik domyślny nasłuchuje ruchu na porcie, który został przypisany, a reguła domyślna wysyła ruch do puli domyślnej.
Tworzenie konfiguracji adresów IP i portu frontonu
Skojarz poprzednio utworzoną podsieć myAGSubnet z bramą aplikacji przy użyciu polecenia New-AzApplicationGatewayIPConfiguration. Przypisz element myAGPublicIPAddress do bramy aplikacji przy użyciu polecenia 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
$frontendport80 = New-AzApplicationGatewayFrontendPort `
-Name myFrontendPort `
-Port 80
$frontendport8080 = New-AzApplicationGatewayFrontendPort `
-Name myFrontendPort `
-Port 8080
Tworzenie puli zaplecza i ustawień
Utwórz pulę zaplecza o nazwie appGatewayBackendPool dla bramy aplikacji przy użyciu polecenia New-AzApplicationGatewayBackendAddressPool. Skonfiguruj ustawienia pul adresów zaplecza przy użyciu polecenia New-AzApplicationGatewayBackendHttpSettings.
$defaultPool = New-AzApplicationGatewayBackendAddressPool `
-Name appGatewayBackendPool
$poolSettings = New-AzApplicationGatewayBackendHttpSettings `
-Name myPoolSettings `
-Port 80 `
-Protocol Http `
-CookieBasedAffinity Enabled `
-RequestTimeout 120
Tworzenie dwóch zasad zapory aplikacji internetowej
Utwórz dwie zasady zapory aplikacji internetowej, jedną globalną i jedną dla poszczególnych witryn i dodaj reguły niestandardowe.
Zasady na lokację ograniczają limit przekazywania plików do 5 MB. Wszystko inne jest takie samo.
$variable = New-AzApplicationGatewayFirewallMatchVariable -VariableName RequestUri
$condition = New-AzApplicationGatewayFirewallCondition -MatchVariable $variable -Operator Contains -MatchValue "globalAllow"
$rule = New-AzApplicationGatewayFirewallCustomRule -Name globalAllow -Priority 5 -RuleType MatchRule -MatchCondition $condition -Action Allow
$variable1 = New-AzApplicationGatewayFirewallMatchVariable -VariableName RequestUri
$condition1 = New-AzApplicationGatewayFirewallCondition -MatchVariable $variable1 -Operator Contains -MatchValue "globalBlock"
$rule1 = New-AzApplicationGatewayFirewallCustomRule -Name globalBlock -Priority 10 -RuleType MatchRule -MatchCondition $condition1 -Action Block
$variable2 = New-AzApplicationGatewayFirewallMatchVariable -VariableName RequestUri
$condition2 = New-AzApplicationGatewayFirewallCondition -MatchVariable $variable2 -Operator Contains -MatchValue "siteAllow"
$rule2 = New-AzApplicationGatewayFirewallCustomRule -Name siteAllow -Priority 5 -RuleType MatchRule -MatchCondition $condition2 -Action Allow
$variable3 = New-AzApplicationGatewayFirewallMatchVariable -VariableName RequestUri
$condition3 = New-AzApplicationGatewayFirewallCondition -MatchVariable $variable3 -Operator Contains -MatchValue "siteBlock"
$rule3 = New-AzApplicationGatewayFirewallCustomRule -Name siteBlock -Priority 10 -RuleType MatchRule -MatchCondition $condition3 -Action Block
$variable4 = New-AzApplicationGatewayFirewallMatchVariable -VariableName RequestUri
$condition4 = New-AzApplicationGatewayFirewallCondition -MatchVariable $variable4 -Operator Contains -MatchValue "URIAllow"
$rule4 = New-AzApplicationGatewayFirewallCustomRule -Name URIAllow -Priority 5 -RuleType MatchRule -MatchCondition $condition4 -Action Allow
$variable5 = New-AzApplicationGatewayFirewallMatchVariable -VariableName RequestUri
$condition5 = New-AzApplicationGatewayFirewallCondition -MatchVariable $variable5 -Operator Contains -MatchValue "URIBlock"
$rule5 = New-AzApplicationGatewayFirewallCustomRule -Name URIBlock -Priority 10 -RuleType MatchRule -MatchCondition $condition5 -Action Block
$policySettingGlobal = New-AzApplicationGatewayFirewallPolicySetting `
-Mode Prevention `
-State Enabled `
-MaxRequestBodySizeInKb 100 `
-MaxFileUploadInMb 256
$wafPolicyGlobal = New-AzApplicationGatewayFirewallPolicy `
-Name wafpolicyGlobal `
-ResourceGroup myResourceGroupAG `
-Location eastus `
-PolicySetting $PolicySettingGlobal `
-CustomRule $rule, $rule1
$policySettingSite = New-AzApplicationGatewayFirewallPolicySetting `
-Mode Prevention `
-State Enabled `
-MaxRequestBodySizeInKb 100 `
-MaxFileUploadInMb 5
$wafPolicySite = New-AzApplicationGatewayFirewallPolicy `
-Name wafpolicySite `
-ResourceGroup myResourceGroupAG `
-Location eastus `
-PolicySetting $PolicySettingSite `
-CustomRule $rule2, $rule3
Tworzenie odbiornika domyślnego i reguły domyślnej
Odbiornik jest wymagany, aby brama aplikacji mogła właściwie kierować ruch do pul adresów zaplecza. W tym przykładzie utworzysz podstawowy odbiornik, który nasłuchuje ruchu pod głównym adresem URL.
Utwórz odbiornik o nazwie mydefaultListener przy użyciu polecenia New-AzApplicationGatewayHttpListener z wcześniej utworzoną konfiguracją frontonu i portem frontonu. Reguła jest wymagana, aby odbiornik wiedział, której puli zaplecza używać dla ruchu przychodzącego. Utwórz podstawową regułę o nazwie rule1 przy użyciu polecenia New-AzApplicationGatewayRequestRoutingRule.
$globalListener = New-AzApplicationGatewayHttpListener `
-Name mydefaultListener `
-Protocol Http `
-FrontendIPConfiguration $fipconfig `
-FrontendPort $frontendport80
$frontendRule = New-AzApplicationGatewayRequestRoutingRule `
-Name rule1 `
-RuleType Basic `
-HttpListener $globallistener `
-BackendAddressPool $defaultPool `
-BackendHttpSettings $poolSettings
$siteListener = New-AzApplicationGatewayHttpListener `
-Name mydefaultListener `
-Protocol Http `
-FrontendIPConfiguration $fipconfig `
-FrontendPort $frontendport8080 `
-FirewallPolicy $wafPolicySite
$frontendRuleSite = New-AzApplicationGatewayRequestRoutingRule `
-Name rule2 `
-RuleType Basic `
-HttpListener $siteListener `
-BackendAddressPool $defaultPool `
-BackendHttpSettings $poolSettings
Utwórz bramę aplikacji z zaporą aplikacji internetowych
Po utworzeniu niezbędnych zasobów pomocniczych określ parametry bramy aplikacji przy użyciu polecenia New-AzApplicationGatewaySku. Określ zasady zapory przy użyciu polecenia New-AzApplicationGatewayFirewallPolicy. Następnie utwórz bramę aplikacji o nazwie myAppGateway przy użyciu polecenia New-AzApplicationGateway.
$sku = New-AzApplicationGatewaySku `
-Name WAF_v2 `
-Tier WAF_v2 `
-Capacity 2
$appgw = New-AzApplicationGateway `
-Name myAppGateway `
-ResourceGroupName myResourceGroupAG `
-Location eastus `
-BackendAddressPools $defaultPool `
-BackendHttpSettingsCollection $poolSettings `
-FrontendIpConfigurations $fipconfig `
-GatewayIpConfigurations $gipconfig `
-FrontendPorts $frontendport80 `
-HttpListeners $globallistener `
-RequestRoutingRules $frontendRule `
-Sku $sku `
-FirewallPolicy $wafPolicyGlobal
Stosowanie zasad dla identyfikatora URI
Aby zastosować zasady dla identyfikatora URI, po prostu utwórz nowe zasady i zastosuj je do konfiguracji reguły ścieżki.
$policySettingURI = New-AzApplicationGatewayFirewallPolicySetting `
-Mode Prevention `
-State Enabled `
-MaxRequestBodySizeInKb 100 `
-MaxFileUploadInMb 5
$wafPolicyURI = New-AzApplicationGatewayFirewallPolicy `
-Name wafPolicyURI `
-ResourceGroup myResourceGroupAG `
-Location eastus `
-PolicySetting $PolicySettingURI `
-CustomRule $rule4, $rule5
$appgw = Get-AzApplicationGateway `
-ResourceGroupName myResourceGroupAG `
-Name myAppGateway
$PathRuleConfig = New-AzApplicationGatewayPathRuleConfig -Name "base" `
-Paths "/base" `
-BackendAddressPool $defaultPool `
-BackendHttpSettings $poolSettings `
-FirewallPolicy $wafPolicyURI
$PathRuleConfig1 = New-AzApplicationGatewayPathRuleConfig `
-Name "base" -Paths "/test" `
-BackendAddressPool $defaultPool `
-BackendHttpSettings $poolSettings
$URLPathMap = New-AzApplicationGatewayUrlPathMapConfig -Name "PathMap" `
-PathRules $PathRuleConfig, $PathRuleConfig1 `
-DefaultBackendAddressPoolId $defaultPool.Id `
-DefaultBackendHttpSettingsId $poolSettings.Id
Add-AzApplicationGatewayRequestRoutingRule -ApplicationGateway $appgw `
-Name "RequestRoutingRule" `
-RuleType PathBasedRouting `
-HttpListener $siteListener `
-UrlPathMap $URLPathMap
Tworzenie zestawu skalowania maszyn wirtualnych
W tym przykładzie utworzysz zestaw skalowania maszyn wirtualnych, aby zapewnić serwery dla puli zaplecza w bramie aplikacji. Zestaw skalowania przypisuje się do puli zaplecza podczas konfigurowania ustawień adresu IP.
Zastąp własne wartości dla i -AdminUsername
-AdminPassword
.
$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
Instalacja usług 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
Tworzenie konta magazynu i konfigurowanie diagnostyki
W tym artykule brama aplikacji używa konta magazynu do przechowywania danych na potrzeby wykrywania i zapobiegania. Do rejestrowania danych można też użyć dzienników usługi Azure Monitor lub usługi Event Hub.
Tworzenie konta magazynu
Utwórz konto magazynu o nazwie myagstore1 przy użyciu polecenia New-AzStorageAccount.
$storageAccount = New-AzStorageAccount `
-ResourceGroupName myResourceGroupAG `
-Name myagstore1 `
-Location eastus `
-SkuName "Standard_LRS"
Konfigurowanie diagnostyki
Skonfiguruj diagnostykę do rejestrowania danych w dziennikach ApplicationGatewayAccessLog, ApplicationGatewayPerformanceLog i ApplicationGatewayFirewallLog przy użyciu polecenia 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
Testowanie bramy aplikacji
Aby uzyskać publiczny adres IP bramy aplikacji, możesz użyć polecenia Get-AzPublicIPAddress . Następnie użyj tego adresu IP, aby curl względem (zastąp wartość 1.1.1.1 pokazaną poniżej).
Get-AzPublicIPAddress -ResourceGroupName myResourceGroupAG -Name myAGPublicIPAddress
#should be blocked
curl 1.1.1.1/globalBlock
curl 1.1.1.1/?1=1
#should be allowed
curl 1.1.1.1/globalAllow?1=1
#should be blocked
curl 1.1.1.1:8080/siteBlock
curl 1.1.1.1/?1=1
#should be allowed
curl 1.1.1.1:8080/siteAllow?1=1
#should be blocked
curl 1.1.1.1/URIBlock
curl 1.1.1.1/?1=1
#should be allowed
curl 1.1.1.1/URIAllow?1=1
Czyszczenie zasobów
Gdy grupa zasobów, brama aplikacji i wszystkie powiązane zasoby nie będą już potrzebne, usuń je przy użyciu polecenia Remove-AzResourceGroup.
Remove-AzResourceGroup -Name myResourceGroupAG