Network Security Groups
このポストは、11 月 4 日に投稿された Network Security Groups の翻訳です。
先日開催された TechEd Europe で、マイクロソフトは、Azure ネットワーク製品群にとって強力な新規サービスとなる Network Security Groups の一般提供の開始を発表しました。Network Security Groups を使用すると、Virtual Network (VNET) 内部のセグメント化や、VNET 内に存在する Virtual Machines (VM) の送受信トラフィックの細かな制御が可能です。また、DMZ (非武装地帯) を構築してデータベース サーバーやアプリケーション サーバーなどのバックエンド サービスの安全を厳重に管理する場合にも役立ちます。
用途とシナリオ
業務ワークフローをクラウドで実現するにあたって、多層アプリケーションを構築することは珍しくありません。通常、Web プロキシ サーバーや DNS サーバーなどのフロントエンド層のエンティティは、インターネットに接続されている DMZ 内に配置されます。アプリケーション サーバーやバックエンド インスタンスなどの他の層の機能は、より高い安全性が求められるため、DMZ からは分離されます。この層では、フロントエンドの特定のインスタンスからのトラフィックのみを受信し、通常はインターネットへの送信接続は行いません。Network Security Groups を使用すれば、このような多層型アプリケーション アーキテクチャを Azure でホストできます。
下図は、多層型アプリケーションのデプロイメント例を示したものです。
Network Security Groups では、Azure で実行中のサービスが送受信するネットワーク トラフィックの流れを完全に制御できます。また、この機能は Virtual Network 内のサブネットにも適用できるため、複数の VM に対するアクセス制御ルールの更新を効率よく管理することが可能です。VM の更新や変更を行わないでも、数百台または数千台の VM に対するアクセス制御ルールの変更を秒単位の速さで実行できます。
さらに、Network Security Groups は、イントラネット トラフィックのセグメント化だけでなく、インターネットとの間で送受信されるトラフィックの制御にも使用できます。1 つのアクセス制御ルールだけで、サブネット全体に対してインターネットへの接続を拒否することができます。
VM およびサブネットの ACL
Network Security Groups は、トラフィックのフィルターを表すアクセス制御ルールの集合で構成され、同一リージョン内の VM やサブネットに関連付けることができます。Network Security Groups で定義されたルールは、フィルターとして動作します。受信経路の場合は、VM がトラフィックを受信する前に適用され、送信経路の場合は、VM がトラフィックを送信した後に適用されます。つまり、ルールはインフラストラクチャ レベルで適用され、ユーザーの操作や VM で実行されている OS で置き換えることはできません。Network Security Groups がサブネットと関連付けられている場合は、サブネット内に存在するすべての VM に対してこのルールが適用されます。また、Network Security Groups で何らかの変更が行われた場合は、即座にサブネット内のすべての VM に適用されます。
ここで、Network Security Groups の重要な特徴をご紹介します。
- このルールには 5 つのタプル (送信元 IP、送信元のポート番号、送信先 IP、送信先のポート番号、プロトコル) が含まれます。
- このルールはステートフルです。つまり、特定のポート (80 番など) のトラフィックを許可する受信ルールがある場合、同一ポートを流れるパケットに対して、これに対応するルールを送信側でも作成する必要はありません。
- Network Security Groups には、既定で Virtual Network 内の接続およびインターネットへの送信アクセスを許可するルールが含まれます。これらの既定のルールは、ユーザー独自のルールで上書きすることができます。
- ルールの適用順序は、優先度により指定できます。値が小さいルール (優先度高) は、値が大きいルール (優先度低) よりも先に処理されます。
- Azure では、パブリック IP アドレス空間を参照する既定のタグ (INTERNET や VIRTUAL_NETWORK など) をご用意しています。このタグは、Virtual Network 外部、またはお客様のネットワーク全体のアドレス空間の外部に存在するアドレス空間を参照し、アクセス制御ルールの一部として使用できます。
Network Security Groups は、VM またはサブネットのいずれか、また場合によってはその両方に対して適用できます。サブネット内の各 VM のトラフィック パターンがそれぞれまったく異なる場合は、個別のグループで厳密なルールを VM に対して設定し、それぞれの VM のトラフィックを制御することをお勧めします。一方、サブネット内の各 VM のトラフィック パターンが同一である場合 (こちらの場合が一般的です) は、サブネットに対して 1 つのグループでルールを設定し、サブネット全体の送受信トラフィックを管理することをお勧めします。大半のトラフィックが同一でありながら VM に対して、または VM とサブネットの両方に対してきめ細かい制御が必要な場合などでは、上記の 2 つの手法を組み合わせると有効です。
上図で示すように、受信経路ではまずサブネットに対して設定した Network Security Groups のルールが適用され、その後 VM に対して設定した Network Security Groups が存在する場合はそれが適用されます。送信経路ではこの順序が逆になります。
ネットワーク管理者は Network Security Groups のルールをサブネットに対して、開発者 (VM の所有者) はルールを VM に対して定義すると便利です。
制限事項
Network Security Groups は、VNET で実行されているサービスのネットワーク トラフィックのアクセス制御をきめ細かく行うことを目標としています。これを実現するために、1 サブスクリプションあたり最大 100 の Network Security Groups を設定でき、それぞれの Network Security Groups で最大 200 個のルールを作成できるようになっています。さらに多くのルールやグループが必要な場合、マイクロソフトのサポートまでご連絡いただくと、この上限を引き上げることができます。
Network Security Groups は、リージョン内の VNET の VM に対してのみ適用できます。その他の相互運用性に関する事項は、この記事の「よく寄せられる質問」セクションを参照してください。
使用方法
Network Security Groups は、現時点では PowerShell および REST API からのみ使用できます。
# Network Security Groups を作成
New-AzureNetworkSecurityGroup -Name "MyVNetSG" -Location uswest -Label "Security group for my Vnet in West US"
# ルールを Network Security Groups に追加/更新
Get-AzureNetworkSecurityGroup -Name "MyVNetSG" | Set-AzureNetworkSecurityRule -Name WEB -Type Inbound -Priority 100 -Action Allow -SourceAddressPrefix 'INTERNET' -SourcePortRange '*' -DestinationAddressPrefix '*' -DestinationPortRange '*' -Protocol TCP
# Network Security Groups からルールを削除
Get-AzureNetworkSecurityGroup -Name "MyVNetSG" | Remove-AzureNetworkSecurityRule -Name WEB
# Network Security Groups を VM に関連付け
Get-AzureVM -ServiceName "MyWebsite" -Name "Instance1" | Set-AzureNetworkSecurityGroupConfig -NetworkSecurityGroupName "MyVNetSG"
# Network Security Groups を VM から削除
Get-AzureVM -ServiceName "MyWebsite" -Name "Instance1" | Remove-AzureNetworkSecurityGroupConfig -NetworkSecurityGroupName "MyVNetSG"
# Network Security Groups をサブネットに関連付け
Get-AzureNetworkSecurityGroup -Name "MyVNetSG" | Set-AzureNetworkSecurityGroupToSubnet -VirtualNetworkName 'VNetUSWest' -SubnetName 'FrontEndSubnet'
# Network Security Groups をサブネットから削除
Get-AzureNetworkSecurityGroup -Name "MyVNetSG" | Remove-AzureNetworkSecurityGroupFromSubnet -VirtualNetworkName 'VNetUSWest' -SubnetName 'FrontEndSubnet'
# Network Security Groups を削除
Remove-AzureNetworkSecurityGroup -Name "MyVNetSG"
# Network Security Groups およびそのルールの詳細を取得
Get-AzureNetworkSecurityGroup -Name "MyVNetSG" -Detailed
さらに詳細な情報をご希望のお客様は、MSDN (英語) を参照してください。
よく寄せられる質問
1. VM のエンドポイントでは既にエンドポイントの ACL を使用していますが、Network Security Groups を同時に使用することはできますか。
いいえ。使用できるのはエンドポイントの ACL と Network Security Groups のいずれかのみです。エンドポイントの ACL を VM から削除すれば、その VM に Network Security Groups を関連付けることができます。
2. VM で複数の NIC を使用していますが、Network Security Groups はすべての NIC のトラフィックに対して適用できますか。
いいえ。Network Security Groups が適用できるのは、プライマリの NIC に対してのみです。ただし、今後ネットワーク セキュリティ グループを NIC に対して直接関連付ける機能を導入する予定です。
3. Network Security Groups の作成が完了しましたが、次に何をすればよいですか。
Network Security Groups の作成が完了したら、次のコマンドを実行して既定のルールを表示します。
Get-AzureNetworkSecurityGroup -Name "MyVNetSG" -Detailed
このコマンドで既定のルールを確認できます。次に、Network Security Groups を VM またはサブネットに関連付けます。その後、エンティティのネットワーク トラフィックを制御するルールを追加します。ルールは数分以内 (通常は数秒程度) で有効になるので、追加後はそれを確認します。
4. VM に RDP エンドポイントを定義していて、Network Security Groups を使用しています。インターネットから RDP のポートに接続するときにはアクセス制御ルールは必要ですか。
はい。Network Security Groups の既定のルールでは、インターネットからの接続はすべてのポートで禁止されています。RDP のトラフィックを許可するには、ユーザーが特定のルールを作成する必要があります。