Azure Firewall と NAT Gateway V2 の統合

このチュートリアルでは、ゾーン冗長送信 SNAT 用に NAT ゲートウェイ V2 (StandardV2 SKU) を使用して Azure Firewall をデプロイする方法について説明します。 また、テスト仮想マシンと Azure Bastion をデプロイして構成を確認します。

Azure Firewall は、バックエンド仮想マシン スケール セット インスタンス (少なくとも 2 つのインスタンス) ごとに構成されたパブリック IP アドレスあたり 2,496 の SNAT ポートを提供します。 最大 250 個のパブリック IP アドレスを関連付けることができます。 送信 SNAT ポートをスケーリングして動的に割り当てるには、 Azure NAT ゲートウェイを使用します

NAT ゲートウェイ V2 の理由

Standard NAT ゲートウェイ SKU では、ゾーン冗長デプロイはサポートされていません。 Standard NAT ゲートウェイを使用してゾーン冗長 Azure Firewall をデプロイすると、ゾーン障害時に NAT ゲートウェイが単一障害点になります。 NAT Gateway V2 (StandardV2 SKU) はゾーン冗長デプロイをサポートしているため、ゾーン冗長 Azure Firewall と統合する場合に推奨される選択肢となります。

NAT ゲートウェイ SKU の詳細については、「 NAT ゲートウェイ SKU」を参照してください。

Azure NAT ゲートウェイを使用した SNAT ポートのスケーリングに関する記事では、Standard NAT Gateway との統合について説明します。 このチュートリアルでは、ゾーン冗長サポートを追加する StandardV2 (V2) SKU について説明します。

トラフィック フロー

NAT Gateway V2 を AzureFirewallSubnet に関連付けると、受信トラフィックと送信トラフィックで 異なるパブリック IP アドレスが使用されます。

  • 送信トラフィック (SNAT) は、 NAT ゲートウェイ V2 パブリック IP を経由します。
  • 受信トラフィック (DNAT) は、Azure Firewall 独自のパブリック IP を経由します。
  • 管理トラフィック (正常性プローブ、メトリック レポート、プラットフォーム管理) では、Azure Firewall 独自のパブリック IP が使用されます。 NAT ゲートウェイが送信 SNAT を処理する場合でも、ファイアウォールには独自のパブリック IP が必要です。

このアーキテクチャでは、二重 NAT は使用されません。 Azure Firewall インスタンスは、Azure Firewall パブリック IP アドレスではなくプライベート IP アドレスを使用して NAT ゲートウェイにトラフィックを送信します。

トラフィックの種類 使用されるパブリック IP
アウトバウンド (SNAT) NAT ゲートウェイ V2 PIP
インバウンド (DNAT) Azure Firewall に関する PIP
管理およびヘルスプローブ Azure Firewall に関する PIP

このチュートリアルでは、以下の内容を学習します。

  • AzureFirewallSubnet、ワークロード サブネット、AzureBastionSubnet を使用して仮想ネットワークを作成します。
  • StandardV2 パブリック IP を使用して NAT ゲートウェイ V2 を作成し、ファイアウォール サブネットに関連付けます。
  • Azure Firewall をデプロイし、アプリケーションとネットワークの規則を使用してファイアウォール ポリシーを構成します。
  • ファイアウォール経由でトラフィックを送信するルート テーブルを作成します。
  • テスト VM と Azure Bastion をデプロイして、アウトバウンド SNAT が NAT ゲートウェイ V2 パブリック IP を使用することを確認します。

前提条件

  • Azure のサブスクリプション。 Azure サブスクリプションをお持ちでない場合は、開始する前に 無料アカウント を作成してください。
  • Azure CLI バージョン 2.78 以降。 バージョンを確認するには、az --version を実行します。 インストールまたはアップグレードが必要な場合は、Azure CLI のインストールを参照してください。

リソース グループを作成します

az group create を使用して、デプロイ用のリソース グループを作成します。

az group create \
  --name rg-azfw-natgwv2-test \
  --location eastus2

仮想ネットワークとサブネットを作成する

次の 3 つのサブネットを持つ仮想ネットワークを作成します。

  • AzureFirewallSubnet — Azure Firewall に必要な名前 (少なくとも /26)。
  • workload-subnet — テスト仮想マシンをホストします。
  • AzureBastionSubnet — Azure Bastion に必要な名前 (少なくとも /26)。

az network vnet create を使用して、最初のサブネットで仮想ネットワークを作成します。 次に、 az network vnet subnet create を使用して、残りのサブネットを追加します。

az network vnet create \
  --resource-group rg-azfw-natgwv2-test \
  --name vnet-azfw-natgwv2 \
  --address-prefixes 10.0.0.0/16 \
  --subnet-name AzureFirewallSubnet \
  --subnet-prefixes 10.0.1.0/24 \
  --location eastus2

az network vnet subnet create \
  --resource-group rg-azfw-natgwv2-test \
  --vnet-name vnet-azfw-natgwv2 \
  --name workload-subnet \
  --address-prefixes 10.0.2.0/24

