次の方法で共有


Azure CLI を使用して Azure Firewall をデプロイして構成する

アウトバウンド ネットワーク アクセスを制御することは、ネットワーク セキュリティ プラン全体の重要な要素です。 たとえば、Web サイトへのアクセスを制限することができます。 また、アクセスできるアウトバウンドの IP アドレスとポートを制限することもできます。

Azure サブネットから外に向かうアウトバウンド ネットワーク アクセスを制御する方法の 1 つとして、Azure Firewall の使用が挙げられます。 Azure Firewall を使用して、次のルールを構成できます。

  • アプリケーション ルール: サブネットからアクセスできる完全修飾ドメイン名 (FQDN) を定義します。 FQDN には SQL インスタンスを含めることもできます。
  • ネットワーク ルール: 送信元アドレス、プロトコル、宛先ポート、送信先アドレスを定義します。

ネットワーク トラフィックは、サブネットの既定ゲートウェイとしてのファイアウォールにルーティングしたときに、構成されているファイアウォール ルールに制約されます。

この記事では、デプロイしやすいよう単純化して、3 つのサブネットを含んだ単一の VNet を作成します。 運用環境のデプロイには、ハブ アンド スポーク モデルが推奨されます。 ファイアウォールは独自の VNet に含まれています。 ワークロード サーバーは、1 つ以上のサブネットを含む同じリージョンのピアリングされた VNet に配置されます。

  • AzureFirewallSubnet - このサブネットにファイアウォールが存在します。
  • Workload-SN - このサブネットにはワークロード サーバーがあります。 このサブネットのネットワーク トラフィックは、ファイアウォールを通過します。
  • AzureBastionSubnet - Azure Bastion はこのサブネット内にあり、ワークロード サーバーへの安全なアクセスを提供します。

ネットワーク インフラストラクチャの図。

この記事では、次の方法について説明します。

  • テスト ネットワーク環境を設定する
  • ファイアウォールをデプロイする
  • 既定のルートを作成する
  • www.microsoft.com へのアクセスを許可するようにアプリケーション ルールを構成する
  • 外部 DNS サーバーへのアクセスを許可するようにネットワーク ルールを構成する
  • ファイアウォールをテストする

必要に応じて、この手順は Azure portal または Azure PowerShell を使用して完了できます。

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

前提条件

  • Azure Cloud Shell で Bash 環境を使用します。 詳細については、「Azure Cloud Shell の概要」を参照してください。

  • CLI リファレンス コマンドをローカルで実行する場合、Azure CLI をインストールします。 Windows または macOS で実行している場合は、Docker コンテナーで Azure CLI を実行することを検討してください。 詳細については、「Docker コンテナーで Azure CLI を実行する方法」を参照してください。

    • ローカル インストールを使用する場合は、az login コマンドを使用して Azure CLI にサインインします。 認証プロセスを完了するには、ターミナルに表示される手順に従います。 その他のサインイン オプションについては、「 Azure CLI を使用した Azure への認証」を参照してください。

    • 初回使用時にインストールを求められたら、Azure CLI 拡張機能をインストールします。 拡張機能の詳細については、「Azure CLI で拡張機能を使用および管理する」を参照してください。

    • az version を実行し、インストールされているバージョンおよび依存ライブラリを検索します。 最新バージョンにアップグレードするには、az upgrade を実行します。

  • この記事では、Azure CLI のバージョン 2.55.0 以降が必要です。 Azure Cloud Shell を使用している場合は、最新バージョンが既にインストールされています。

ネットワークのセットアップ

最初に、ファイアウォールをデプロイするために必要なリソースを含めるリソース グループを作成します。 次に、VNet、サブネット、およびテスト サーバーを作成します。

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

このリソース グループには、デプロイのためのすべてのリソースが含まれます。

az group create --name Test-FW-RG --location eastus

VNet を作成する

この仮想ネットワークには 3 つのサブネットが含まれています。

注意

AzureFirewallSubnet サブネットのサイズは /26 です。 サブネットのサイズの詳細については、「Azure Firewall に関する FAQ」を参照してください。

