Azure Web Application Firewall のレート制限規則を構成する

Azure Front Door 用の Azure Web Application Firewall のレート制限規則によって、レート制限期間に特定のソース IP アドレスからアプリケーションに送信できる要求数が制御されます。 レート制限の詳細については、「Azure Front Door のレート制限とは」を参照してください。

この記事では、Azure Front Door の Standard と Premium の各レベルで Web アプリケーション ファイアウォール (WAF) のレート制限規則を構成する方法について説明します。

シナリオ

パブリック Web サイトの担当をしているとします。 組織が実施している販売促進に関する情報を含むページを追加したところです。 クライアントがそのページに頻繁にアクセスすると、一部のバックエンド サービスが迅速にスケーリングされず、アプリケーションにパフォーマンスの問題が発生する可能性があることを懸念しています。

各ソース IP アドレスを 1 分あたり最大 1,000 要求に制限するレート制限規則を作成することにします。 この規則を、要求 URL に */promo* が含まれる要求にのみ適用します。

ヒント

Azure サブスクリプションをお持ちでない場合は、開始する前に 無料アカウント を作成してください。

Azure Front Door プロファイルと WAF ポリシーを作成する

  1. Azure Portal で、 [リソースの作成] を選択します。

    ホーム ページ上の [リソースの作成] ボタンを示すスクリーンショット。

  2. Front Door を検索し、[Front Door と CDN プロファイル] を選びます。

    マーケットプレースを示すスクリーンショット。Front Door が強調表示されています。

  3. [作成] を選択します

    Front Door および CDN プロファイルを示すスクリーンショット。[作成] ボタンが強調表示されています。

  4. [Front Door の作成を続ける] を選び、"簡易作成" ポータル作成プロセスを使用します。

    Front Door オファリングを示すスクリーンショット。[簡易作成] オプションが選択され、[フロント ドアの作成を続行する] ボタンが強調表示されています。

  5. [基本] ページで必要な情報を入力します。

    • [リソース グループ]: 既存のリソース グループを選択するか、Azure Front Door および WAF リソース用に新しいリソース グループを作成します。
    • [名前]: Azure Front Door プロファイルの名前を入力します。
    • [レベル]: [Standard] または [Premium] を選びます。 このシナリオでは、どちらのレベルでもレート制限がサポートされます。
    • [エンドポイント名]: Azure Front Door エンドポイントにはグローバルに一意の名前が必要であるため、エンドポイントに一意の名前を指定します。
    • [配信元の種類][配信元のホスト名]: レート制限規則で保護する配信元アプリケーションを選びます。
  6. [WAF ポリシー]の横にある [新規作成] を選びます。

    Azure Front Door の作成ワークフローを示すスクリーンショット。WAF ポリシーの [新規作成] ボタンが強調表示されています。

  7. WAF ポリシーの名前を入力し、[作成] を選びます。

    WAF ポリシー作成プロンプトを示すスクリーンショット。[作成] ボタンが強調表示されています。

  8. [確認と作成]>[作成] の順に選択します。

    完成した Azure Front Door プロファイル構成を示すスクリーンショット。

  9. デプロイが完了したら、[リソースに移動] を選びます。

レート制限規則を作成する

  1. [カスタム ルール]>[カスタム ルールの追加] を選びます。

    WAF ポリシーの [カスタム ルール] ページを示すスクリーンショット。

  2. レート制限規則を作成するために必要な情報を入力します。

    • [カスタム ルール名]: カスタム ルールの名前 (rateLimitRule など) を入力します。
    • [ルールの種類]: [レート制限] を選択します。
    • [優先度]: ルールの優先度 (1 など) を入力します。
    • [レート制限の期間]: [1 分] を選択します。
    • [レート制限のしきい値 (要求数)]: 「1000」と入力します。
  3. [条件] に、文字列 */promo* が URL に含まれている要求を識別する一致条件を指定するために必要な情報を入力します。

    • [一致の種類]: [文字列] を選択します。
    • [一致変数]: 「RequestUri」と入力します。
    • [操作]: [次の値に一致する] を選択します。
    • [演算子]: [次の値を含む] を選択します。
    • [一致する値]: 「/promo」と入力します。
  4. [アクション] については、[ログ] または [ブロック] を選択します。

    レート制限規則では、Log および Block アクションのみがサポートされます。 Allow はサポートされていません。

    カスタム ルールの構成を示すスクリーンショット。

  5. [追加] を選択します。

  6. [保存] を選択します。

    新しいレート制限規則を含むカスタム ルール リストを示すスクリーンショット。

