このチュートリアルでは、発信接続とスケーラビリティを強化するために、NAT ゲートウェイと Azure Firewall をハブ アンド スポーク ネットワークに統合する方法について説明します。
Azure Firewall では、バックエンド仮想マシン スケール セット インスタンス (最小 2 インスタンス) ごとに構成されたパブリック IP アドレスあたり 2,496 個の SNAT ポートが提供されます。 最大 250 個のパブリック IP アドレスを Azure Firewall に関連付けることができます。 アーキテクチャの要件とトラフィック パターンによっては、Azure Firewall で提供できる数よりも多くの SNAT ポートが必要になる場合があります。 また、必要なパブリック IP の数を減らしながら、より多くの SNAT ポートを必要とする場合もあります。 送信接続のより優れた方法は、NAT ゲートウェイを使用することです。 NAT ゲートウェイは、パブリック IP アドレスあたり 64,512 個の SNAT ポートを提供し、最大 16 個のパブリック IP アドレスで使用できます。
NAT ゲートウェイは、Azure Firewall サブネットに直接 NAT ゲートウェイを構成することで、Azure Firewall と統合できます。 この関連付けにより、よりスケーラブルな送信接続方法が提供されます。 運用環境のデプロイでは、ファイアウォールが専用の仮想ネットワークに配置されるハブ アンド スポーク ネットワークがお勧めです。 ワークロード サーバーは、ファイアウォールが存在するハブ仮想ネットワークと同じリージョン内のピアリングされた仮想ネットワークです。 このアーキテクチャ セットアップでは、NAT ゲートウェイは、ピアリングされたすべてのスポーク仮想ネットワークに対してハブ仮想ネットワークからの送信接続を提供できます。
注
Azure NAT Gateway は、セキュリティで保護された仮想ハブ ネットワーク (vWAN) アーキテクチャでは現在サポートされていません。 このチュートリアルに記載されているように、ハブ仮想ネットワーク アーキテクチャを使用してデプロイする必要があります。 Azure Firewall アーキテクチャ オプションの詳細については、「Azure Firewall Manager のアーキテクチャのオプション」を参照してください。
このチュートリアルでは、次の作業を行う方法について説明します。
- ハブ仮想ネットワークを作成し、デプロイ時に Azure Firewall と Azure Bastion をデプロイする
- NAT ゲートウェイを作成し、ハブ仮想ネットワーク内のファイアウォール サブネットに関連付ける
- スポーク仮想ネットワークを作成する
- 仮想ネットワーク ピアリングの作成
- スポーク仮想ネットワークのルート テーブルを作成する
- ハブ仮想ネットワークのファイアウォール ポリシーを作成する
- NAT ゲートウェイを介した送信接続をテストするために仮想マシンを作成する
前提条件
Azure Cloud Shell
Azure は、ブラウザーから使用できる対話型シェル環境である Azure Cloud Shell をホストします。 Cloud Shell で Bash または PowerShell を使用して、Azure サービスを操作できます。 Cloud Shell にプレインストールされているコマンドを使用すると、ローカル環境に何もインストールしなくても、この記事のコードを実行できます。
Azure Cloud Shell を起動するには:
選択肢 |
例とリンク |
コードまたはコマンド ブロックの右上隅にある [使ってみる] を選択します。
[使ってみる] を選択しても、コードまたはコマンドは Cloud Shell に自動的にはコピーされません。 |
|
https://shell.azure.com に移動するか、[Cloud Shell を起動する] ボタンを選択して、ブラウザーで Cloud Shell を開きます。 |
|
Azure portal の右上にあるメニュー バーの [Cloud Shell] ボタンを選択します。 |
|
Azure Cloud Shell を使用するには、以下のようにします。
Cloud Shell を起動します。
コード ブロック (またはコマンド ブロック) の [コピー] ボタンを選択し、コードまたはコマンドをコピーします。
Windows および Linux では Ctrl+Shift+V を選択し、macOS では Cmd+Shift+V を選択して、コードまたはコマンドをクラウドシェルセッションに貼り付けます。
「を選択し、 を入力してコードまたはコマンドを実行します。」
PowerShell をローカルにインストールして使用する場合、この記事では Azure PowerShell モジュール バージョン 1.0.0 以降が必要になります。 インストールされているバージョンを確認するには、Get-Module -ListAvailable Az
を実行します。 アップグレードが必要な場合は、Azure PowerShell モジュールをインストールを参照してください。 PowerShell をローカルで実行している場合、Connect-AzAccount
を実行して Azure との接続を作成することも必要です。
Azure アカウントをお持ちでない場合は、開始する前に無料アカウントを作成してください。
- この記事では、Azure CLI のバージョン 2.0.28 以降が必要です。 Azure Cloud Shell を使用している場合は、最新バージョンが既にインストールされています。
ハブ仮想ネットワークを作成する
ハブ仮想ネットワークには、Azure Firewall と NAT ゲートウェイに関連付けられたファイアウォール サブネットが含まれます。 次の例を使用してハブ仮想ネットワークを作成します。
Azure portal にサインインします。
ポータルの上部にある検索ボックスに、「仮想ネットワーク」と入力します。 検索結果で、[仮想ネットワーク] を選択します。
[+ 作成] を選択します。
[仮想ネットワークの作成] の [基本] タブで、次の情報を入力または選択します。
設定 |
値 |
プロジェクトの詳細 |
|
サブスクリプション |
サブスクリプションを選択します。 |
リソースグループ |
[新規作成] を選択します。
「test-rg」と入力します。
[OK] を選択します。 |
インスタンスの詳細 |
|
名前 |
「vnet-hub」と入力します。 |
リージョン |
[(米国) 米国中南部] を選択します。 |
[次へ] を選択して、[セキュリティ] タブに進みます。
[セキュリティ] タブの [Azure Bastion] セクションで [Azure Bastion を有効にする] を選択します。
Azure Bastion では、プライベート IP アドレスを使用して Secure Shell (SSH) またはリモート デスクトップ プロトコル (RDP) を介して、仮想ネットワーク内の VM にブラウザーで接続します。 VM には、パブリック IP アドレス、クライアント ソフトウェア、または特別な構成は必要ありません。 Azure Bastion の詳細については、Azure Bastion に関するページをご覧ください。
注
時間単位の価格は、送信データの使用状況に関係なく、Bastion がデプロイされた時点から開始します。 詳しくは、「価格」および「SKU」を参照してください。 チュートリアルまたはテストの一環で Bastion をデプロイする場合は、使用終了後にこのリソースを削除することをお勧めします。
[Azure Bastion] で、次の情報を入力または選択します。
設定 |
値 |
Azure Bastion ホスト名 |
「bastion」と入力します。 |
Azure Bastion のパブリック IP アドレス |
[Create a public IP address] (パブリック IP アドレスを作成する) を選びます。
[名前] に「public-ip-bastion」と入力します。
[OK] を選択します。 |
セキュリティ タブの Azure Firewall セクションで、Azure Firewall を有効にする を選択します。
Azure Firewall は、Azure Virtual Network リソースを保護するクラウドベースのマネージド ネットワーク セキュリティ サービスです。 組み込みの高可用性とクラウドの無制限のスケーラビリティを備えた、完全にステートフルなサービスとしてのファイアウォールです。 Azure Firewall の詳細については、Azure Firewall を参照してください。
Azure Firewall で、以下の情報を入力または選択します:
設定 |
値 |
Azure Firewall 名 |
「firewall」と入力します。 |
レベル |
標準を選択します。 |
ポリシー |
[新規作成] を選択します。
[名前] にfirewall-policyと入力します。
[OK] を選択します。 |
Azure ファイアウォールのパブリック IP アドレス |
[Create a public IP address] (パブリック IP アドレスを作成する) を選びます。
[名前] に public-ip-firewall と入力します。
[OK] を選択します。 |
[次へ] を選択して、[IP アドレス] タブに進みます。
[Review + create](レビュー + 作成) を選択します。
[作成] を選択します
bastion ホストとファイアウォールがデプロイされるまでに数分かかります。 デプロイの一環として仮想ネットワークが作成されたら、次の手順に進むことができます。
New-AzResourceGroup を使用してリソース グループを作成します。
# Create resource group
$rgParams = @{
Name = 'test-rg'
Location = 'South Central US'
}
New-AzResourceGroup @rgParams
New-AzVirtualNetwork を使用してハブ仮想ネットワークを作成します。
# Create hub virtual network
$vnetParams = @{
ResourceGroupName = 'test-rg'
Location = 'South Central US'
Name = 'vnet-hub'
AddressPrefix = '10.0.0.0/16'
}
$hubVnet = New-AzVirtualNetwork @vnetParams
Add-AzVirtualNetworkSubnetConfig を使用して、Azure Firewall と Azure Bastion のサブネットを作成します。
# Create default subnet
$subnetParams = @{
Name = 'subnet-1'
AddressPrefix = '10.0.0.0/24'
VirtualNetwork = $hubVnet
}
Add-AzVirtualNetworkSubnetConfig @subnetParams
# Create subnet for Azure Firewall
$subnetParams = @{
Name = 'AzureFirewallSubnet'
AddressPrefix = '10.0.1.64/26'
VirtualNetwork = $hubVnet
}
Add-AzVirtualNetworkSubnetConfig @subnetParams
# Create subnet for Azure Bastion
$subnetParams = @{
Name = 'AzureBastionSubnet'
AddressPrefix = '10.0.1.0/26'
VirtualNetwork = $hubVnet
}
Add-AzVirtualNetworkSubnetConfig @subnetParams
Set-AzVirtualNetwork を使用して、仮想ネットワークを更新します。
# Create the virtual network
$hubVnet | Set-AzVirtualNetwork
New-AzPublicIpAddress を使用して、Azure Bastion のパブリック IP を作成します。
# Create public IP for Azure Bastion
$publicIpBastionParams = @{
ResourceGroupName = 'test-rg'
Location = 'South Central US'
Name = 'public-ip-bastion'
Sku = 'Standard'
AllocationMethod = 'Static'
Zone = 1, 2, 3
}
$publicIpBastion = New-AzPublicIpAddress @publicIpBastionParams
New-AzBastion を使用して Azure Bastion を作成します。
# Create Azure Bastion
$bastionParams = @{
ResourceGroupName = "test-rg"
Name = "bastion"
VirtualNetworkName = "vnet-hub"
PublicIpAddressName = "public-ip-bastion"
PublicIPAddressRgName = "test-rg"
VirtualNetworkRgName = "test-rg"
}
New-AzBastion @bastionParams
New-AzPublicIpAddress を使用して、Azure Firewall のパブリック IP を作成します。
# Create public IP for Azure Firewall
$publicIpFirewallParams = @{
ResourceGroupName = 'test-rg'
Location = 'South Central US'
Name = 'public-ip-firewall'
AllocationMethod = 'Static'
Sku = 'Standard'
Zone = 1, 2, 3
}
$publicIpFirewall = New-AzPublicIpAddress @publicIpFirewallParams
New-AzFirewallPolicy を使用してファイアウォール ポリシーを作成します。
# Create firewall policy
$firewallPolicyParams = @{
ResourceGroupName = 'test-rg'
Location = 'South Central US'
Name = 'firewall-policy'
}
$firewallPolicy = New-AzFirewallPolicy @firewallPolicyParams
New-AzFirewall を使用して Azure Firewall を作成します。
# Create Azure Firewall
$firewallParams = @{
ResourceGroupName = 'test-rg'
Location = 'South Central US'
Name = 'firewall'
VirtualNetworkName = 'vnet-hub'
PublicIpName = 'public-ip-firewall'
FirewallPolicyId = $firewallPolicy.Id
}
$firewall = New-AzFirewall @firewallParams
az group create を使用してリソース グループを作成します。
# Variables
RESOURCE_GROUP="test-rg"
LOCATION="southcentralus"
az group create \
--name $RESOURCE_GROUP \
--___location $LOCATION
az network vnet create を使用してハブ仮想ネットワークを作成します。
# Variables
RESOURCE_GROUP="test-rg"
VNET_HUB_NAME="vnet-hub"
VNET_HUB_ADDRESS_PREFIX="10.0.0.0/16"
SUBNET_1_NAME="subnet-1"
SUBNET_1_PREFIX="10.0.0.0/24"
az network vnet create \
--resource-group $RESOURCE_GROUP \
--name $VNET_HUB_NAME \
--address-prefix $VNET_HUB_ADDRESS_PREFIX \
--subnet-name $SUBNET_1_NAME \
--subnet-prefix $SUBNET_1_PREFIX
az network vnet subnet create を使用して、Azure Bastion のサブネットを作成します。
# Variables
RESOURCE_GROUP="test-rg"
VNET_HUB_NAME="vnet-hub"
BASTION_SUBNET_NAME="AzureBastionSubnet"
BASTION_SUBNET_PREFIX="10.0.1.0/26"
az network vnet subnet create \
--resource-group $RESOURCE_GROUP \
--vnet-name $VNET_HUB_NAME \
--name $BASTION_SUBNET_NAME \
--address-prefix $BASTION_SUBNET_PREFIX
az network vnet subnet create を使用して、Azure Firewall のサブネットを作成します。
# Variables
RESOURCE_GROUP="test-rg"
VNET_HUB_NAME="vnet-hub"
FIREWALL_SUBNET_NAME="AzureFirewallSubnet"
FIREWALL_SUBNET_PREFIX="10.0.1.64/26"
az network vnet subnet create \
--resource-group $RESOURCE_GROUP \
--vnet-name $VNET_HUB_NAME \
--name $FIREWALL_SUBNET_NAME \
--address-prefix $FIREWALL_SUBNET_PREFIX
az network public-ip create を使用して、Azure Bastion のパブリック IP を作成します。
# Variables
RESOURCE_GROUP="test-rg"
BASTION_PUBLIC_IP_NAME="public-ip-bastion"
ALLOCATION_METHOD="Static"
SKU="Standard"
az network public-ip create \
--resource-group $RESOURCE_GROUP \
--name $BASTION_PUBLIC_IP_NAME \
--allocation-method $ALLOCATION_METHOD \
--sku $SKU
az network bastion create を使用して Azure Bastion を作成します。
# Variables
RESOURCE_GROUP="test-rg"
BASTION_NAME="bastion"
BASTION_PUBLIC_IP_NAME="public-ip-bastion"
VNET_HUB_NAME="vnet-hub"
az network bastion create \
--resource-group $RESOURCE_GROUP \
--name $BASTION_NAME \
--public-ip-address $BASTION_PUBLIC_IP_NAME \
--vnet-name $VNET_HUB_NAME
az network public-ip create を使用して、Azure Firewall のパブリック IP を作成します。
# Variables
RESOURCE_GROUP="test-rg"
FIREWALL_PUBLIC_IP_NAME="public-ip-firewall"
ALLOCATION_METHOD="Static"
SKU="Standard"
az network public-ip create \
--resource-group $RESOURCE_GROUP \
--name $FIREWALL_PUBLIC_IP_NAME \
--allocation-method $ALLOCATION_METHOD \
--sku $SKU
az network firewall policy create を使用してファイアウォール ポリシーを作成します。
# Variables
RESOURCE_GROUP="test-rg"
FIREWALL_POLICY_NAME="firewall-policy"
az network firewall policy create \
--resource-group $RESOURCE_GROUP \
--name $FIREWALL_POLICY_NAME
az network firewall create を使用して Azure Firewall を作成します。
# Variables
RESOURCE_GROUP="test-rg"
FIREWALL_NAME="firewall"
VNET_HUB_NAME="vnet-hub"
FIREWALL_POLICY_NAME="firewall-policy"
FIREWALL_PUBLIC_IP_NAME="public-ip-firewall"
az network firewall create \
--resource-group $RESOURCE_GROUP \
--name $FIREWALL_NAME \
--vnet-name $VNET_HUB_NAME \
--firewall-policy $FIREWALL_POLICY_NAME \
--public-ip $FIREWALL_PUBLIC_IP_NAME
NAT ゲートウェイの作成
すべての送信インターネット トラフィックは、NAT ゲートウェイを経由してインターネットに送られます。 次の例を使用してハブ アンド スポーク ネットワークの NAT ゲートウェイを作成し、それを AzureFirewallSubnet に関連付けます。
ポータルの上部にある検索ボックスに、「NAT ゲートウェイ」と入力します。 検索結果から [NAT ゲートウェイ] を選択します。
[+ 作成] を選択します。
[ネットワーク アドレス変換 (NAT) ゲートウェイを作成します] の [基本] タブで、次の情報を入力または選択します。
設定 |
値 |
プロジェクトの詳細 |
|
サブスクリプション |
サブスクリプションを選択します。 |
リソースグループ |
test-rg を選択します。 |
インスタンスの詳細 |
|
NAT ゲートウェイ名 |
「nat-gateway」と入力します。 |
リージョン |
[米国中南部] を選択します。 |
可用性ゾーン |
[ゾーン] または [ゾーンなし] を選択します。 |
TCP アイドル タイムアウト (分) |
既定値の [4] のままにします。 |
可用性ゾーンについて詳しくは、「NAT ゲートウェイと可用性ゾーン」を参照してください。
[次へ: 送信 IP] を選択します。
[送信 IP] の [パブリック IP アドレス] で [新しいパブリック IP アドレスの作成] を選択します。
[名前] に「public-ip-nat」と入力します。
[OK] を選択します。
[次へ: サブネット] を選択します。
[仮想ネットワーク] で、[vnet-hub] を選択します。
[サブネット名] で [AzureFirewallSubnet] を選択します。
[Review + create](レビュー + 作成) を選択します。
[作成] を選択します
New-AzPublicIpAddress を使用して、NAT ゲートウェイのパブリック IP を作成します。
# Create public IP for NAT gateway
$publicIpNatParams = @{
ResourceGroupName = 'test-rg'
Location = 'southcentralus'
Name = 'public-ip-nat'
AllocationMethod = 'Static'
Sku = 'Standard'
}
$publicIpNat = New-AzPublicIpAddress @publicIpNatParams
New-AzNatGateway を使用して NAT ゲートウェイを作成します。
$natGatewayParams = @{
ResourceGroupName = 'test-rg'
Name = 'nat-gateway'
PublicIpAddress = $publicIpNat
Sku = 'Standard'
IdleTimeoutInMinutes = 4
Location = 'South Central US'
}
$natGateway = New-AzNatGateway @natGatewayParams
Set-AzVirtualNetworkSubnetConfig を使用して、NAT ゲートウェイを AzureFirewallSubnet に関連付けます。
# Get the AzureFirewallSubnet from the hub virtual network
$subnetParams = @{
VirtualNetwork = $hubVnet
Name = 'AzureFirewallSubnet'
}
$subnet = Get-AzVirtualNetworkSubnetConfig @subnetParams
$subnet.NatGateway = $natGateway
# Associate NAT gateway with AzureFirewallSubnet
$subnetParams = @{
VirtualNetwork = $hubVnet
Name = 'AzureFirewallSubnet'
AddressPrefix = '10.0.1.64/26'
NatGateway = $natGateway
}
Set-AzVirtualNetworkSubnetConfig @subnetParams
Set-AzVirtualNetwork を使用して、仮想ネットワークを更新します。
# Update the virtual network
$hubVnet | Set-AzVirtualNetwork
az network public-ip create を使用して、NAT ゲートウェイのパブリック IP を作成します。
# Variables
RESOURCE_GROUP="test-rg"
NAT_PUBLIC_IP_NAME="public-ip-nat"
ALLOCATION_METHOD="Static"
SKU="Standard"
az network public-ip create \
--resource-group $RESOURCE_GROUP \
--name $NAT_PUBLIC_IP_NAME \
--allocation-method $ALLOCATION_METHOD \
--sku $SKU
az network nat gateway create を使用して NAT ゲートウェイを作成します。
# Variables
RESOURCE_GROUP="test-rg"
NAT_GATEWAY_NAME="nat-gateway"
NAT_PUBLIC_IP_NAME="public-ip-nat"
IDLE_TIMEOUT="4"
az network nat gateway create \
--resource-group $RESOURCE_GROUP \
--name $NAT_GATEWAY_NAME \
--public-ip-address $NAT_PUBLIC_IP_NAME \
--idle-timeout $IDLE_TIMEOUT
az network vnet subnet update を使用して、NAT ゲートウェイを AzureFirewallSubnet に関連付けます。
# Variables
RESOURCE_GROUP="test-rg"
VNET_HUB_NAME="vnet-hub"
FIREWALL_SUBNET_NAME="AzureFirewallSubnet"
NAT_GATEWAY_NAME="nat-gateway"
az network vnet subnet update \
--resource-group $RESOURCE_GROUP \
--vnet-name $VNET_HUB_NAME \
--name $FIREWALL_SUBNET_NAME \
--nat-gateway $NAT_GATEWAY_NAME
スポーク仮想ネットワークを作成する
スポーク仮想ネットワークには、NAT ゲートウェイへのインターネット トラフィックのルーティングをテストするために使用されるテスト仮想マシンが含まれます。 次の例を使用してスポーク ネットワークを作成します。
ポータルの上部にある検索ボックスに、「仮想ネットワーク」と入力します。 検索結果で、[仮想ネットワーク] を選択します。
[+ 作成] を選択します。
[仮想ネットワークの作成] の [基本] タブで、次の情報を入力または選択します。
設定 |
値 |
プロジェクトの詳細 |
|
サブスクリプション |
サブスクリプションを選択します。 |
リソースグループ |
test-rg を選択します。 |
インスタンスの詳細 |
|
名前 |
「vnet-spoke」と入力します。 |
リージョン |
[米国中南部] を選択します。 |
[次へ] を選択して、[セキュリティ] タブに進みます。
[次へ] を選択して、[IP アドレス] タブに進みます。
[IP アドレス] タブの [IPv4 アドレス空間] で、[アドレス空間の削除] を選んで、自動的に設定されたアドレス空間を削除します。
[+ IPv4 アドレス空間の追加] を選びます。
IPv4 アドレス空間 に 10.1.0.0 と入力します。 マスクの選択では、既定値の /16 (65,536 アドレス) のままにします。
+ サブネットの追加 を選択します。
サブネットの追加 で、次の情報を入力または選択します:
設定 |
値 |
サブネットの目的 |
既定値の [既定] のままにします。 |
名前 |
「subnet-private」と入力します。 |
IPv4 |
|
IPv4 アドレス範囲 |
既定値の 10.1.0.0/16 のままにします。 |
開始アドレス |
既定値の 10.1.0.0 のままにします。 |
サイズ |
既定値の /24(256 アドレス) のままにします。 |
[追加] を選択します。
[Review + create](レビュー + 作成) を選択します。
[作成] を選択します
New-AzVirtualNetwork を使用して、スポーク仮想ネットワークを作成します。
# Create spoke virtual network
$vnetParams = @{
ResourceGroupName = 'test-rg'
Location = 'South Central US'
Name = 'vnet-spoke'
AddressPrefix = '10.1.0.0/16'
}
$spokeVnet = New-AzVirtualNetwork @vnetParams
Add-AzVirtualNetworkSubnetConfig を使用して、スポーク仮想ネットワークのサブネットを作成します。
# Create subnet in spoke virtual network
$subnetParams = @{
Name = 'subnet-private'
AddressPrefix = '10.1.0.0/24'
VirtualNetwork = $spokeVnet
}
Add-AzVirtualNetworkSubnetConfig @subnetParams
Set-AzVirtualNetwork を使用して、スポーク仮想ネットワークを更新します。
# Create the virtual network
$spokeVnet | Set-AzVirtualNetwork
az network vnet create を使用して、スポーク仮想ネットワークを作成します。
# Variables
RESOURCE_GROUP="test-rg"
VNET_SPOKE_NAME="vnet-spoke"
VNET_SPOKE_ADDRESS_PREFIX="10.1.0.0/16"
SPOKE_SUBNET_NAME="subnet-private"
SPOKE_SUBNET_PREFIX="10.1.0.0/24"
az network vnet create \
--resource-group $RESOURCE_GROUP \
--name $VNET_SPOKE_NAME \
--address-prefix $VNET_SPOKE_ADDRESS_PREFIX \
--subnet-name $SPOKE_SUBNET_NAME \
--subnet-prefix $SPOKE_SUBNET_PREFIX
ハブとスポークの間にピアリングを作成する
ハブをスポークに接続するため、およびスポークをハブに接続するために、仮想ネットワーク ピアリングが使用されます。 次の例を使用して、ハブとスポークの間に双方向のネットワーク ピアリングを作成します。
ポータルの上部にある検索ボックスに、「仮想ネットワーク」と入力します。 検索結果で、[仮想ネットワーク] を選択します。
[vnet-hub] を選択します。
[設定] で [ピアリング] を選択します。
[+ 追加] を選択します。
[ピアリングの追加] で、次の情報を入力するか選びます。
設定 |
値 |
リモート仮想ネットワークの概要 |
|
[Peering link name](ピアリング リンク名) |
「vnet-spoke-to-vnet-hub」と入力します。 |
仮想ネットワークのデプロイ モデル |
既定値の [リソース マネージャー] のままにします。 |
サブスクリプション |
サブスクリプションを選択します。 |
仮想ネットワーク |
[vnet-spoke (test-rg)] を選択します。 |
リモート仮想ネットワーク ピアリングの設定 |
|
'vnet-spoke' に 'vnet-hub' へのアクセスを許可する |
既定値の 選択済みのままにします。 |
'vnet-spoke' が 'vnet-hub' から転送されたトラフィックを受信することを許可する |
チェックボックスを オンにします。 |
'vnet-spoke' のゲートウェイまたはルート サーバーが 'vnet-hub' にトラフィックを転送することを許可する |
既定値の 未選択 のままにします。 |
'vnet-spoke' が 'vnet-hub' のリモート ゲートウェイまたはルート サーバーを使用できるようにする |
既定値の 未選択 のままにします。 |
ローカル仮想ネットワークの概要 |
|
[Peering link name](ピアリング リンク名) |
「vnet-hub-to-vnet-spoke」と入力します。 |
ローカル仮想ネットワーク ピアリングの設定 |
|
'vnet-hub' に 'vnet-spoke' へのアクセスを許可する |
既定値の 選択済みのままにします。 |
'vnet-hub' が 'vnet-spoke' から転送されたトラフィックを受信することを許可する |
チェックボックスを オンにします。 |
'vnet-hub' のゲートウェイまたはルート サーバーが 'vnet-spoke' にトラフィックを転送することを許可する |
既定値の 未選択 のままにします。 |
'vnet-hub' が 'vnet-spoke' のリモート ゲートウェイまたはルート サーバーを使用できるようにする |
既定値の 未選択 のままにします。 |
[追加] を選択します。
[最新の情報に更新] を選択し、[ピアリングの状態] が [接続済み] であることを確認します。
Add-AzVirtualNetworkPeering を使用して、ハブからスポークへのピアリングを作成します。
# Create peering from hub to spoke
$peeringParams = @{
Name = 'vnet-hub-to-vnet-spoke'
VirtualNetwork = $hubVnet
RemoteVirtualNetworkId = $spokeVnet.Id
AllowForwardedTraffic = $true
}
Add-AzVirtualNetworkPeering @peeringParams
Add-AzVirtualNetworkPeering を使用して、スポークからハブへのピアリングを作成します。
# Create peering from spoke to hub
$peeringParams = @{
Name = 'vnet-spoke-to-vnet-hub'
VirtualNetwork = $spokeVnet
RemoteVirtualNetworkId = $hubVnet.Id
AllowForwardedTraffic = $true
}
Add-AzVirtualNetworkPeering @peeringParams
az network vnet peering create を使用して、ハブからスポークへのピアリングを作成します。
# Variables
RESOURCE_GROUP="test-rg"
VNET_HUB_NAME="vnet-hub"
HUB_TO_SPOKE_PEERING_NAME="vnet-hub-to-vnet-spoke"
VNET_SPOKE_NAME="vnet-spoke"
az network vnet peering create \
--resource-group $RESOURCE_GROUP \
--vnet-name $VNET_HUB_NAME \
--name $HUB_TO_SPOKE_PEERING_NAME \
--remote-vnet $VNET_SPOKE_NAME \
--allow-forwarded-traffic
az network vnet peering create を使用して、スポークからハブへのピアリングを作成します。
# Variables
RESOURCE_GROUP="test-rg"
VNET_SPOKE_NAME="vnet-spoke"
SPOKE_TO_HUB_PEERING_NAME="vnet-spoke-to-vnet-hub"
VNET_HUB_NAME="vnet-hub"
az network vnet peering create \
--resource-group $RESOURCE_GROUP \
--vnet-name $VNET_SPOKE_NAME \
--name $SPOKE_TO_HUB_PEERING_NAME \
--remote-vnet $VNET_HUB_NAME \
--allow-forwarded-traffic
スポークのネットワーク ルート テーブルを作成する
ルート テーブルにより、スポーク仮想ネットワークからのすべてのトラフィックがハブ仮想ネットワークへと強制されます。 ルート テーブルは、仮想アプライアンスとして Azure Firewall のプライベート IP アドレスで構成されます。
ファイアウォールのプライベート IP アドレスを取得する
この記事の後半で作成するルート テーブルには、ファイアウォールのプライベート IP アドレスが必要です。 次の例を使用して、ファイアウォールのプライベート IP アドレスを取得します。
ポータルの上部にある検索ボックスに、「Firewall」と入力します。 検索結果で [ファイアウォール] を選択します。
[firewall] を選びます。
[firewall] の [概要] で、[ファイアウォールのプライベート IP] フィールド内の IP アドレスをメモします。 この例の IP アドレスは 10.0.1.68 です。
Get-AzFirewall を使用して、ファイアウォールのプライベート IP アドレスを取得します。
# Get the private IP address of the firewall
$firewallParams = @{
ResourceGroupName = 'test-rg'
Name = 'firewall'
}
$firewall = Get-AzFirewall @firewallParams
$firewall.IpConfigurations[0].PrivateIpAddress
# Get the private IP address of the firewall
az network firewall show \
--resource-group test-rg \
--name firewall \
--query "ipConfigurations[0].privateIpAddress" \
--output tsv
ルート テーブルを作成する
ルート テーブルを作成して、すべてのスポーク間トラフィックとインターネットのエグレス トラフィックがハブ仮想ネットワーク内のファイアウォールを通過するようにします。
ポータルの上部にある検索ボックスに、「ルート テーブル」と入力します。 検索結果で [ルート テーブル] を選択します。
[+ 作成] を選択します。
[ルート テーブルの作成] で、次の情報を入力または選択します。
設定 |
値 |
プロジェクトの詳細 |
|
サブスクリプション |
サブスクリプションを選択します。 |
リソースグループ |
test-rg を選択します。 |
インスタンスの詳細 |
|
リージョン |
[米国中南部] を選択します。 |
名前 |
「route-table-spoke」と入力します。 |
ゲートウェイのルートを伝達する |
このため、 [いいえ] を選択します。 |
[Review + create](レビュー + 作成) を選択します。
[作成] を選択します
ポータルの上部にある検索ボックスに、「ルート テーブル」と入力します。 検索結果で [ルート テーブル] を選択します。
[route-table-spoke] を選択します。
[設定] で [ルート] を選びます。
[ルート] で [+ 追加] を選択します。
[ルートの追加] で、次の情報を入力または選択します。
設定 |
値 |
ルート名 |
「route-to-hub」と入力します。 |
変換先の型 |
[IP アドレス] を選択します。 |
宛先 IP アドレス/CIDR 範囲 |
「0.0.0.0/0」と入力します。 |
ネクストホップの種類 |
[仮想アプライアンス] を選択します。 |
次ホップ アドレス |
10.0.1.68 と入力します。 |
[追加] を選択します。
[設定] の [サブネット] を選択します。
[+ 関連付け] を選択します。
[サブネットの関連付け] で、次の情報を入力または選択します。
設定 |
値 |
仮想ネットワーク |
[vnet-spoke (test-rg)] を選択します。 |
サブネット |
[subnet-private] を選択します。 |
[OK] を選択します。
New-AzRouteTable を使用してルート テーブルを作成します。
# Create route table
$routeTableParams = @{
ResourceGroupName = 'test-rg'
Location = 'South Central US'
Name = 'route-table-spoke'
}
$routeTable = New-AzRouteTable @routeTableParams
Add-AzRouteConfig を使用して、ルート テーブルにルートを作成します。
# Create route
$routeConfigParams = @{
Name = 'route-to-hub'
AddressPrefix = '0.0.0.0/0'
NextHopType = 'VirtualAppliance'
NextHopIpAddress = $firewall.IpConfigurations[0].PrivateIpAddress
RouteTable = $routeTable
}
Add-AzRouteConfig @routeConfigParams
Set-AzRouteTable を使用してルート テーブルを更新します。
# Update the route table
$routeTable | Set-AzRouteTable
Set-AzVirtualNetworkSubnetConfig を使用して、ルート テーブルをスポーク サブネットに関連付けます。
# Associate route table with subnet
$subnetConfigParams = @{
VirtualNetwork = $spokeVnet
Name = 'subnet-private'
AddressPrefix = '10.1.0.0/24'
RouteTable = $routeTable
}
Set-AzVirtualNetworkSubnetConfig @subnetConfigParams
Set-AzVirtualNetwork を使用して、スポーク仮想ネットワークを更新します。
# Update the virtual network
$spokeVnet | Set-AzVirtualNetwork
az network route-table create を使用してルート テーブルを作成します。
# Variables
RESOURCE_GROUP="test-rg"
ROUTE_TABLE_NAME="route-table-spoke"
LOCATION="southcentralus"
az network route-table create \
--resource-group $RESOURCE_GROUP \
--name $ROUTE_TABLE_NAME \
--___location $LOCATION
az network route-table route create を使用してルートを作成します。
# Variables
RESOURCE_GROUP="test-rg"
ROUTE_TABLE_NAME="route-table-spoke"
ROUTE_NAME="route-to-hub"
ADDRESS_PREFIX="0.0.0.0/0"
NEXT_HOP_TYPE="VirtualAppliance"
NEXT_HOP_IP="10.0.1.68"
az network route-table route create \
--resource-group $RESOURCE_GROUP \
--route-table-name $ROUTE_TABLE_NAME \
--name $ROUTE_NAME \
--address-prefix $ADDRESS_PREFIX \
--next-hop-type $NEXT_HOP_TYPE \
--next-hop-ip-address $NEXT_HOP_IP
az network vnet subnet update を使用して、ルート テーブルをサブネットに関連付けます。
# Variables
RESOURCE_GROUP="test-rg"
VNET_SPOKE_NAME="vnet-spoke"
SPOKE_SUBNET_NAME="subnet-private"
ROUTE_TABLE_NAME="route-table-spoke"
az network vnet subnet update \
--resource-group $RESOURCE_GROUP \
--vnet-name $VNET_SPOKE_NAME \
--name $SPOKE_SUBNET_NAME \
--route-table $ROUTE_TABLE_NAME
ファイアウォール ポリシーとネットワーク規則で、ハブを経由するスポークからのトラフィックを許可する必要があります。 次の例を使用して、ファイアウォール ポリシーとネットワーク規則を作成します。
ポータルの上部にある検索ボックスに、「Firewall」と入力します。 検索結果で [ファイアウォール ポリシー] を選択します。
[firewall-policy] を選択します。
[設定] を展開して、[ネットワーク規則] を選びます。
[+ 規則コレクションの追加] を選択します。
[規則コレクションの追加] で、次の情報を入力または選択します。
設定 |
値 |
名前 |
「spoke-to-internet」と入力します |
規則コレクションの種類 |
[ネットワーク] を選択します。 |
優先度 |
「100」と入力します。 |
規則コレクション アクション |
[許可] を選択します。 |
規則コレクション グループ |
[DefaultNetworkRuleCollectionGroup] を選択します。 |
ルール |
|
名前 |
「allow-web」と入力します。 |
送信元の種類 |
[IP Address](IP アドレス) 。 |
source |
「10.1.0.0/24」と入力します。 |
プロトコル |
[TCP] を選択します。 |
ターゲット ポート |
「80,443」と入力します。 |
変換先の型 |
[IP アドレス] を選択します。 |
宛先 |
「*」と入力します |
[追加] を選択します。
Get-AzFirewallPolicy を使用して、既存のファイアウォール ポリシーを取得します。
# Get the existing firewall policy
$firewallPolicyParams = @{
Name = 'firewall-policy'
ResourceGroupName = 'test-rg'
}
$firewallPolicy = Get-AzFirewallPolicy @firewallPolicyParams
New-AzFirewallPolicyNetworkRule を使用してネットワーク ルールを作成します。
# Create a network rule for web traffic
$networkRuleParams = @{
Name = 'allow-internet'
SourceAddress = '10.1.0.0/24'
Protocol = 'TCP'
DestinationAddress = '*'
DestinationPort = '*'
}
$networkRule = New-AzFirewallPolicyNetworkRule @networkRuleParams
New-AzFirewallPolicyFilterRuleCollection を使用して、ネットワーク ルールのルール コレクションを作成します。
# Create a rule collection for the network rule
$ruleCollectionParams = @{
Name = 'spoke-to-internet'
Priority = 100
Rule = $networkRule
ActionType = 'Allow'
}
$ruleCollection = New-AzFirewallPolicyFilterRuleCollection @ruleCollectionParams
New-AzFirewallPolicyRuleCollectionGroup を使用して、ルール コレクション グループを作成します。
$newRuleCollectionGroupParams = @{
Name = 'DefaultNetworkRuleCollectionGroup'
Priority = 200
FirewallPolicyObject = $firewallPolicy
RuleCollection = $ruleCollection
}
New-AzFirewallPolicyRuleCollectionGroup @newRuleCollectionGroupParams
az network firewall policy rule-collection-group create を使用して、ルール コレクション グループを作成します。
# Variables
RULE_COLLECTION_GROUP_NAME="DefaultNetworkRuleCollectionGroup"
FIREWALL_POLICY_NAME="firewall-policy"
RESOURCE_GROUP="test-rg"
PRIORITY="200"
az network firewall policy rule-collection-group create \
--name $RULE_COLLECTION_GROUP_NAME \
--policy-name $FIREWALL_POLICY_NAME \
--resource-group $RESOURCE_GROUP \
--priority $PRIORITY
az network firewall policy rule-collection-group collection add-filter-collection を使用して、ネットワーク規則コレクションを作成します。
# Variables
COLLECTION_NAME="spoke-to-internet"
ACTION="Allow"
RULE_NAME="allow-web"
RULE_TYPE="NetworkRule"
SOURCE_ADDRESSES="10.1.0.0/24"
IP_PROTOCOLS="TCP"
DESTINATION_ADDRESSES="*"
DESTINATION_PORTS="*"
COLLECTION_PRIORITY="100"
FIREWALL_POLICY_NAME="firewall-policy"
RESOURCE_GROUP="test-rg"
RULE_COLLECTION_GROUP_NAME="DefaultNetworkRuleCollectionGroup"
az network firewall policy rule-collection-group collection add-filter-collection \
--name $COLLECTION_NAME \
--action $ACTION \
--rule-name $RULE_NAME \
--rule-type $RULE_TYPE \
--source-addresses $SOURCE_ADDRESSES \
--ip-protocols $IP_PROTOCOLS \
--destination-addresses $DESTINATION_ADDRESSES \
--destination-ports $DESTINATION_PORTS \
--collection-priority $COLLECTION_PRIORITY \
--policy-name $FIREWALL_POLICY_NAME \
--resource-group $RESOURCE_GROUP \
--rule-collection-group-name $RULE_COLLECTION_GROUP_NAME
テスト用の仮想マシンを作成する
Ubuntu 仮想マシンを使用して、NAT ゲートウェイ経由の送信インターネット トラフィックをテストします。 次の例を使用して、Ubuntu 仮想マシンを作成します。
ポータルで、[仮想マシン] を検索して選択します。
[仮想マシン] で [+ 作成]、[Azure 仮想マシン] の順に選択します。
[仮想マシンの作成] の [基本] タブで、次の情報を入力または選択します。
設定 |
値 |
プロジェクトの詳細 |
|
サブスクリプション |
サブスクリプションを選択します。 |
リソースグループ |
test-rg を選択します。 |
インスタンスの詳細 |
|
仮想マシン名 |
「vm-spoke」と入力します。 |
リージョン |
[(米国) 米国中南部] を選択します。 |
可用性のオプション |
[インフラストラクチャ冗長は必要ありません] を選択します。 |
セキュリティの種類 |
規定値である [標準] のままにします。 |
画像 |
[Ubuntu Server 24.04 LTS - x64 Gen2] を選びます。 |
VMアーキテクチャ |
既定値の [x64] のままにします。 |
サイズ |
サイズを選択します。 |
管理者アカウント |
|
認証の種類 |
[パスワード] を選択します。 |
ユーザー名 |
「azureuser」と入力します。 |
パスワード |
パスワードを入力します。 |
パスワードの確認 |
パスワードを再入力します。 |
受信ポートの規則 |
|
パブリック受信ポート |
[なし] を選択します。 |
ページの上部にある [ネットワーク] タブを選ぶか、または [次へ: ディスク] を選んでから [次へ: ネットワーク] を選びます。
[ネットワーク] タブで、次の情報を入力または選択します。
設定 |
値 |
ネットワーク インターフェイス |
|
仮想ネットワーク |
[vnet-spoke] を選択します。 |
サブネット |
[subnet-private (10.1.0.0/24)] を選びます。 |
パブリック IP |
[なし] を選択します。 |
NIC ネットワーク セキュリティ グループ |
[Advanced] \(詳細設定) を選択します。 |
ネットワーク セキュリティ グループを構成する |
[新規作成] を選択します。
名前として「nsg-1」を入力します。
残りの部分は既定値のままにし、[OK] を選択します。 |
残りの設定は既定値のままにし、[確認と作成] を選択します。
設定を確認し、 [作成] を選択します。
次の手順に進む前に、仮想マシンのデプロイが終わるまで待ちます。
注
Bastion ホストがある仮想ネットワーク内の仮想マシンには、パブリック IP アドレスが必要ありません。 Bastion がパブリック IP を提供し、VM はプライベート IP を使用してネットワーク内で通信します。 bastion ホストがある仮想ネットワーク内のいずれの VM からも、パブリック IP を削除できます。 詳細については、「パブリック IP アドレスの関連付けを Azure VM から解除する」を参照してください。
New-AzNetworkSecurityGroup を使用して、ネットワーク セキュリティ グループを作成します。
$nsgParams = @{
ResourceGroupName = "test-rg"
Name = "nsg-1"
Location = "southcentralus"
}
New-AzNetworkSecurityGroup @nsgParams
New-AzNetworkInterface を使用してネットワーク インターフェイスを作成します。
$nicParams = @{
ResourceGroupName = "test-rg"
Name = "nic-1"
SubnetId = (Get-AzVirtualNetwork -ResourceGroupName "test-rg" -Name "vnet-spoke").Subnets[0].Id
NetworkSecurityGroupId = (Get-AzNetworkSecurityGroup -ResourceGroupName "test-rg" -Name "nsg-1").Id
Location = "southcentralus"
}
New-AzNetworkInterface @nicParams
Get-Credential を使用して VM のユーザー名とパスワードを設定し、$cred
変数に格納します。
$cred = Get-Credential
注
VM のユーザー名は必須です。 パスワードは省略可能であり、設定されている場合は使用されません。 Linux VM には SSH キーの構成をお勧めします。
New-AzVMConfig を使用して VM を定義します。
$vmConfigParams = @{
VMName = "vm-spoke"
VMSize = "Standard_DS4_v2"
}
$vmConfig = New-AzVMConfig @vmConfigParams
Set-AzVMOperatingSystem と Set-AzVMSourceImage を使用して、残りの VM 構成を作成します。 次の例では、Ubuntu Server 仮想マシンを作成します。
$osParams = @{
VM = $vmConfig
ComputerName = "vm-spoke"
Credential = $cred
}
$vmConfig = Set-AzVMOperatingSystem @osParams -Linux -DisablePasswordAuthentication
$imageParams = @{
VM = $vmConfig
PublisherName = "Canonical"
Offer = "ubuntu-24_04-lts"
Skus = "server"
Version = "latest"
}
$vmConfig = Set-AzVMSourceImage @imageParams
Add-AzVMNetworkInterface を使用して、前に作成した NIC を VM にアタッチします。
# Get the network interface object
$nicParams = @{
ResourceGroupName = "test-rg"
Name = "nic-1"
}
$nic = Get-AzNetworkInterface @nicParams
$vmConfigParams = @{
VM = $vmConfig
Id = $nic.Id
}
$vmConfig = Add-AzVMNetworkInterface @vmConfigParams
New-AzVM を使用して VM を作成します。 このコマンドは、サインイン用の仮想マシンの SSH キーを生成します。 秘密キーの場所を記録しておきます。 後の手順で Azure Bastion を使って仮想マシンに接続するために、秘密キーが必要です。
$vmParams = @{
VM = $vmConfig
ResourceGroupName = "test-rg"
Location = "southcentralus"
SshKeyName = "ssh-key"
}
New-AzVM @vmParams -GenerateSshKey
az network nsg create を使用して、ネットワーク セキュリティ グループを作成します。
# Variables
RESOURCE_GROUP="test-rg"
NSG_NAME="nsg-1"
LOCATION="southcentralus"
az network nsg create \
--resource-group $RESOURCE_GROUP \
--name $NSG_NAME \
--___location $LOCATION
az network nic create を使用してネットワーク インターフェイスを作成します。
# Variables
RESOURCE_GROUP="test-rg"
NIC_NAME="vm-spoke-nic"
VNET_SPOKE_NAME="vnet-spoke"
SPOKE_SUBNET_NAME="subnet-private"
NSG_NAME="nsg-1"
az network nic create \
--resource-group $RESOURCE_GROUP \
--name $NIC_NAME \
--vnet-name $VNET_SPOKE_NAME \
--subnet $SPOKE_SUBNET_NAME \
--network-security-group $NSG_NAME
az vm create を使用して仮想マシンを作成します。
# Variables
RESOURCE_GROUP="test-rg"
VM_NAME="vm-spoke"
LOCATION="southcentralus"
NIC_NAME="vm-spoke-nic"
VM_IMAGE="Ubuntu2204"
ADMIN_USERNAME="azureuser"
az vm create \
--resource-group $RESOURCE_GROUP \
--name $VM_NAME \
--___location $LOCATION \
--nics $NIC_NAME \
--image $VM_IMAGE \
--admin-username $ADMIN_USERNAME \
--generate-ssh-keys
NAT ゲートウェイをテストする
前の手順で作成した Ubuntu 仮想マシンに接続して、送信インターネット トラフィックが NAT ゲートウェイから送られることを確認します。
NAT ゲートウェイのパブリック IP アドレスを取得する
この記事後半の検証手順のために、NAT ゲートウェイのパブリック IP アドレスを取得します。
ポータルの上部にある検索ボックスに、「パブリック IP」と入力します。 検索結果から [パブリック IP アドレス] を選択します。
[public-ip-nat] を選択します。
[IP アドレス] の値を書き留めます。 この記事で使用する例は、203.0.113.0.25 です。
Get-AzPublicIpAddress を使用して、NAT ゲートウェイのパブリック IP アドレスを取得します。
# Get the public IP address of the NAT gateway
$publicIpNatParams = @{
ResourceGroupName = 'test-rg'
Name = 'public-ip-nat'
}
$publicIpNat = Get-AzPublicIpAddress @publicIpNatParams
$publicIpNat.IpAddress
az network public-ip show を使用して、NAT ゲートウェイのパブリック IP アドレスを取得します。
# Variables
RESOURCE_GROUP="test-rg"
NAT_PUBLIC_IP_NAME="public-ip-nat"
az network public-ip show \
--resource-group $RESOURCE_GROUP \
--name $NAT_PUBLIC_IP_NAME \
--query "ipAddress" \
--output tsv
スポークから NAT ゲートウェイをテストする
ポータルの上部にある検索ボックスに、「仮想マシン」と入力します。 検索結果から [仮想マシン] を選択します。
[vm-spoke] を選択します。
[概要] で、[接続] を選んでから [Bastion 経由で接続] を選びます。
接続の種類として [SSH ] を選択します。 SSH 秘密キー ファイルをアップロードします。
[接続] を選択します。
bash プロンプトで、次のコマンドを入力します。
curl ifconfig.me
コマンドが返す IP アドレスが NAT ゲートウェイのパブリック IP アドレスと一致することを確認します。
azureuser@vm-1:~$ curl ifconfig.me
203.0.113.0.25
vm-spoke への Bastion 接続を閉じます。
作成したリソースの使用が終了したら、リソース グループとそのすべてのリソースを削除して構いません。
Azure portal で、「リソース グループ」を検索して選択します。
[リソース グループ] ページで、test-rg リソース グループを選択します。
[test-rg] ページで、[リソース グループの削除] を選択します。
[削除を確認するために、リソース グループの名前を入力してください] に「test-rg」と入力して、[削除] を選びます。
Remove-AzResourceGroup を使用してリソース グループを削除します。
# Remove resource group
$rgParams = @{
Name = 'test-rg'
}
Remove-AzResourceGroup @rgParams
az group delete を使用してリソース グループを削除します。
# Variables
RESOURCE_GROUP="test-rg"
az group delete \
--name $RESOURCE_GROUP \
--yes \
--no-wait
次のステップ
次の記事に進み、NAT ゲートウェイと Azure Load Balancer を統合する方法について学習してください。