Azure PowerShell を使用して WAF ポリシーを構成する

Web アプリケーション ファイアウォール (WAF) ポリシーでは、要求が Azure Front Door に到着したときに必要な検査が定義されています。

この記事では、Azure Front Door StandardまたはPremium向けに、カスタムルールを含み、Azure管理のデフォルトルールセットが有効化されたWAFポリシーの設定方法を紹介します。 カスタムルールはスタンダードとプレミアムの両方に適用されます。 マネージドルールセット、例えばデフォルトルールセットはプレミアムティアが必要です。

カスタムルールとデフォルトルールセットは任意です。必要に応じて、いずれか一方または両方を含めても構いません。 WAFポリシーモード(検出または防止)は、後のステップでポリシーを作成するときに設定します。

前提条件

  • アクティブなサブスクリプションを持つ Azure アカウント。 無料でアカウントを作成できます

  • Azure Front Door Standard または Premium プロファイル。 作成する必要がある場合は、クイックスタート: PowerShell を使用して Azure Front Door Standard/Premium プロファイルを作成するを参照してください。 この記事の例は、マネージドルールセットがプレミアム層を必要とするため、プレミアムプロファイルを使用しています。

  • Azure Cloud Shell または Azure PowerShell。

    この記事の手順では、Azure Cloud Shell で Azure PowerShell コマンドレットを対話型で実行します。 Cloud Shell でコマンドレットを実行するには、コード ブロックの右上隅にある [Cloud Shell を開く ] を選択します。 [コピー] を選択してコードをコピーし、続いて Cloud Shell に貼り付けて実行します。 Azure ポータル内からCloud Shellを実行することもできます。

    Azure PowerShell をローカルにインストールしてコマンドレットを実行することもできます。 PowerShell をローカルで実行している場合は、Connect-AzAccount コマンドレットを使用して Azure にサインインします。

  • Az.CdnAz.FrontDoorPowerShellモジュールです。 Az.Cdnモジュールは標準およびプレミアムリソースAzure Front Door、Az.FrontDoorモジュールはWAFリソースを扱うのに使います。 以下のコマンドを実行して両方のモジュールをインストールします:

    Install-Module -Name Az.Cdn
    Install-Module -Name Az.FrontDoor
    

HTTP パラメーターに基づくカスタム ルール

次の例では、New-AzFrontDoorWafMatchConditionObject を使用して 2 つの一致条件のあるカスタムルールを構成する方法を示します。 要求は参照元によって定義されている指定サイトからのもので、クエリ文字列に password は含まれません。

$referer = New-AzFrontDoorWafMatchConditionObject -MatchVariable RequestHeader -OperatorProperty Equal -Selector "Referer" -MatchValue "www.mytrustedsites.com/referpage.html"
$password = New-AzFrontDoorWafMatchConditionObject -MatchVariable QueryString -OperatorProperty Contains -MatchValue "password"
$AllowFromTrustedSites = New-AzFrontDoorWafCustomRuleObject -Name "AllowFromTrustedSites" -RuleType MatchRule -MatchCondition $referer,$password -Action Allow -Priority 1

HTTP 要求メソッドに基づくカスタム ルール

New-AzFrontDoorWafCustomRuleObject を使用して、PUT メソッドをブロックする規則を作成します。

$put = New-AzFrontDoorWafMatchConditionObject -MatchVariable RequestMethod -OperatorProperty Equal -MatchValue PUT
$BlockPUT = New-AzFrontDoorWafCustomRuleObject -Name "BlockPUT" -RuleType MatchRule -MatchCondition $put -Action Block -Priority 2

サイズ制約に基づくカスタム規則を作成する

以下の例は、Azure PowerShellを使って100文字を超えるURLのリクエストをブロックするルールを作成します。

$url = New-AzFrontDoorWafMatchConditionObject -MatchVariable RequestUri -OperatorProperty GreaterThanOrEqual -MatchValue 100
$URLOver100 = New-AzFrontDoorWafCustomRuleObject -Name "URLOver100" -RuleType MatchRule -MatchCondition $url -Action Block -Priority 3

マネージド デフォルト ルールセットの追加

管理されたルールセットはAzure Front Door Premiumで利用可能です。 以下の例は、Azure PowerShellを用いて管理されたデフォルトルールセットオブジェクトを作成します。

$managedRules = New-AzFrontDoorWafManagedRuleObject -Type Microsoft_DefaultRuleSet -Version 2.2

マネージドルールセットはAzure Front Door Premiumが必要です。 Azure Front Door Standardはカスタムルールのみをサポートしています。 この例はバージョン2.2 Microsoft_DefaultRuleSet 使っています。 利用可能なすべてのバージョンについては、Web Application Firewall DRSのルールグループおよびルールをご覧ください。

WAF ポリシーを作成する

New-AzFrontDoorWafPolicyを使って、前述の手順で管理されたカスタムルールと管理されたデフォルトルールセットを含むWAFポリシーを作成します。 -Skuを管理されたルールを含めるためにPremium_AzureFrontDoorに設定するか、カスタムルールのみをStandard_AzureFrontDoorするように設定してください。

$myWAFPolicy = New-AzFrontDoorWafPolicy -Name $policyName -ResourceGroupName $resourceGroupName -Sku Premium_AzureFrontDoor -CustomRule $AllowFromTrustedSites,$BlockPUT,$URLOver100 -ManagedRule $managedRules -EnabledState Enabled -Mode Prevention

WAFポリシーをエンドポイントに関連付けてください

Azure Front Door StandardおよびPremiumでは、Azure Front Doorプロファイル上でセキュリティポリシーを作成することで、エンドポイントにWAFポリシーを関連付けます。 セキュリティポリシーは、WAFポリシーをWAFで保護したいドメインと関連付けます。

Get-AzFrontDoorCdnEndpointを使ってエンドポイントを取得し、リソースグループ、プロファイル、エンドポイントの名前を自分の名前に置き換えてください。 次に New-AzFrontDoorCdnSecurityPolicy を使って、エンドポイントのデフォルトホスト名をWAFポリシーに関連付けます。

$frontDoorEndpoint = Get-AzFrontDoorCdnEndpoint -ResourceGroupName $resourceGroupName -ProfileName $frontDoorProfileName -EndpointName $frontDoorEndpointName

$securityPolicyAssociation = New-AzFrontDoorCdnSecurityPolicyWebApplicationFirewallAssociationObject `
  -PatternsToMatch @("/*") `
  -Domain @(@{"Id"=$($frontDoorEndpoint.Id)})

$securityPolicyParameters = New-AzFrontDoorCdnSecurityPolicyWebApplicationFirewallParametersObject `
  -Association $securityPolicyAssociation `
  -WafPolicyId $myWAFPolicy.Id

New-AzFrontDoorCdnSecurityPolicy `
  -Name 'MySecurityPolicy' `
  -ProfileName $frontDoorProfileName `
  -ResourceGroupName $resourceGroupName `
  -Parameter $securityPolicyParameters

セキュリティポリシーは、その関連付けられたドメインに適用されます。 より多くのドメインを保護するには、それらをアソシエーションに追加するか、追加のセキュリティポリシーを作成しましょう。