az network vnet create \
  --name Test-FW-VN \
  --resource-group Test-FW-RG \
  --location eastus \
  --address-prefix 10.0.0.0/16 \
  --subnet-name AzureFirewallSubnet \
  --subnet-prefix 10.0.1.0/26
az network vnet subnet create \
  --name Workload-SN \
  --resource-group Test-FW-RG \
  --vnet-name Test-FW-VN   \
  --address-prefix 10.0.2.0/24
az network vnet subnet create \
  --name AzureBastionSubnet \
  --resource-group Test-FW-RG \
  --vnet-name Test-FW-VN   \
  --address-prefix 10.0.3.0/26

仮想マシンを作成する

特定の DNS サーバーの IP アドレスを指定し、テストに使用するパブリック IP アドレスはなしで Srv-Work の NIC を作成します。

az network nic create \
    --resource-group Test-FW-RG \
    --name Srv-Work-NIC \
   --vnet-name Test-FW-VN \
   --subnet Workload-SN \
   --dns-servers <replace with External DNS ip #1> <replace with External DNS ip #2>

次に、ワークロード仮想マシンを作成します。 次のコマンドは、SSH キー認証を使用して Ubuntu Server 22.04 LTS VM を作成し、Nginx をインストールします。 メッセージが表示されたら、生成された秘密キーを .pem ファイルに保存し、Azure Bastion 経由で接続するときに使用します。

az vm create \
    --resource-group Test-FW-RG \
    --name Srv-Work \
    --location eastus \
    --image Ubuntu2204 \
    --nics Srv-Work-NIC \
    --admin-username azureuser \
    --generate-ssh-keys \
    --custom-data cloud-init.txt

Nginx をインストールするために、次の内容を含む cloud-init.txt ファイルを作成します。

#cloud-config
package_upgrade: true
packages:
  - nginx
runcmd:
  - echo '<h1>'$(hostname)'</h1>' | sudo tee /var/www/html/index.html

注意

パブリック IP が割り当てられていない VM、または内部の Basic Azure Load Balancer のバックエンド プール内にある VM に対しては、Azure によって既定のアウトバウンド アクセス IP が提供されます。 デフォルト送信アクセス IP メカニズムは、構成できないアウトバウンド IP アドレスを提供します。

次のいずれかのイベントが発生すると、既定のアウトバウンド アクセス IP は無効になります。

  • パブリック IP アドレスが VM に割り当てられます。
  • アウトバウンド規則の有無にかかわらず、VM は標準ロード バランサーのバックエンド プール内に配置されます。
  • Azure NAT Gateway リソースが VM のサブネットに割り当てられている。

フレキシブル オーケストレーション モードの仮想マシン スケール セットによって作成された VM には、既定のアウトバウンド アクセスがありません。

Azure のアウトバウンド接続の詳細については、「Azure での既定の送信アクセス」および「送信接続での送信元ネットワーク アドレス変換 (SNAT)を使用する」を参照してください。

ファイアウォールをデプロイする

次に、仮想ネットワークにファイアウォールをデプロイします。

az network firewall create \
    --name Test-FW01 \
    --resource-group Test-FW-RG \
    --location eastus
az network public-ip create \
    --name fw-pip \
    --resource-group Test-FW-RG \
    --location eastus \
    --allocation-method static \
    --sku standard
az network firewall ip-config create \
    --firewall-name Test-FW01 \
    --name FW-config \
    --public-ip-address fw-pip \
    --resource-group Test-FW-RG \
    --vnet-name Test-FW-VN
az network firewall update \
    --name Test-FW01 \
    --resource-group Test-FW-RG 
az network public-ip show \
    --name fw-pip \
    --resource-group Test-FW-RG
fwprivaddr="$(az network firewall ip-config list --resource-group Test-FW-RG --firewall-name Test-FW01 --query "[?name=='FW-config'].privateIpAddress" --output tsv)"

プライベート IP アドレスをメモします。 後で既定のルートを作成するときにこれを使用します。

Azure Bastion をデプロイする

Azure Bastion をデプロイして、パブリック IP アドレスやジャンプ サーバーを必要とせずに、Srv-Work 仮想マシンに安全に接続します。

az network public-ip create \
    --resource-group Test-FW-RG \
    --name bastion-pip \
    --sku Standard \
    --location eastus