WAF で防止モードを使用する

既定では、Azure portal により WAF ポリシーが検出モードで作成されます。 この設定は、WAF により要求がブロックされないことを意味します。 詳細については、「WAF のモード」をご覧ください。

防止モードを使用する前に WAF を調整します。 チューニングは、擬陽性の検出を回避するのに役立ちます。 また、WAF が正当な要求をブロックするのを防ぐのにも役立ちます。

ここでは、防止モードを使用するように WAF を再構成します。

  1. WAF ポリシーを開きます。

    [ポリシー モード][検出] に設定されていることに注目してください。

    WAF ポリシーを示すスクリーンショット。ポリシー モードと [防止モードに切り替える] ボタンが強調表示されています。

  2. [防止モードに切り替える] を選びます。

前提条件

レート制限ポリシーの設定を開始する前に、PowerShell 環境を設定して Azure Front Door プロファイルを作成します。

PowerShell 環境をセットアップする

Azure PowerShell には、Azure リソースの管理に Azure Resource Manager モデルを使う一連のコマンドレットが用意されています。

Azure PowerShell をローカル コンピューターにインストールして、すべての PowerShell セッションで使用することができます。 ここでは、ご自分の Azure 資格情報でサインインし、Azure Front Door Standard または Premium の Azure PowerShell モジュールをインストールします。

サインインのための対話型ダイアログを使用して Azure に接続する

次のコマンドを実行して Azure にサインインします。

Connect-AzAccount

PowerShellGet をインストールする

PowerShellGet の現在のバージョンがインストールされていることを確認します。 次のコマンドを実行します。

Install-Module PowerShellGet -Force -AllowClobber

次に、PowerShell を再起動して、最新バージョンを使用していることを確認します。

Azure Front Door PowerShell モジュールをインストールする

PowerShell から Azure Front Door Standard または Premium を操作するために、Az.FrontDoor および Az.Cdn モジュールをインストールします。

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

Az.Cdn モジュールを使用して、Azure Front Door Standard または Premium リソースを操作します。 Az.FrontDoor モジュールを使用して、WAF リソースを操作します。

リソース グループを作成する

New-AzResourceGroup コマンドレットを使用して、Azure Front Door プロファイルと WAF ポリシーの新しいリソース グループを作成します。 独自の要件に合わせて、リソース グループの名前と場所を更新します。

$resourceGroupName = 'FrontDoorRateLimit'

New-AzResourceGroup -Name $resourceGroupName -Location 'westus'

Azure Front Door プロファイルを作成する

New-AzFrontDoorCdnProfile コマンドレットを使用して、新しい Azure Front Door プロファイルを作成します。

この例では、MyFrontDoorProfile という名前の Azure Front Door Standard プロファイルを作成します。

$frontDoorProfile = New-AzFrontDoorCdnProfile `
  -Name 'MyFrontDoorProfile' `
  -ResourceGroupName $resourceGroupName `
  -Location global `
  -SkuName Standard_AzureFrontDoor

Azure Front Door エンドポイントを作成する

New-AzFrontDoorCdnEndpoint コマンドレットを使用して、Azure Front Door プロファイルにエンドポイントを追加します。

Azure Front Door エンドポイントにはグローバルに一意の名前が必要であるため、$frontDoorEndpointName 変数の値を一意のものに更新します。

$frontDoorEndpointName = '<unique-front-door-endpoint-name>'

$frontDoorEndpoint = New-AzFrontDoorCdnEndpoint `
  -EndpointName $frontDoorEndpointName `
  -ProfileName $frontDoorProfile.Name `
  -ResourceGroupName $frontDoorProfile.ResourceGroupName `
  -Location $frontDoorProfile.Location

