Azure WAFポリシーへのアップグレード手順

# 概要
[AzureのApplication GatewayのWAF構成（レガシWAF）が2027年03月15日に廃止される](https://learn.microsoft.com/ja-jp/azure/web-application-firewall/ag/upgrade-ag-waf-policy?tabs=portal)とマイクロソフトから2022年10月にアナウンスがありました。

![2024060701.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/143947/9e234ec2-ccfd-f44b-8495-6ec07b96efcc.jpeg)

このEOLに対応するため、**WAF構成（レガシWAF）** の **Application Gateway（WAF_v2）** が存在するか、社内のAzureリソースを調査した所、複数存在しているという事が判明しました。

本件に対応するため、PowerShell、またはAzure CLI（azコマンド）を用いたWAF構成（レガシWAF）からWAFポリシーへ関連付けを変更する手順をご紹介します。

# 前提
- PowerShell、またはAzure CLI（azコマンド）を使用するため、自身の環境でセットアップしてください。
- 既存のリソースと同じリソースグループに展開してください。
- リソース内部の各種名称や各種設定については既存リソースを踏襲等、適宜変更してください。
- 記載しているコマンドと既存リソースに差異がある場合はコマンド or オプションを適宜変更してください。

# PowerShell

## 1. サブスクリプションへの接続
```powershell
Connect-AzAccount -Subscription <SUBSCRIPTION_ID> -UseDeviceAuthentication
```

## 2. MS公式手順
PowerShellスクリプトを使用した公式アップグレード手順がMSのサイトで公開されています。
[Azure PowerShell を使用して Web Application Firewall ポリシーをアップグレードする](https://learn.microsoft.com/ja-jp/azure/web-application-firewall/ag/migrate-policy)

## 3. 動作確認
アプリケーション側の観点で動作確認を実施

# Azure CLI（azコマンド）

## 1. テナントへのログイン
対象のテナントにCLIからログイン。

```bash
az login --tenant <TENANT_NAME> （例: <テナント名>.onmicrosoft.com）
```

## 2. WAFポリシーの作成
既存のWAF構成（レガシWAF）のルールセットやバージョンを踏襲。

```bash
az network application-gateway waf-policy create \
    --name <POLICY_NAME> \
    --resource-group <RESOURCE_GROUP_NAME> \
    --type <WAF_RULE_SET_NAME> \
    --version <WAF_RULE_SET_VERSION>
```

## 3. WAFポリシーの特定のルールを無効化
既存のWAF構成（レガシWAF）のルールを踏襲。

```bash
az network application-gateway waf-policy managed-rule rule-set update \
    --policy-name <POLICY_NAME> \
    --resource-group <RESOURCE_GROUP_NAME> \
    --type <WAF_RULE_SET_NAME> \
    --version <WAF_RULE_SET_VERSION> \
    --group-name <WAF_RULE_GROUP_NAME> \
    --rule rule-id=<WAF_RULE_ID> \
           rule-id=<WAF_RULE_ID> \
           rule-id=<WAF_RULE_ID> \ ...
```

## 4. WAFポリシーの防御モードとリクエストボディチェックの有効化
既存のWAF構成（レガシWAF）の防御モードとリクエストボディチェックを踏襲。

```bash
az network application-gateway waf-policy policy-setting update \
    --policy-name <POLICY_NAME> \
    --resource-group <RESOURCE_GROUP_NAME> \
    --mode <MODE> \
    --request-body-check REQUEST_BODY_CHECK \
    --state <STATE>
```

## 5. WAFポリシーの除外を追加
既存のWAF構成（レガシWAF）の除外を踏襲。

```bash
az network application-gateway waf-policy managed-rule exclusion add \
    --policy-name <POLICY_NAME> \
    --resource-group <RESOURCE_GROUP_NAME> \
    --match-operator <MATCH_OPERATOR> \
    --match-variable <MATCH_VARIABLE> \
    --selector <SELECTOR>
```

## 6. WAFポリシーの関連付けを変更
WAFポリシーの関連付けと同時に既存のWAF構成（レガシWAF）のパラメーター（webApplicationFirewallConfiguration）を削除

```bash
az network application-gateway update \
    --name <APPLICATION_GATEWAY_NAME> \
    --resource-group <RESOURCE_GROUP_NAME> \
    --set firewallPolicy.id=<WAF_POLICY_RESOURCE_ID> \
    --remove webApplicationFirewallConfiguration
```

## 7. 動作確認

アプリケーション側の観点で動作確認を実施

# 参考
- [Azure PowerShell を使用して Web Application Firewall ポリシーをアップグレードする](https://learn.microsoft.com/ja-jp/azure/web-application-firewall/ag/migrate-policy)
- [az network application-gateway | Microsoft Learn](https://learn.microsoft.com/ja-jp/cli/azure/network/application-gateway?view=azure-cli-latest)
- [az network application-gateway waf-policy | Microsoft Learn](https://learn.microsoft.com/ja-jp/cli/azure/network/application-gateway/waf-policy?view=azure-cli-latest)