az network vnet subnet create \
  --resource-group rg-azfw-natgwv2-test \
  --vnet-name vnet-azfw-natgwv2 \
  --name AzureBastionSubnet \
  --address-prefixes 10.0.3.0/26

NAT ゲートウェイ V2 を作成する

NAT ゲートウェイ V2 には、 StandardV2 SKU パブリック IP が必要です。 Standard SKU パブリック IP を StandardV2 NAT ゲートウェイにアタッチすることはできません。

az network public-ip create を使用して StandardV2 パブリック IP を作成します。 次に、 az network nat gateway create を使用して NAT ゲートウェイを作成します。

az network public-ip create \
  --resource-group rg-azfw-natgwv2-test \
  --name pip-natgw-v2 \
  --sku StandardV2 \
  --allocation-method Static \
  --location eastus2

az network nat gateway create \
  --resource-group rg-azfw-natgwv2-test \
  --name natgw-v2 \
  --sku StandardV2 \
  --public-ip-addresses pip-natgw-v2 \
  --idle-timeout 4 \
  --location eastus2

NAT ゲートウェイ V2 を AzureFirewallSubnet に関連付ける

az network vnet subnet update を使用して、NAT ゲートウェイをファイアウォール サブネットに関連付けます。

az network vnet subnet update \
  --resource-group rg-azfw-natgwv2-test \
  --vnet-name vnet-azfw-natgwv2 \
  --name AzureFirewallSubnet \
  --nat-gateway natgw-v2

Azure Firewall を作成する

ファイアウォールには、管理用と受信用の DNAT 用に独自のパブリック IP が必要です。 Standard SKU パブリック IP は既定でゾーン冗長であるため、ゾーン冗長ファイアウォールのデプロイと一致します。

az network public-ip create を使用してファイアウォールのパブリック IP を作成し、az network firewall create を使用してファイアウォールをデプロイし、az network firewall ip-config create を使用して仮想ネットワークにアタッチします。

az network public-ip create \
  --resource-group rg-azfw-natgwv2-test \
  --name pip-azfw \
  --sku Standard \
  --allocation-method Static \
  --location eastus2

az network firewall create \
  --resource-group rg-azfw-natgwv2-test \
  --name azfw-natgwv2-test \
  --location eastus2 \
  --sku AZFW_VNet \
  --tier Standard \
  --zones 1 2 3

az network firewall ip-config create \
  --resource-group rg-azfw-natgwv2-test \
  --firewall-name azfw-natgwv2-test \
  --name azfw-ipconfig \
  --public-ip-address pip-azfw \
  --vnet-name vnet-azfw-natgwv2

az network firewall show を使用して、ファイアウォールのプライベート IP アドレスを取得します。

FIREWALL_PRIVATE_IP=$(az network firewall show \
  --resource-group rg-azfw-natgwv2-test \
  --name azfw-natgwv2-test \
  --query "ipConfigurations[0].privateIPAddress" \
  --output tsv)

echo $FIREWALL_PRIVATE_IP

ルート テーブルの作成

az network route-table create を使用してルート テーブルを作成し、az network route-table route create を使用して、すべてのトラフィックを Azure Firewall に送信する既定のルートを追加し、az network vnet subnet update を使用してそれをワークロード サブネットに関連付けます。

az network route-table create \
  --resource-group rg-azfw-natgwv2-test \
  --name rt-workload \
  --location eastus2

az network route-table route create \
  --resource-group rg-azfw-natgwv2-test \
  --route-table-name rt-workload \
  --name default-to-firewall \
  --address-prefix 0.0.0.0/0 \
  --next-hop-type VirtualAppliance \
  --next-hop-ip-address $FIREWALL_PRIVATE_IP

az network vnet subnet update \
  --resource-group rg-azfw-natgwv2-test \
  --vnet-name vnet-azfw-natgwv2 \
  --name workload-subnet \
  --route-table rt-workload

ファイアウォール ポリシーを作成する

ファイアウォール ポリシーを作成し、Azure Firewall に関連付けます。 ネットワーク ルールとアプリケーション ルールの両方を追加します。

ヒント

ネットワーク ルールまたはアプリケーション ルールを使用して、Web トラフィック (HTTP または HTTPS) を許可します。 Web トラフィックの場合は、 アプリケーション ルールを使用します。 アプリケーション ルールでは、ネットワーク ルールでは使用できない FQDN ベースのフィルター処理、TLS 検査、URL フィルタリングが提供されます。

az network firewall policy create を使用してポリシーを作成します。

az network firewall policy create \
  --resource-group rg-azfw-natgwv2-test \
  --name policy-azfw-natgwv2 \
  --location eastus2 \
  --sku Standard

az network firewall policy rule-collection-group create を使用してネットワーク ルール コレクション グループを作成し、add-filter-collection を使用して、ワークロード サブネットからの TCP および UDP トラフィックを許可する規則を追加します。