URL 一致条件を定義する

New-AzFrontDoorWafMatchConditionObject コマンドレットを使用して一致条件を作成し、レート制限を適用する必要がある要求を特定します。

次の例は、RequestUri 変数に文字列 /promo が含まれている要求と一致します。

$promoMatchCondition = New-AzFrontDoorWafMatchConditionObject `
  -MatchVariable RequestUri `
  -OperatorProperty Contains `
  -MatchValue '/promo'

カスタム レート制限規則を作成する

New-AzFrontDoorWafCustomRuleObject コマンドレットを使用してレート制限規則を作成します。これには、前の手順で定義した一致条件と要求のしきい値が含まれます。

次の例では、制限を 1000 に設定します。

$promoRateLimitRule = New-AzFrontDoorWafCustomRuleObject `
  -Name 'rateLimitRule' `
  -RuleType RateLimitRule `
  -MatchCondition $promoMatchCondition `
  -RateLimitThreshold 1000 `
  -Action Block `
  -Priority 1

ソース IP アドレスが 1 分以内に 1,000 を超える要求を送信すると、次の分が開始されるまで WAF によって後続の要求がブロックされます。

WAF ポリシーを作成する

New-AzFrontDoorWafPolicy コマンドレットを使用して WAF ポリシーを作成します。これには、作成したカスタム ルールが含まれます。

$wafPolicy = New-AzFrontDoorWafPolicy `
  -Name 'MyWafPolicy' `
  -ResourceGroupName $frontDoorProfile.ResourceGroupName `
  -Sku Standard_AzureFrontDoor `
  -CustomRule $promoRateLimitRule

Azure Front Door プロファイルを WAF ポリシーに関連付けるセキュリティ ポリシーを構成する

New-AzFrontDoorCdnSecurityPolicy コマンドレットを使用して、Azure Front Door プロファイルのセキュリティ ポリシーを作成します。 セキュリティ ポリシーにより、WAF ポリシーが WAF ルールで保護するドメインに関連付けられます。

この例では、エンドポイントの既定のホスト名を WAF ポリシーに関連付けます。

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

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

$frontDoorSecurityPolicy = New-AzFrontDoorCdnSecurityPolicy `
  -Name 'MySecurityPolicy' `
  -ProfileName $frontDoorProfile.Name `
  -ResourceGroupName $frontDoorProfile.ResourceGroupName `
  -Parameter $securityPolicyParameters

前提条件

レート制限ポリシーの設定を開始する前に、Azure CLI 環境を設定して Azure Front Door プロファイルを作成します。

Azure CLI 環境を設定する

Azure CLI には、Azure リソースの管理に Azure Resource Manager モデルを使用する一連のコマンドが用意されています。

ローカル コンピューターに Azure CLI をインストールし、任意のシェル セッションで使用できます。 ここでは、ご自分の Azure 資格情報でサインインし、Azure Front Door Standard または Premium の Azure CLI 拡張機能をインストールします。

サインインのための対話型ダイアログを使用して Azure に接続する

次のコマンドを実行して Azure にサインインします。

az login

Azure CLI 用 Azure Front Door 拡張機能をインストールする

Azure CLI から Azure Front Door WAF を操作するために front-door 拡張機能をインストールします。

az extension add --name front-door

az afd コマンドを使用して、Azure Front Door Standard または Premium リソースを操作します。 az network front-door waf-policy コマンドを使用して、WAF リソースを操作します。

リソース グループを作成する

az group create コマンドを使用して、Azure Front Door プロファイルと WAF ポリシーの新しいリソース グループを作成します。 独自の要件に合わせて、リソース グループの名前と場所を更新します。

resourceGroupName='FrontDoorRateLimit'

az group create \
  --name $resourceGroupName \
  --location westus

Azure Front Door プロファイルを作成する

az afd profile create コマンドを使用して、新しい Azure Front Door プロファイルを作成します。

この例では、MyFrontDoorProfile という名前の Azure Front Door Standard プロファイルを作成します。

frontDoorProfileName='MyFrontDoorProfile'

az afd profile create \
  --profile-name $frontDoorProfileName \
  --resource-group $resourceGroupName \
  --sku Standard_AzureFrontDoor

Azure Front Door エンドポイントを作成する

az afd endpoint create コマンドを使用して、Azure Front Door プロファイルにエンドポイントを追加します。

Azure Front Door エンドポイントにはグローバルに一意の名前が必要であるため、frontDoorEndpointName 変数の値を一意のものに更新します。

frontDoorEndpointName='<unique-front-door-endpoint-name>'

az afd endpoint create \
  --endpoint-name $frontDoorEndpointName \
  --profile-name $frontDoorProfileName \
  --resource-group $resourceGroupName \

WAF ポリシーを作成する

az network front-door waf-policy create コマンドを使用して WAF ポリシーを作成します。

wafPolicyName='MyWafPolicy'

az network front-door waf-policy create \
  --name $wafPolicyName \
  --resource-group $resourceGroupName \
  --sku Standard_AzureFrontDoor

カスタム レート制限規則を追加する準備をする

az network front-door waf-policy rule create コマンドを使用して、カスタム レート制限規則を作成します。 次の例では、1 分あたりの要求の制限を 1,000 に設定します。

レート制限規則には、次の手順で作成する一致条件が含まれている必要があります。 このコマンドには --defer 引数を含めます。この引数は、まだ Azure に規則を送信しないように Azure CLI に指示します。

az network front-door waf-policy rule create \
  --name rateLimitRule \
  --policy-name $wafPolicyName \
  --resource-group $resourceGroupName \
  --rule-type RateLimitRule \
  --rate-limit-duration 1 \
  --rate-limit-threshold 1000 \
  --action Block \
  --priority 1 \
  --defer

ソース IP アドレスが 1 分以内に 1,000 を超える要求を送信すると、次の分が開始されるまで WAF によって後続の要求がブロックされます。

一致条件を追加する

az network front-door waf-policy rule match-condition add コマンドを使用して、カスタム ルールに一致条件を追加します。 一致条件によって、レート制限を適用する必要がある要求が識別されます。

次の例は、RequestUri 変数に文字列 /promo が含まれている要求と一致します。

az network front-door waf-policy rule match-condition add \
  --match-variable RequestUri \
  --operator Contains \
  --values '/promo' \
  --name rateLimitRule \
  --policy-name $wafPolicyName \
  --resource-group $resourceGroupName

このコマンドを送信すると、Azure CLI によってレート制限規則と一致条件が一緒に作成されます。

Azure Front Door プロファイルを WAF ポリシーに関連付けるセキュリティ ポリシーを構成する

az afd security-policy create コマンドを使用して、Azure Front Door プロファイルのセキュリティ ポリシーを作成します。 セキュリティ ポリシーにより、WAF ポリシーが WAF ルールで保護するドメインに関連付けられます。

この例では、エンドポイントの既定のホスト名を WAF ポリシーに関連付けます。

securityPolicyName='MySecurityPolicy'

wafPolicyResourceId=$(az network front-door waf-policy show --name $wafPolicyName --resource-group $resourceGroupName --query id --output tsv)
frontDoorEndpointResourceId=$(az afd endpoint show --endpoint-name $frontDoorEndpointName --profile-name $frontDoorProfileName --resource-group $resourceGroupName --query id --output tsv)

az afd security-policy create \
  --security-policy-name $securityPolicyName \
  --profile-name $frontDoorProfileName \
  --resource-group $resourceGroupName \
  --domains $frontDoorEndpointResourceId \
  --waf-policy $wafPolicyResourceId

上記のコードでは、セキュリティ ポリシーに関連付けるために、WAF ポリシーと Azure Front Door エンドポイントの Azure リソース識別子を検索します。

注意

WAF ポリシーを変更するたびに、Azure Front Door セキュリティ ポリシーを再作成する必要はありません。 WAF ポリシーの更新は、Azure Front Door ドメインに自動的に適用されます。

クイック スタート

Bicep を使用してレート制限規則を持つ Azure Front Door プロファイルを作成するには、Bicep のクイック スタート「レート制限がある Azure Front Door Standard または Premium」を参照してください。

次のステップ

Azure Front Door の詳細を確認します。