チュートリアル: ネットワーク セキュリティ グループを使用してネットワーク トラフィックをフィルター処理する
[アーティクル] 09/04/2024
13 人の共同作成者
フィードバック
この記事の内容
Azure 仮想ネットワーク内の Azure リソースが送受信するネットワーク トラフィックは、ネットワーク セキュリティ グループを使ってフィルター処理できます。
ネットワーク セキュリティ グループには、IP アドレス、ポート、およびプロトコルでネットワーク トラフィックをフィルター処理するセキュリティ規則が含まれています。 ネットワーク セキュリティ グループがサブネットに関連付けられている場合、そのサブネットにデプロイされたリソースにセキュリティ規則が適用されます。
このチュートリアルでは、次の作業を行う方法について説明します。
ネットワーク セキュリティ グループと規則を作成する
アプリケーション セキュリティ グループを作成する
仮想ネットワークを作成し、ネットワーク セキュリティ グループをサブネットに関連付ける
仮想マシンをデプロイし、そのネットワーク インターフェイスをアプリケーション セキュリティ グループに関連付ける
前提条件
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 キーを選択して、コードまたはコマンドを Cloud Shell セッションに貼り付けます。
Enter キーを選択して、コードまたはコマンドを実行します。
PowerShell をローカルにインストールして使用する場合、この記事では Azure PowerShell モジュール バージョン 1.0.0 以降が必要になります。 インストールされているバージョンを確認するには、Get-Module -ListAvailable Az
を実行します。 アップグレードする必要がある場合は、Azure PowerShell モジュールのインストール に関するページを参照してください。 PowerShell をローカルで実行している場合、Connect-AzAccount
を実行して Azure との接続を作成することも必要です。
Azure サブスクリプション をお持ちでない場合は、開始する前に Azure 無料アカウント を作成してください。
この記事では、Azure CLI のバージョン 2.0.28 以降が必要です。 Azure Cloud Shell を使用している場合は、最新バージョンが既にインストールされています。
以下の手順ではリソース サブネットを持つ仮想ネットワークが作成されます。
ポータルで、[仮想ネットワーク] を検索して選択します。
[仮想ネットワーク] ページで、[+ 作成] を選択します。
[仮想ネットワークの作成] の [基本] タブで、次の情報を入力するか選択します。
設定
値
プロジェクトの詳細
サブスクリプション
サブスクリプションを選択します。
Resource group
[新規作成] を選択します。 [名前] に「test-rg 」と入力します。 [OK] を選択します。
インスタンスの詳細
Name
「vnet-1 」と入力します。
リージョン
[米国東部 2] を選択します。
[次へ] を選択して、[セキュリティ] タブに進みます。
[次へ] を選択して、[IP アドレス] タブに進みます。
[サブネット] のアドレス空間ボックスで、既定 のサブネットを選択します。
[サブネットの編集] ペインで、次の情報を入力または選択します。
設定
値
サブネットの詳細
サブネット テンプレート
既定値は [既定値] のままにします。
Name
「subnet-1 」と入力します。
開始アドレス
既定値の 10.0.0.0 のままにします。
サブネットのサイズ
既定値の /24(256 アドレス) のままにします。
[保存] を選択します。
画面の下部にある [確認および作成] を選択します。 検証に合格した後、 [作成] を選択します。
まず、New-AzureRmResourceGroup を使用して、この記事で作成したすべてのリソースのリソース グループを作成します。 次の例では、westus2 の場所にリソース グループを作成します。
$rg = @{
ResourceGroupName = "test-rg"
Location = "westus2"
}
New-AzResourceGroup @rg
New-AzVirtualNetwork を使用して仮想ネットワークを作成します。 次の例では、vnet-1 という名前の仮想ネットワークを作成します。
$vnet = @{
ResourceGroupName = "test-rg"
Location = "westus2"
Name = "vnet-1"
AddressPrefix = "10.0.0.0/16"
}
$virtualNetwork = New-AzVirtualNetwork @vnet
New-AzVirtualNetworkSubnetConfig を使用してサブネット構成を作成し、Set-AzVirtualNetwork を使用してサブネット構成を仮想ネットワークに書き込みます。 次の例では、subnet-1 という名前のサブネットを仮想ネットワークに追加し、それに nsg-1 ネットワーク セキュリティ グループを関連付けます。
$subnet = @{
Name = "subnet-1"
VirtualNetwork = $virtualNetwork
AddressPrefix = "10.0.0.0/24"
}
Add-AzVirtualNetworkSubnetConfig @subnet
$virtualNetwork | Set-AzVirtualNetwork
まず az group create を使用して、この記事で作成したすべてのリソースのリソース グループを作成します。 次の例では、westus2 の場所にリソース グループを作成します。
az group create \
--name test-rg \
--location westus2
az network vnet create を使用して仮想ネットワークを作成します。 次の例では、vnet-1 という名前の仮想ネットワークを作成します。
az network vnet create \
--name vnet-1 \
--resource-group test-rg \
--address-prefixes 10.0.0.0/16
az network vnet subnet create で、仮想ネットワークにサブネットを追加します。 次の例では、subnet-1 という名前のサブネットを仮想ネットワークに追加し、それに nsg-1 ネットワーク セキュリティ グループを関連付けます。
az network vnet subnet create \
--vnet-name vnet-1 \
--resource-group test-rg \
--name subnet-1 \
--address-prefix 10.0.0.0/24
アプリケーション セキュリティ グループを作成する
アプリケーション セキュリティ グループ (ASG) を使用すると、Web サーバーなど、同様の機能を持つサーバーをグループ化できます。
ポータルの上部にある検索ボックスに、「アプリケーションのセキュリティ グループ」と入力します。 検索結果から [アプリケーションのセキュリティ グループ] を選びます。
[+ 作成] を選択します。
[アプリケーションのセキュリティ グループの作成] の [基本] タブで、この情報を入力または選択します。
設定
値
プロジェクトの詳細
サブスクリプション
サブスクリプションを選択します。
Resource group
test-rg を選択します。
インスタンスの詳細
名前
「asg-web 」と入力します。
リージョン
[米国東部 2] を選択します。
[Review + create](レビュー + 作成) を選択します。
[+ 作成] を選択します。
上記の手順を繰り返し、次の値を指定します。
設定
値
プロジェクトの詳細
サブスクリプション
サブスクリプションを選択します。
Resource group
test-rg を選択します。
インスタンスの詳細
名前
「asg-mgmt 」と入力します。
リージョン
[米国東部 2] を選択します。
[Review + create](レビュー + 作成) を選択します。
[作成] を選択します
New-AzApplicationSecurityGroup を使用して、アプリケーション セキュリティ グループを作成します。 アプリケーション セキュリティ グループを使用すると、同様のポート フィルター処理要件を持つサーバーをグループ化できます。 次の例では、2 つのアプリケーション セキュリティ グループを作成します。
$web = @{
ResourceGroupName = "test-rg"
Name = "asg-web"
Location = "westus2"
}
$webAsg = New-AzApplicationSecurityGroup @web
$mgmt = @{
ResourceGroupName = "test-rg"
Name = "asg-mgmt"
Location = "westus2"
}
$mgmtAsg = New-AzApplicationSecurityGroup @mgmt
az network asg create で、アプリケーション セキュリティ グループを作成します。 アプリケーション セキュリティ グループを使用すると、同様のポート フィルター処理要件を持つサーバーをグループ化できます。 次の例では、2 つのアプリケーション セキュリティ グループを作成します。
az network asg create \
--resource-group test-rg \
--name asg-web \
--location westus2
az network asg create \
--resource-group test-rg \
--name asg-mgmt \
--location westus2
ネットワーク セキュリティ グループの作成
ネットワーク セキュリティ グループ (NSG) は、仮想ネットワーク内のネットワーク トラフィックをセキュリティで保護するものです。
ポータルの上部にある検索ボックスに、「ネットワーク セキュリティ グループ」と入力します。 検索結果から [ネットワーク セキュリティ グループ] を選択します。
注意
[ネットワーク セキュリティ グループ] の検索結果に、[ネットワーク セキュリティ グループ (クラシック)] が表示される場合があります。 ネットワーク セキュリティ グループ を選択します。
[+ 作成] を選択します。
[ネットワーク セキュリティ グループの作成] の [基本] タブで、この情報を入力または選択します。
設定
値
プロジェクトの詳細
サブスクリプション
サブスクリプションを選択します。
Resource group
test-rg を選択します。
インスタンスの詳細
名前
「nsg-1 」と入力します。
場所
[米国東部 2] を選択します。
[Review + create](レビュー + 作成) を選択します。
[作成] を選択します
New-AzNetworkSecurityGroup を使用して、ネットワーク セキュリティ グループを作成します。 次の例では、nsg-1 という名前のネットワーク セキュリティ グループを作成します。
$nsgParams = @{
ResourceGroupName = "test-rg"
Location = "westus2"
Name = "nsg-1"
}
$nsg = New-AzNetworkSecurityGroup @nsgParams
az network nsg create で、ネットワーク セキュリティ グループを作成します。 次の例では、nsg-1 という名前のネットワーク セキュリティ グループを作成します。
# Create a network security group
az network nsg create \
--resource-group test-rg \
--name nsg-1
ネットワーク セキュリティ グループをサブネットに関連付ける
このセクションでは、先ほど作成した仮想ネットワークのサブネットにネットワーク セキュリティ グループを関連付けます。
ポータルの上部にある検索ボックスに、「ネットワーク セキュリティ グループ」と入力します。 検索結果から [ネットワーク セキュリティ グループ] を選択します。
[nsg-1] を選択します。
[nsg-1] の [設定] セクションから [サブネット] を選択します。
[サブネット] ページで [+ 関連付け] を選択します。
[サブネットの関連付け] で [仮想ネットワーク] として [vnet-1 (test-rg)] を選択します。
[サブネット] として [subnet-1] を選択した後に、[OK] を選択します。
Get-AzVirtualNetwork を使用して仮想ネットワーク オブジェクトを取得し、Set-AzVirtualNetworkSubnetConfig を使用してネットワーク セキュリティ グループをサブネットに関連付けます。 次の例では、仮想ネットワーク オブジェクトを取得し、サブネット構成を更新してネットワーク セキュリティ グループを関連付けます。
# Retrieve the virtual network
$vnet = Get-AzVirtualNetwork -Name "vnet-1" -ResourceGroupName "test-rg"
# Update the subnet configuration to associate the network security group
$subnetConfigParams = @{
VirtualNetwork = $vnet
Name = "subnet-1"
AddressPrefix = $vnet.Subnets[0].AddressPrefix
NetworkSecurityGroup = Get-AzNetworkSecurityGroup -Name "nsg-1" -ResourceGroupName "test-rg"
}
Set-AzVirtualNetworkSubnetConfig @subnetConfigParams
# Update the virtual network with the new subnet configuration
$vnet | Set-AzVirtualNetwork
az network vnet subnet update を使用して、ネットワーク セキュリティ グループをサブネットに関連付けます。 次の例では、nsg-1 ネットワーク セキュリティ グループを subnet-1 サブネットに関連付けます。
az network vnet subnet update \
--resource-group test-rg \
--vnet-name vnet-1 \
--name subnet-1 \
--network-security-group nsg-1
セキュリティ規則を作成する
[nsg-1] の [設定] セクションから [受信セキュリティ規則] を選択します。
[受信セキュリティ規則] ページで [+ 追加] を選択します。
asg-web アプリケーション セキュリティ グループに、ポート 80 と 443 を許可するセキュリティ規則を作成します。 [受信セキュリティ規則の追加] ページで、次の情報を入力するか選択します。
設定
値
source
既定値の [Any](すべて) のままにします。
Source port ranges
既定値の (*) のままにします。
到着地
[アプリケーションのセキュリティ グループ] を選択します。
宛先アプリケーションのセキュリティ グループ
[asg-web] を選択します。
サービス
既定値の [Custom](カスタム) のままにします。
宛先ポート範囲
「80,443 」と入力します。
Protocol
[TCP] を選択します。
アクション
既定値の [Allow](許可) のままにします。
Priority
既定値の [100] のままにします。
名前
「allow-web-all 」と入力します。
[追加] を選択します。
次の情報を使用して、前の手順を完了します。
設定
値
source
既定値の [Any](すべて) のままにします。
Source port ranges
既定値の (*) のままにします。
到着地
[アプリケーションのセキュリティ グループ] を選択します。
宛先アプリケーションのセキュリティ グループ
[asg-mgmt] を選択します。
サービス
[RDP] を選択します。
アクション
既定値の [Allow](許可) のままにします。
Priority
既定値の [110] のままにします。
名前
「allow-rdp-all 」と入力します。
[追加] を選択します。
注意
この記事では、asg-mgmt アプリケーション セキュリティ グループに割り当てられている VM では、RDP (ポート 3389) がインターネットに公開されています。
運用環境では、ポート 3389 をインターネットに公開せずに、VPN、プライベート ネットワーク接続、または Azure Bastion を使用して、管理する Azure リソースに接続することをお勧めします。
Azure Bastion の詳細については、「Azure Bastion とは 」を参照してください。
New-AzNetworkSecurityRuleConfig を使用してセキュリティ規則を作成します。 次の例では、インターネットから asg-web アプリケーション セキュリティ グループへの、ポート 80 と 443 経由の受信トラフィックを許可する規則を作成します。
$webAsgParams = @{
Name = "asg-web"
ResourceGroupName = "test-rg"
}
$webAsg = Get-AzApplicationSecurityGroup @webAsgParams
$webRuleParams = @{
Name = "Allow-Web-All"
Access = "Allow"
Protocol = "Tcp"
Direction = "Inbound"
Priority = 100
SourceAddressPrefix = "Internet"
SourcePortRange = "*"
DestinationApplicationSecurityGroupId = $webAsg.id
DestinationPortRange = 80,443
}
$webRule = New-AzNetworkSecurityRuleConfig @webRuleParams
次の例では、インターネットから asg-mgmt アプリケーション セキュリティ グループへの、ポート 3389 経由の受信トラフィックを許可する規則を作成します。
$mgmtAsgParams = @{
Name = "asg-mgmt"
ResourceGroupName = "test-rg"
}
$mgmtAsg = Get-AzApplicationSecurityGroup @mgmtAsgParams
$mgmtRuleParams = @{
Name = "Allow-RDP-All"
Access = "Allow"
Protocol = "Tcp"
Direction = "Inbound"
Priority = 110
SourceAddressPrefix = "Internet"
SourcePortRange = "*"
DestinationApplicationSecurityGroupId = $mgmtAsg.id
DestinationPortRange = 3389
}
$mgmtRule = New-AzNetworkSecurityRuleConfig @mgmtRuleParams
Get-AzNetworkSecurityGroup を使用して既存のネットワーク セキュリティ グループを取得し、+=
演算子を使用して新しい規則を追加します。 最後に、Set-AzNetworkSecurityGroup を使用してネットワーク セキュリティ グループを更新します。
# Retrieve the existing network security group
$nsg = Get-AzNetworkSecurityGroup -Name "nsg-1" -ResourceGroupName "test-rg"
# Add the new rules to the security group
$nsg.SecurityRules += $webRule
$nsg.SecurityRules += $mgmtRule
# Update the network security group with the new rules
Set-AzNetworkSecurityGroup -NetworkSecurityGroup $nsg
注意事項
この記事では、asg-mgmt アプリケーション セキュリティ グループに割り当てられている VM では、RDP (ポート 3389) がインターネットに公開されています。
運用環境では、ポート 3389 をインターネットに公開せずに、VPN、プライベート ネットワーク接続、または Azure Bastion を使用して、管理する Azure リソースに接続することをお勧めします。
Azure Bastion の詳細については、「Azure Bastion とは 」を参照してください。
az network nsg rule create でセキュリティ規則を作成します。 次の例では、インターネットから asg-web アプリケーション セキュリティ グループへの、ポート 80 と 443 経由の受信トラフィックを許可する規則を作成します。
az network nsg rule create \
--resource-group test-rg \
--nsg-name nsg-1 \
--name Allow-Web-All \
--access Allow \
--protocol Tcp \
--direction Inbound \
--priority 100 \
--source-address-prefix Internet \
--source-port-range "*" \
--destination-asgs "asg-web" \
--destination-port-range 80 443
次の例では、インターネットから asg-mgmt アプリケーション セキュリティ グループへの、ポート 22 経由の受信トラフィックを許可する規則を作成します。
az network nsg rule create \
--resource-group test-rg \
--nsg-name nsg-1 \
--name Allow-SSH-All \
--access Allow \
--protocol Tcp \
--direction Inbound \
--priority 110 \
--source-address-prefix Internet \
--source-port-range "*" \
--destination-asgs "asg-mgmt" \
--destination-port-range 22
注意事項
この記事では、asg-mgmt アプリケーション セキュリティ グループに割り当てられている VM では、SSH (ポート 22) がインターネットに公開されています。
運用環境では、ポート 22 をインターネットに公開せずに、VPN、プライベート ネットワーク接続、または Azure Bastion を使用して、管理する Azure リソースに接続することをお勧めします。
Azure Bastion の詳細については、「Azure Bastion とは 」を参照してください。
仮想マシンを作成する
仮想ネットワーク内に 2 つの仮想マシン (VM) を作成します。
ポータルで、[仮想マシン] を検索して選択します。
[仮想マシン] で [+ 作成] 、[Azure 仮想マシン] の順に選択します。
[仮想マシンの作成] の [基本] タブで、この情報を入力または選択します。
設定
値
プロジェクトの詳細
サブスクリプション
サブスクリプションを選択します。
Resource group
test-rg を選択します。
インスタンスの詳細
仮想マシン名
「vm-web 」と入力します。
リージョン
[(米国) 米国東部 2] を選択します。
可用性のオプション
既定値の [インフラストラクチャ冗長は必要ありません] のままにします。
セキュリティの種類
[Standard] を選択します。
Image
[Windows Server 2022 Datacenter - x64 Gen2] を選択します。
Azure Spot インスタンス
既定値のオフのままにします。
サイズ
サイズを選択します。
管理者アカウント
ユーザー名
ユーザー名を入力します。
Password
パスワードを入力します。
パスワードの確認
パスワードを再入力します。
受信ポートの規則
受信ポートの選択
[なし] を選択します。
[次へ: ディスク] 、[次へ: ネットワーク] の順に選択します。
[ネットワーク] タブで、次の情報を入力または選択します。
設定
値
ネットワーク インターフェイス
仮想ネットワーク
[vnet-1] を選択します。
Subnet
subnet-1 (10.0.0.0/24) を選択します。
パブリック IP
新しいパブリック IP の既定値をそのまま使用します。
NIC ネットワーク セキュリティ グループ
[なし] を選択します。
[Review + create](確認と作成) タブを選択するか、ページの下部にある青色の [Review + create](確認と作成) ボタンを選択します。
[作成] を選択します VM のデプロイには数分かかることがあります。
前の手順を繰り返して、vm-mgmt という名前の 2 つ目の仮想マシンを作成します。
VM を作成する前に、Get-AzVirtualNetwork を使用して、サブネットと共に仮想ネットワーク オブジェクトを取得します。
$virtualNetworkParams = @{
Name = "vnet-1"
ResourceGroupName = "test-rg"
}
$virtualNetwork = Get-AzVirtualNetwork @virtualNetworkParams
New-AzPublicIpAddress を使用して、各 VM のパブリック IP アドレスを作成します。
$publicIpWebParams = @{
AllocationMethod = "Static"
ResourceGroupName = "test-rg"
Location = "westus2"
Name = "public-ip-vm-web"
}
$publicIpWeb = New-AzPublicIpAddress @publicIpWebParams
$publicIpMgmtParams = @{
AllocationMethod = "Static"
ResourceGroupName = "test-rg"
Location = "westus2"
Name = "public-ip-vm-mgmt"
}
$publicIpMgmt = New-AzPublicIpAddress @publicIpMgmtParams
New-AzNetworkInterface によって 2 つのネットワーク インターフェイスを作成し、パブリック IP アドレスをネットワーク インターフェイスに割り当てます。 次の例では、ネットワーク インターフェイスを作成し、public-ip-vm-web パブリック IP アドレスをそれに関連付けます。
$webNicParams = @{
Location = "westus2"
Name = "vm-web-nic"
ResourceGroupName = "test-rg"
SubnetId = $virtualNetwork.Subnets[0].Id
PublicIpAddressId = $publicIpWeb.Id
}
$webNic = New-AzNetworkInterface @webNicParams
次の例では、ネットワーク インターフェイスを作成し、public-ip-vm-mgmt パブリック IP アドレスをそれに関連付けます。
$mgmtNicParams = @{
Location = "westus2"
Name = "vm-mgmt-nic"
ResourceGroupName = "test-rg"
SubnetId = $virtualNetwork.Subnets[0].Id
PublicIpAddressId = $publicIpMgmt.Id
}
$mgmtNic = New-AzNetworkInterface @mgmtNicParams
仮想ネットワークに 2 つの VM を作成して、後でトラフィックのフィルター処理を検証できるようにします。
New-AzVMConfig を使用して VM 構成を作成し、New-AzVM を使用して VM を作成します。 次の例では、Web サーバーとして機能する VM を作成します。 -AsJob
オプションを使用すると、VM はバックグラウンドで作成されるため、次の手順に進むことができます。
# Create user object
$cred = Get-Credential -Message "Enter a username and password for the virtual machine."
$webVmConfigParams = @{
VMName = "vm-web"
VMSize = "Standard_DS1_V2"
}
$vmOSParams = @{
ComputerName = "vm-web"
Credential = $cred
}
$vmImageParams = @{
PublisherName = "MicrosoftWindowsServer"
Offer = "WindowsServer"
Skus = "2022-Datacenter"
Version = "latest"
}
$webVmConfig = New-AzVMConfig @webVmConfigParams | Set-AzVMOperatingSystem -Windows @vmOSParams | Set-AzVMSourceImage @vmImageParams | Add-AzVMNetworkInterface -Id $webNic.Id
$webVmParams = @{
ResourceGroupName = "test-rg"
Location = "westus2"
VM = $webVmConfig
}
New-AzVM @webVmParams -AsJob
管理サーバーとして機能する VM を作成します。
# Create user object
$cred = Get-Credential -Message "Enter a username and password for the virtual machine."
$webVmConfigParams = @{
VMName = "vm-mgmt"
VMSize = "Standard_DS1_V2"
}
$vmOSParams = @{
ComputerName = "vm-mgmt"
Credential = $cred
}
$vmImageParams = @{
PublisherName = "MicrosoftWindowsServer"
Offer = "WindowsServer"
Skus = "2022-Datacenter"
Version = "latest"
}
$mgmtVmConfig = New-AzVMConfig @webVmConfigParams | Set-AzVMOperatingSystem -Windows @vmOSParams | Set-AzVMSourceImage @vmImageParams | Add-AzVMNetworkInterface -Id $mgmtNic.Id
$mgmtVmParams = @{
ResourceGroupName = "test-rg"
Location = "westus2"
VM = $mgmtVmConfig
}
New-AzVM @mgmtVmParams
仮想マシンの作成には、数分かかります。 Azure で VM の作成が完了するまで、次の手順に進まないでください。
仮想ネットワークに 2 つの VM を作成して、後でトラフィックのフィルター処理を検証できるようにします。
az vm create を使用して VM を作成します。 次の例では、Web サーバーとして機能する VM を作成します。 --nsg ""
オプションを指定すると、VM の作成時に、作成するネットワーク インターフェイス用に既定のネットワーク セキュリティ グループが作成されるのを回避します。 コマンドでは、VM 用のパスワードの作成を求められます。 この例では、この記事の以降の手順を容易にするため、SSH キーは使いません。 運用環境では、セキュリティのために SSH キーを使ってください。
az vm create \
--resource-group test-rg \
--name vm-web \
--image Ubuntu2204 \
--vnet-name vnet-1 \
--subnet subnet-1 \
--nsg "" \
--admin-username azureuser \
--authentication-type password \
--assign-identity
VM の作成には数分かかります。 VM が作成されると、次の例のような出力が返されます。
{
"fqdns": "",
"id": "/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/test-rg/providers/Microsoft.Compute/virtualMachines/vm-web",
"location": "westus2",
"macAddress": "00-0D-3A-23-9A-49",
"powerState": "VM running",
"privateIpAddress": "10.0.0.4",
"publicIpAddress": "203.0.113.24",
"resourceGroup": "test-rg"
}
az vm create を使用して VM を作成します。 次の例では、管理サーバーとして機能する VM を作成します。
次の例では、VM を作成し、ユーザー アカウントを追加します。 --generate-ssh-keys
パラメーターを指定すると、CLI は ~/.ssh
で使用可能な SSH キーを検索します。 見つかった場合は、そのキーが使われます。 見つからない場合は、キーが生成され、~/.ssh
に格納されます。 最後に、最新の Ubuntu 22.04
イメージをデプロイします。
az vm create \
--resource-group test-rg \
--name vm-mgmt \
--image Ubuntu2204 \
--vnet-name vnet-1 \
--subnet subnet-1 \
--nsg "" \
--admin-username azureuser \
--generate-ssh-keys \
--assign-identity
VM の作成には数分かかります。 Azure で VM の作成が完了するまで、次の手順に進まないでください。
ネットワーク インターフェイスを ASG に関連付ける
VM を作成したとき、Azure では各 VM 用のネットワーク インターフェイスが作成され、それが VM に接続されました。
各 VM 用のネットワーク インターフェイスを、前に作成したアプリケーション セキュリティ グループの 1 つに追加します。
ポータルの上部にある検索ボックスに、「仮想マシン 」と入力します。 検索結果から [仮想マシン] を選択してから、[vm-web] を選択します。
[vm-web] の [ネットワーク] セクションから [アプリケーション セキュリティ グループ] を選択します。
[アプリケーション セキュリティのグループの追加] を選択し、[アプリケーション セキュリティのグループの追加] タブで [asg-web] を選択します。 最後に、[追加] を選択します。
vm-mgmt に対して前の手順を繰り返し、[アプリケーション セキュリティのグループの追加] タブで [asg-mgmt] を選択します。
Get-AzNetworkInterface を使用して仮想マシンのネットワーク インターフェイスを取得し、Get-AzApplicationSecurityGroup を使用してアプリケーション セキュリティ グループを取得します。 最後に、Set-AzNetworkInterface を使用して、アプリケーション セキュリティ グループをネットワーク インターフェイスに関連付けます。 次の例では、asg-web アプリケーション セキュリティ グループを vm-web-nic ネットワーク インターフェイスに関連付けます。
$params1 = @{
Name = "vm-web-nic"
ResourceGroupName = "test-rg"
}
$nic = Get-AzNetworkInterface @params1
$params2 = @{
Name = "asg-web"
ResourceGroupName = "test-rg"
}
$asg = Get-AzApplicationSecurityGroup @params2
$nic.IpConfigurations[0].ApplicationSecurityGroups = @($asg)
$params3 = @{
NetworkInterface = $nic
}
Set-AzNetworkInterface @params3
コマンドを繰り返して、asg-mgmt アプリケーション セキュリティ グループを vm-mgmt-nic ネットワーク インターフェイスに関連付けます。
$params1 = @{
Name = "vm-mgmt-nic"
ResourceGroupName = "test-rg"
}
$nic = Get-AzNetworkInterface @params1
$params2 = @{
Name = "asg-mgmt"
ResourceGroupName = "test-rg"
}
$asg = Get-AzApplicationSecurityGroup @params2
$nic.IpConfigurations[0].ApplicationSecurityGroups = @($asg)
$params3 = @{
NetworkInterface = $nic
}
Set-AzNetworkInterface @params3
az network nic update を使用して、ネットワーク インターフェイスをアプリケーション セキュリティ グループに関連付けます。 次の例では、asg-web アプリケーション セキュリティ グループを vm-web-nic ネットワーク インターフェイスに関連付けます。
# Retrieve the network interface name associated with the virtual machine
nic_name=$(az vm show --resource-group test-rg --name vm-web --query 'networkProfile.networkInterfaces[0].id' -o tsv | xargs basename)
# Associate the application security group with the network interface
az network nic ip-config update \
--name ipconfigvm-web \
--nic-name $nic_name \
--resource-group test-rg \
--application-security-groups asg-web
コマンドを繰り返して、asg-mgmt アプリケーション セキュリティ グループを vm-mgmt-nic ネットワーク インターフェイスに関連付けます。
# Retrieve the network interface name associated with the virtual machine
nic_name=$(az vm show --resource-group test-rg --name vm-mgmt --query 'networkProfile.networkInterfaces[0].id' -o tsv | xargs basename)
# Associate the application security group with the network interface
az network nic ip-config update \
--name ipconfigvm-mgmt \
--nic-name $nic_name \
--resource-group test-rg \
--application-security-groups asg-mgmt
トラフィック フィルターをテストする
ポータルの上部にある検索ボックスに、「仮想マシン 」と入力します。 検索結果から [仮想マシン] を選択します。
vm-mgmt を選択します。
[概要] ページで [接続] ボタンを選択してから [ネイティブ RDP] を選択します。
[RDP ファイルのダウンロード] を選択します。
ダウンロードした RDP ファイルを開き、 [接続] を選択します。 VM の作成時に指定したユーザー名とパスワードを入力します。
[OK] を選択します。
接続処理中に証明書の警告が表示される場合があります。 警告が表示されたら、 [はい] または [続行] を選択して接続処理を続行します。
この接続は成功します。インターネットからの asg-mgmt アプリケーション セキュリティ グループへの受信トラフィックが、ポート 3389 経由で許可されているためです。
vm-mgmt のネットワーク インターフェイスは asg-mgmt アプリケーション セキュリティ グループに関連付けられ、接続を許可します。
vm-mgmt 上の PowerShell セッションを開きます。次を使用して vm-web に接続します。
mstsc /v:vm-web
vm-mgmt から vm-web への RDP 接続は成功します。既定では、同じネットワーク内の仮想マシンが任意のポートで相互に通信できるためです。
インターネットから vm-web 仮想マシンへの RDP 接続を作成することはできません。 asg-web のセキュリティ規則により、インターネットからポート 3389 への受信接続は拒否されます。 既定では、インターネットからのインバウンド トラフィックはすべてのリソースに対して拒否されます。
vm-web 仮想マシンに Microsoft IIS をインストールするには、vm-web 仮想マシンの PowerShell セッションから次のコマンドを入力します。
Install-WindowsFeature -name Web-Server -IncludeManagementTools
IIS のインストールが完了したら、vm-web 仮想マシンから切断します。vm-mgmt 仮想マシンのリモート デスクトップ接続は保持されます。
vm-mgmt VM から切断します。
ポータルの検索ボックスで vm-web を検索します。
vm-web の [概要] ページで、VM の [パブリック IP アドレス] をメモします。 次の例に示されているアドレスは 203.0.113.103 です。 実際のアドレスは異なります。
インターネットから vm-web Web サーバーにアクセスできることを確認するには、コンピューターでインターネット ブラウザーを開き、http://<public-ip-address-from-previous-step>
にアクセスします。
IIS の既定のページが表示されます。インターネットからの asg-web アプリケーション セキュリティ グループへの受信トラフィックがポート 80 経由で許可されているためです。
vm-web に対してアタッチされたネットワーク インターフェイスは asg-web アプリケーション セキュリティ グループに関連付けられ、接続を許可します。
Get-AzPublicIpAddress を使用して、VM のパブリック IP アドレスを返します。 次の例では、vm-mgmt VM のパブリック IP アドレスを返しています。
$params = @{
Name = "public-ip-vm-mgmt"
ResourceGroupName = "test-rg"
}
$publicIP = Get-AzPublicIpAddress @params | Select IpAddress
次のコマンドを使用して、ローカル コンピューターから、vm-mgmt VM とのリモート デスクトップ セッションを作成します。
mstsc /v:$publicIP
VM の作成時に指定したユーザー名とパスワードを入力し (VM の作成時に入力した資格情報を指定するために、[その他] 、[別のアカウントを使用する] の選択が必要になる場合があります)、[OK] を選択します。 サインイン処理中に証明書の警告が表示される場合があります。 [はい] を選択して、接続処理を続行します。
接続は成功します。 ポート 3389 でインターネットから asg-mgmt アプリケーション セキュリティ グループへの受信が許可されています。 vm-mgmt VM にアタッチされているネットワーク インターフェイスが、このグループ内にあります。
PowerShell から次のコマンドを使用して、vm-mgmt VM から vm-web VM へのリモート デスクトップ接続を作成します。
mstsc /v:vm-web
各ネットワーク セキュリティ グループ内の既定のセキュリティ規則では、仮想ネットワーク内のすべての IP アドレス間で、すべてのポートを介したトラフィックが許可されるため、この接続は成功します。 asg-web のセキュリティ規則は、インターネットからのポート 3389 を介した受信を許可しないため、インターネットから vm-web VM へのリモート デスクトップ接続を作成することはできません。
PowerShell から次のコマンドを使用して、Microsoft IIS を vm-web VM にインストールします。
Install-WindowsFeature -name Web-Server -IncludeManagementTools
IIS のインストールが完了したら、vm-web VM から切断します。vm-mgmt VM のリモート デスクトップ接続は保持されます。 IIS のようこそ画面を表示するには、インターネット ブラウザーを開き、http://vm-web. にアクセスします。
vm-mgmt VM から切断します。
コンピューターで PowerShell から次のコマンドを入力し、vm-web サーバーのパブリック IP アドレスを取得します。
$params = @{
Name = "public-ip-vm-web"
ResourceGroupName = "test-rg"
}
Get-AzPublicIpAddress @params | Select IpAddress
Azure の外部から vm-web Web サーバーにアクセスできることを確認するには、コンピューターでインターネット ブラウザーを開き、http://<public-ip-address-from-previous-step>
にアクセスします。 接続は成功します。 ポート 80 でインターネットから asg-web アプリケーション セキュリティ グループへの受信が許可されています。 vm-web VM にアタッチされているネットワーク インターフェイスが、このグループ内にあります。
任意の SSH クライアントを使用して、前に作成した VM に接続します。 たとえば、Linux 用 Windows サブシステム などのコマンド ライン インターフェイスから次のコマンドを使って、vm-mgmt VM との SSH セッションを作成できます。 Microsoft Entra ID 資格情報を使って仮想マシンにサインインすることも、VM の作成に使用した SSH キーを使うこともできます。 次の例では、SSH キーを使って管理 VM にサインインした後、管理 VM からパスワードを使って Web VM にサインインします。
Linux VM に SSH 接続し、Microsoft Entra ID でサインインする方法の詳細については、「Microsoft Entra ID と OpenSSH を使用して Azure の Linux 仮想マシンにサインインする 」を参照してください。
SSH を実行するために VM の IP アドレスを格納する
次のコマンドを実行し、VM の IP アドレスを環境変数として格納します。
export IP_ADDRESS=$(az vm show --show-details --resource-group test-rg --name vm-mgmt --query publicIps --output tsv)
ssh -o StrictHostKeyChecking=no azureuser@$IP_ADDRESS
vm-mgmt VM にアタッチされているネットワーク インターフェイスが、インターネットからのポート 22 での受信を許可する asg-mgmt アプリケーション セキュリティ グループ内にあるため、接続は成功します。
次のコマンドを使って、vm-mgmt VM から vm-web VM に SSH 接続します。
ssh -o StrictHostKeyChecking=no azureuser@vm-web
各ネットワーク セキュリティ グループ内の既定のセキュリティ規則では、仮想ネットワーク内のすべての IP アドレス間で、すべてのポートを介したトラフィックが許可されるため、この接続は成功します。 asg-web のセキュリティ規則では、インターネットからのポート 22 での受信が許可されていないため、インターネットから vm-web VM に SSH 接続することはできません。
次のコマンドを使って、vm-web VM に nginx Web サーバーをインストールします。
# Update package source
sudo apt-get -y update
# Install NGINX
sudo apt-get -y install nginx
既定のセキュリティ規則ではインターネットへの送信トラフィックがすべて許可されるため、vm-web VM はインターネットに送信して nginx を取得できます。 vm-web SSH セッションを終了すると、vm-mgmt VM の username@vm-mgmt:~$
プロンプトに戻ります。 vm-web VM から nginx のようこそ画面を取得するには、次のコマンドを入力します。
curl vm-web
vm-mgmt VM からサインアウトします。 Azure の外部から vm-web Web サーバーにアクセスできることを確認するには、自分のコンピューターから curl <publicIpAddress>
と入力します。 vm-web VM にアタッチされているネットワーク インターフェイスが含まれる asg-web アプリケーション セキュリティ グループでは、インターネットからのポート 80 での受信が許可されているため、接続は成功します。
作成したリソースの使用が終了したら、リソース グループとそのすべてのリソースを削除して構いません。
Azure portal で、「リソース グループ 」を検索して選択します。
[リソース グループ] ページで、test-rg リソース グループを選択します。
[test-rg] ページで、[リソース グループの削除] を選択します。
[削除を確認するために、リソース グループの名前を入力してください] に「test-rg 」と入力して、[削除] を選びます。
必要なくなったら、Remove-AzResourceGroup を使用して、リソース グループとその中のすべてのリソースを削除できます。
$params = @{
Name = "test-rg"
Force = $true
}
Remove-AzResourceGroup @params
不要になったら、az group delete を使用して、リソース グループとそのグループに含まれているすべてのリソースを削除します。
az group delete \
--name test-rg \
--yes \
--no-wait
次のステップ
このチュートリアルでは、次の作業を行いました。
ネットワーク セキュリティ グループを作成し、それを仮想ネットワーク サブネットに関連付けました。
Web および管理用のアプリケーション セキュリティ グループを作成しました。
2 つの仮想マシンを作成し、そのネットワーク インターフェイスをアプリケーション セキュリティ グループに関連付けます。
アプリケーション セキュリティ グループのネットワーク フィルターをテストしました。
ネットワーク セキュリティ グループについて詳しくは、ネットワーク セキュリティ グループの概要 とネットワーク セキュリティ グループの管理 に関する記事を参照してください。
Azure の既定では、サブネット間でトラフィックがルーティングされます。 代わりに、たとえばファイアウォールとして機能する VM を介してサブネット間でトラフィックをルーティングすることもできます。
ルート テーブルを作成する方法を学習するには、次のチュートリアルに進んでください。