az network bastion create \
    --name Test-Bastion \
    --public-ip-address bastion-pip \
    --resource-group Test-FW-RG \
    --vnet-name Test-FW-VN \
    --location eastus \
    --sku Basic

注意

Azure Bastion のデプロイが完了するまでに約 10 分かかる場合があります。

既定のルートを作成する

BGP ルート伝達が無効になっているルート テーブルを作成します

az network route-table create \
    --name Firewall-rt-table \
    --resource-group Test-FW-RG \
    --location eastus \
    --disable-bgp-route-propagation true

ルートを作成します。

az network route-table route create \
  --resource-group Test-FW-RG \
  --name DG-Route \
  --route-table-name Firewall-rt-table \
  --address-prefix 0.0.0.0/0 \
  --next-hop-type VirtualAppliance \
  --next-hop-ip-address $fwprivaddr

ルート テーブルをサブネットに関連付けます。

az network vnet subnet update \
    --name Workload-SN \
    --resource-group Test-FW-RG \
    --vnet-name Test-FW-VN \
    --address-prefixes 10.0.2.0/24 \
    --route-table Firewall-rt-table

アプリケーション ルールを構成する

このアプリケーション ルールは www.microsoft.com へのアウトバウンド アクセスを許可します。

az network firewall application-rule create \
   --collection-name App-Coll01 \
   --firewall-name Test-FW01 \
   --name Allow-Microsoft \
   --protocols Http=80 Https=443 \
   --resource-group Test-FW-RG \
   --target-fqdns www.microsoft.com \
   --source-addresses 10.0.2.0/24 \
   --priority 200 \
   --action Allow

Azure Firewall には、既定で許可されるインフラストラクチャ FQDN 用の組み込みのルール コレクションが含まれています。 これらの FQDN はプラットフォームに固有であり、他の目的には使用できません。 詳細については、インフラストラクチャ FQDN に関する記事を参照してください。

ネットワーク ルールを構成する

このネットワーク ルールは、ポート 53 (DNS) で 2 つのパブリック DNS IP アドレスへのアウトバウンド アクセスを許可します。

az network firewall network-rule create \
   --collection-name Net-Coll01 \
   --destination-addresses <replace with DNS ip #1> <replace with DNS ip #2> \
   --destination-ports 53 \
   --firewall-name Test-FW01 \
   --name Allow-DNS \
   --protocols UDP \
   --resource-group Test-FW-RG \
   --priority 200 \
   --source-addresses 10.0.2.0/24 \
   --action Allow

ファイアウォールをテストする

今度は、ファイアウォールをテストして、想定したように機能することを確認します。

  1. Srv-Work の仮想マシンのプライベート IP アドレスをメモしてください。

    az vm list-ip-addresses \
    --resource-group Test-FW-RG \
    --name Srv-Work
    
  2. Azure portal で Srv-Work 仮想マシンに移動し、[接続>Bastion 経由で接続] を選択します。

  3. ユーザー名 azureuser を指定し、VM の作成時に生成された秘密キー .pem ファイルをアップロードします。 [ 接続 ] を選択して SSH セッションを開きます。

  4. SSH セッションで、次のコマンドを実行して DNS 解決をテストします。

    nslookup www.google.com
    nslookup www.microsoft.com
    

    どちらのコマンドでも、DNS クエリがファイアウォールを通過していることを示す回答を返します。

  5. 次のコマンドを実行して、Web アクセスをテストします。

    curl https://www.microsoft.com
    curl https://www.google.com
    

    www.microsoft.com要求は成功し、HTML コンテンツが返されますが、www.google.com要求は失敗するかタイムアウトになります。これは、ファイアウォール規則が想定どおりに動作していることを示しています。

これで、ファイアウォール ルールが動作していることを確認できました。

  • 構成された外部 DNS サーバーを使用して DNS 名を解決できます。
  • 1 つの許可された FQDN は参照できますが、それ以外は参照できません。

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

ファイアウォール リソースは、次のチュートリアルのために残しておいてもかまいませんが、不要であれば、Test-FW-RG リソース グループを削除して、ファイアウォール関連のすべてのリソースを削除してください。

az group delete \
  --name Test-FW-RG

次のステップ