az network firewall policy rule-collection-group create \
  --resource-group rg-azfw-natgwv2-test \
  --policy-name policy-azfw-natgwv2 \
  --name DefaultNetworkRuleCollectionGroup \
  --priority 200

az network firewall policy rule-collection-group collection add-filter-collection \
  --resource-group rg-azfw-natgwv2-test \
  --policy-name policy-azfw-natgwv2 \
  --rule-collection-group-name DefaultNetworkRuleCollectionGroup \
  --name allow-outbound \
  --collection-priority 100 \
  --action Allow \
  --rule-type NetworkRule \
  --rule-name allow-tcp-udp \
  --source-addresses "10.0.2.0/24" \
  --destination-addresses "*" \
  --ip-protocols TCP UDP \
  --destination-ports "*"

Important

これらの規則により、テスト目的ですべての送信トラフィックが許可されます。 運用環境では、宛先アドレス、ポート、FQDN をワークロードに必要なもののみに制限します。

az network firewall policy rule-collection-group create を使用してアプリケーション ルール コレクション グループを作成し、add-filter-collection を使用して HTTP および HTTPS トラフィックを許可する規則を追加します。

az network firewall policy rule-collection-group create \
  --resource-group rg-azfw-natgwv2-test \
  --policy-name policy-azfw-natgwv2 \
  --name DefaultApplicationRuleCollectionGroup \
  --priority 300

az network firewall policy rule-collection-group collection add-filter-collection \
  --resource-group rg-azfw-natgwv2-test \
  --policy-name policy-azfw-natgwv2 \
  --rule-collection-group-name DefaultApplicationRuleCollectionGroup \
  --name allow-web \
  --collection-priority 100 \
  --action Allow \
  --rule-type ApplicationRule \
  --rule-name allow-http-https \
  --source-addresses "10.0.2.0/24" \
  --protocols Http=80 Https=443 \
  --target-fqdns "*"

az network firewall policy show を使用してポリシー ID を取得し、az network firewall update を使用してファイアウォールに関連付けます。

POLICY_ID=$(az network firewall policy show \
  --resource-group rg-azfw-natgwv2-test \
  --name policy-azfw-natgwv2 \
  --query id -o tsv)

az network firewall update \
  --resource-group rg-azfw-natgwv2-test \
  --name azfw-natgwv2-test \
  --firewall-policy "$POLICY_ID"

テスト仮想マシンをデプロイする

az vm create を使用して、パブリック IP アドレスと SSH キー認証なしでワークロード サブネットに Linux VM をデプロイします。

az vm create \
  --resource-group rg-azfw-natgwv2-test \
  --name vm-test-workload \
  --image Ubuntu2404 \
  --size Standard_B2s \
  --vnet-name vnet-azfw-natgwv2 \
  --subnet workload-subnet \
  --public-ip-address "" \
  --admin-username azureuser \
  --generate-ssh-keys \
  --location eastus2

Azure Bastion をデプロイする

az network public-ip create を使用してパブリック IP を作成し、az network bastion create を使用して Azure portal 経由で VM に接続するための Azure Bastion をデプロイします。

az network public-ip create \
  --resource-group rg-azfw-natgwv2-test \
  --name pip-bastion \
  --sku Standard \
  --allocation-method Static \
  --location eastus2

az network bastion create \
  --resource-group rg-azfw-natgwv2-test \
  --name bastion-azfw-test \
  --public-ip-address pip-bastion \
  --vnet-name vnet-azfw-natgwv2 \
  --sku Standard \
  --location eastus2

デプロイメントを確認する

  1. Azure portal で、 vm-test-workload>Connect>Bastion に移動します。

  2. 認証の種類として ローカル ファイルから SSH 秘密キー を選択します。

  3. ユーザー名として azureuser を入力し、秘密キー ファイルを選択します。

  4. 接続した後、次のコマンドを実行します。

    curl icanhazip.com
    

応答には 、NAT ゲートウェイ V2 パブリック IP アドレスが表示され、送信トラフィックが Azure Firewall を通過し、NAT ゲートウェイ V2 を経由して終了することを確認します。

NAT ゲートウェイなしで確認するには、 az network vnet subnet update を使用して一時的に関連付けを解除します。

az network vnet subnet update \
  --resource-group rg-azfw-natgwv2-test \
  --vnet-name vnet-azfw-natgwv2 \
  --name AzureFirewallSubnet \
  --remove natGateway

curl icanhazip.com をもう一度実行します。 応答に Azure Firewall 独自のパブリック IP が表示され、NAT ゲートウェイの関連付けに基づいて SNAT の動作が変化することを確認します。

完了したら 、az network vnet subnet update を使用して NAT ゲートウェイの再関連付けを行います。

az network vnet subnet update \
  --resource-group rg-azfw-natgwv2-test \
  --vnet-name vnet-azfw-natgwv2 \
  --name AzureFirewallSubnet \
  --nat-gateway natgw-v2

リソースをクリーンアップする

az group delete を使用して、リソース グループとすべてのリソースを削除します。

az group delete --name rg-azfw-natgwv2-test --yes --no-wait

次のステップ