ネットワーク セキュリティ グループと PowerShell を使用してネットワーク トラフィックをフィルター処理する
ネットワーク セキュリティ グループを使用して、仮想ネットワーク サブネットとの間で送受信されるネットワーク トラフィックをフィルター処理できます。 ネットワーク セキュリティ グループには、IP アドレス、ポート、およびプロトコルでネットワーク トラフィックをフィルター処理するセキュリティ規則が含まれています。 セキュリティ規則は、サブネットに展開されたリソースに適用されます。 この記事では、次の方法について説明します。
- ネットワーク セキュリティ グループと規則を作成する
- 仮想ネットワークを作成し、ネットワーク セキュリティ グループをサブネットに関連付ける
- 仮想マシン (VM) をサブネットに展開する
- トラフィック フィルターをテストする
Azure サブスクリプションをお持ちでない場合は、開始する前に 無料アカウント を作成してください。
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 との接続を作成することも必要です。
ネットワーク セキュリティ グループの作成
ネットワーク セキュリティ グループにはセキュリティ規則が含まれています。 セキュリティ規則には、送信元と送信先が指定されています。 送信元と送信先にはアプリケーション セキュリティ グループを指定できます。
アプリケーション セキュリティ グループを作成する
まず、New-AzureRmResourceGroup を使用して、この記事で作成したすべてのリソースのリソース グループを作成します。 次の例では、eastus の場所にリソース グループを作成します。
New-AzResourceGroup -ResourceGroupName myResourceGroup -Location EastUS
New-AzApplicationSecurityGroup を使用して、アプリケーション セキュリティ グループを作成します。 アプリケーション セキュリティ グループを使用すると、同様のポート フィルター処理要件を持つサーバーをグループ化できます。 次の例では、2 つのアプリケーション セキュリティ グループを作成します。
$webAsg = New-AzApplicationSecurityGroup `
-ResourceGroupName myResourceGroup `
-Name myAsgWebServers `
-Location eastus
$mgmtAsg = New-AzApplicationSecurityGroup `
-ResourceGroupName myResourceGroup `
-Name myAsgMgmtServers `
-Location eastus
セキュリティ規則を作成する
New-AzNetworkSecurityRuleConfig を使用してセキュリティ規則を作成します。 次の例では、インターネットから myWebServers アプリケーション セキュリティ グループへの、ポート 80 および 443 経由の受信トラフィックを許可する規則を作成します。
$webRule = New-AzNetworkSecurityRuleConfig `
-Name "Allow-Web-All" `
-Access Allow `
-Protocol Tcp `
-Direction Inbound `
-Priority 100 `
-SourceAddressPrefix Internet `
-SourcePortRange * `
-DestinationApplicationSecurityGroupId $webAsg.id `
-DestinationPortRange 80,443
The following example creates a rule that allows traffic inbound from the internet to the *myMgmtServers* application security group over port 3389:
$mgmtRule = New-AzNetworkSecurityRuleConfig `
-Name "Allow-RDP-All" `
-Access Allow `
-Protocol Tcp `
-Direction Inbound `
-Priority 110 `
-SourceAddressPrefix Internet `
-SourcePortRange * `
-DestinationApplicationSecurityGroupId $mgmtAsg.id `
-DestinationPortRange 3389
この記事では、RDP (ポート 3389) が myAsgMgmtServers VM のインターネットに公開されています。 運用環境では、ポート 3389 をインターネットに公開せずに、VPN またはプライベート ネットワーク接続を使用して、管理する Azure リソースに接続することをお勧めします。
ネットワーク セキュリティ グループの作成
New-AzNetworkSecurityGroup を使用して、ネットワーク セキュリティ グループを作成します。 次の例では、myNsg という名前のネットワーク セキュリティ グループを作成します。
$nsg = New-AzNetworkSecurityGroup `
-ResourceGroupName myResourceGroup `
-Location eastus `
-Name myNsg `
-SecurityRules $webRule,$mgmtRule
仮想ネットワークの作成
New-AzVirtualNetwork を使用して仮想ネットワークを作成します。 次の例では、myVirtualNetwork という名前の仮想ネットワークを作成します。
$virtualNetwork = New-AzVirtualNetwork `
-ResourceGroupName myResourceGroup `
-Location EastUS `
-Name myVirtualNetwork `
-AddressPrefix 10.0.0.0/16
New-AzVirtualNetworkSubnetConfig を使用してサブネット構成を作成し、Set-AzVirtualNetwork を使用してサブネット構成を仮想ネットワークに書き込みます。 次の例では、mySubnet という名前のサブネットを仮想ネットワークに追加し、それに myNsg ネットワーク セキュリティ グループを関連付けます。
Add-AzVirtualNetworkSubnetConfig `
-Name mySubnet `
-VirtualNetwork $virtualNetwork `
-AddressPrefix "10.0.2.0/24" `
-NetworkSecurityGroup $nsg
$virtualNetwork | Set-AzVirtualNetwork
仮想マシンを作成する
VM を作成する前に、Get-AzVirtualNetwork を使用して、サブネットと共に仮想ネットワーク オブジェクトを取得します。
$virtualNetwork = Get-AzVirtualNetwork `
-Name myVirtualNetwork `
-Resourcegroupname myResourceGroup
New-AzPublicIpAddress を使用して、各 VM のパブリック IP アドレスを作成します。
$publicIpWeb = New-AzPublicIpAddress `
-AllocationMethod Dynamic `
-ResourceGroupName myResourceGroup `
-Location eastus `
-Name myVmWeb
$publicIpMgmt = New-AzPublicIpAddress `
-AllocationMethod Dynamic `
-ResourceGroupName myResourceGroup `
-Location eastus `
-Name myVmMgmt
New-AzNetworkInterface によって 2 つのネットワーク インターフェイスを作成し、パブリック IP アドレスをネットワーク インターフェイスに割り当てます。 次の例では、ネットワーク インターフェイスを作成し、それに myVmWeb パブリック IP アドレスを関連付けて、myAsgWebServers アプリケーション セキュリティ グループのメンバーにします。
$webNic = New-AzNetworkInterface `
-Location eastus `
-Name myVmWeb `
-ResourceGroupName myResourceGroup `
-SubnetId $virtualNetwork.Subnets[0].Id `
-ApplicationSecurityGroupId $webAsg.Id `
-PublicIpAddressId $publicIpWeb.Id
次の例では、ネットワーク インターフェイスを作成し、それに myVmMgmt パブリック IP アドレスを関連付けて、myAsgMgmtServers アプリケーション セキュリティ グループのメンバーにします。
$mgmtNic = New-AzNetworkInterface `
-Location eastus `
-Name myVmMgmt `
-ResourceGroupName myResourceGroup `
-SubnetId $virtualNetwork.Subnets[0].Id `
-ApplicationSecurityGroupId $mgmtAsg.Id `
-PublicIpAddressId $publicIpMgmt.Id
仮想ネットワークに 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."
$webVmConfig = New-AzVMConfig `
-VMName myVmWeb `
-VMSize Standard_DS1_V2 | `
Set-AzVMOperatingSystem -Windows `
-ComputerName myVmWeb `
-Credential $cred | `
Set-AzVMSourceImage `
-PublisherName MicrosoftWindowsServer `
-Offer WindowsServer `
-Skus 2016-Datacenter `
-Version latest | `
Add-AzVMNetworkInterface `
-Id $webNic.Id
New-AzVM `
-ResourceGroupName myResourceGroup `
-Location eastus `
-VM $webVmConfig `
-AsJob
管理サーバーとして機能する VM を作成します。
# Create user object
$cred = Get-Credential -Message "Enter a username and password for the virtual machine."
# Create the web server virtual machine configuration and virtual machine.
$mgmtVmConfig = New-AzVMConfig `
-VMName myVmMgmt `
-VMSize Standard_DS1_V2 | `
Set-AzVMOperatingSystem -Windows `
-ComputerName myVmMgmt `
-Credential $cred | `
Set-AzVMSourceImage `
-PublisherName MicrosoftWindowsServer `
-Offer WindowsServer `
-Skus 2016-Datacenter `
-Version latest | `
Add-AzVMNetworkInterface `
-Id $mgmtNic.Id
New-AzVM `
-ResourceGroupName myResourceGroup `
-Location eastus `
-VM $mgmtVmConfig
仮想マシンの作成には、数分かかります。 Azure で VM の作成が完了するまで、次の手順に進まないでください。
トラフィック フィルターをテストする
Get-AzPublicIpAddress を使用して、VM のパブリック IP アドレスを返します。 次の例では、myVmMgmt VM のパブリック IP アドレスを返しています。
Get-AzPublicIpAddress `
-Name myVmMgmt `
-ResourceGroupName myResourceGroup `
| Select IpAddress
次のコマンドを使用して、お使いのローカル コンピューターから、myVmMgmt VM でリモート デスクトップ セッションを作成します。 <publicIpAddress>
を前のコマンドで返された IP アドレスに置き換えます。
mstsc /v:<publicIpAddress>
ダウンロードされた RDP ファイルを開きます。 メッセージが表示されたら、 [Connect] を選択します。
VM の作成時に指定したユーザー名とパスワードを入力し (VM の作成時に入力した資格情報を指定するために、 [その他] 、 [別のアカウントを使う] の選択が必要になる場合があります)、 [OK] を選択します。 サインイン処理中に証明書の警告が表示される場合があります。 [はい] を選択して、接続処理を続行します。
インターネットから、myVmMgmt VM に接続されているネットワーク インターフェイスが含まれている myAsgMgmtServers アプリケーション セキュリティ グループに対する送信でポート 3389 が許可されているため、この接続は成功します。
PowerShell から次のコマンドを使用して、myVmMgmt VM から myVmWeb VM へのリモート デスクトップ接続を作成します。
mstsc /v:myvmWeb
各ネットワーク セキュリティ グループ内の既定のセキュリティ規則では、仮想ネットワーク内のすべての IP アドレス間で、すべてのポートを介したトラフィックが許可されるため、この接続は成功します。 myAsgWebServers のセキュリティ規則は、インターネットからのポート 3389 を介した受信を許可しないため、インターネットから myVmWeb VM へのリモート デスクトップ接続を作成することはできません。
PowerShell から次のコマンドを使用して、Microsoft IIS を myVmWeb VM にインストールします。
Install-WindowsFeature -name Web-Server -IncludeManagementTools
IIS のインストールが完了したら、myVmWeb VM から切断します。myVmMgmt VM のリモート デスクトップ接続は保持されます。 IIS のようこそ画面を表示するには、インターネット ブラウザーを開き、http://myVmWeb. にアクセスします。
myVmMgmt VM から切断します。
コンピューターで PowerShell から次のコマンドを入力し、myVmWeb サーバーのパブリック IP アドレスを取得します。
Get-AzPublicIpAddress `
-Name myVmWeb `
-ResourceGroupName myResourceGroup `
| Select IpAddress
Azure の外部から myVmWeb Web サーバーにアクセスできることを確認するには、コンピューターでインターネット ブラウザーを開き、http://<public-ip-address-from-previous-step>
にアクセスします。 インターネットから、myVmWeb VM に接続されているネットワーク インターフェイスが含まれている myAsgWebServers アプリケーション セキュリティ グループに対する送信でポート 80 が許可されているため、この接続は成功します。
リソースをクリーンアップする
必要なくなったら、Remove-AzResourceGroup を使用して、リソース グループとその中のすべてのリソースを削除できます。
Remove-AzResourceGroup -Name myResourceGroup -Force
次のステップ
この記事では、ネットワーク セキュリティ グループを作成し、それを仮想ネットワーク サブネットに関連付けました。 ネットワーク セキュリティ グループについて詳しくは、ネットワーク セキュリティ グループの概要とネットワーク セキュリティ グループの管理に関する記事を参照してください。
Azure の既定では、サブネット間でトラフィックがルーティングされます。 代わりに、たとえばファイアウォールとして機能する VM を介してサブネット間でトラフィックをルーティングすることもできます。 その方法については、ルート テーブルの作成に関する記事を参照してください。