ネットワークセキュリティグループ(NSG)は、Azure の仮想ネットワークで、サブネットやネットワークインターフェイス(NIC)の単位で受信と送信のトラフィックを許可・拒否する機能です。この記事では、NSG の仕組みと留意事項を整理したあと、インターネットからの RDP を許可する NSG を作ってサブネットに関連付けます。
- NSG で判定に使う情報(5タプル)と、関連付けの単位(サブネット、NIC)
- 既定のセキュリティ規則と、優先度による評価の順番
- NSG の作成、受信セキュリティ規則の追加、サブネットへの関連付けの手順
ネットワークセキュリティグループ(NSG)とは
NSG は、セキュリティ規則(ルール)の集まりです。ルールごとに、通信を許可するか拒否するかを決めます。判定には、次の5つの情報(5タプル)を使います。
| 判定に使う情報 | 指定できるもの |
|---|---|
| 送信元アドレス/宛先アドレス | 任意(Any)、IP アドレス、CIDR、サービスタグ、アプリケーションセキュリティグループ |
| 送信元ポート/宛先ポート | 1つのポート、範囲(例:10000-10005)、カンマ区切りの組み合わせ、* (すべて) |
| プロトコル | TCP、UDP、ICMP、Any |
NSG はステートフルです。受信を許可した通信の応答は、送信のルールがなくても返せます。逆に、送信を許可した通信の応答も、受信のルールなしで戻ります。
関連付けの単位
NSG は、サブネットまたは NIC に関連付けて使います。サブネットに関連付けると、そのサブネットにあるすべてのリソースにルールが効きます。NIC に関連付けると、その NIC を持つ仮想マシン(VM)だけにルールが効きます。
1つの NSG は、いくつものサブネットや NIC に関連付けられます。一方、1つのサブネットや NIC に関連付けられる NSG は1つだけです。
サブネットと NIC の両方に NSG を関連付けた場合、受信はサブネットの NSG、NIC の NSG の順に評価され、送信はその逆の順に評価されます。通信できるのは、両方の NSG で許可されたときだけです。ルールが重なると切り分けが難しくなるので、どちらか一方に関連付けるのが基本です。
留意事項
既定のセキュリティ規則
NSG を作ると、次の既定のルールが自動で入ります。仮想ネットワーク内の通信と Azure Load Balancer からの受信は許可され、インターネットからの受信などそれ以外は拒否されます。インターネットからの通信を受けるには、許可のルールを明示的に追加します。
この記事の画面は、実際の画面ではなく、検証時(2023年2月)の画面から設定する項目(見るポイント)を抜き出して描いたイメージです。今のポータルとは、項目の並びや表記が違うことがあります。
| 優先度 | 名前 | ポート | プロトコル | ソース | 宛先 | アクション |
|---|---|---|---|---|---|---|
| 1受信セキュリティ規則 | ||||||
| 65000 | AllowVnetInBound | 任意 | 任意 | VirtualNetwork | VirtualNetwork | Allow |
| 65001 | AllowAzureLoadBalancerInBound | 任意 | 任意 | AzureLoadBalancer | 任意 | Allow |
| 65500 | DenyAllInBound | 任意 | 任意 | 任意 | 任意 | Deny |
| 2送信セキュリティ規則 | ||||||
| 65000 | AllowVnetOutBound | 任意 | 任意 | VirtualNetwork | VirtualNetwork | Allow |
| 65001 | AllowInternetOutBound | 任意 | 任意 | 任意 | Internet | Allow |
| 65500 | DenyAllOutBound | 任意 | 任意 | 任意 | 任意 | Deny |
| No. | 表示 | 意味 |
|---|---|---|
| 1 | 受信セキュリティ規則 | 仮想ネットワーク内(VirtualNetwork)と Azure Load Balancer(AzureLoadBalancer)からの受信を許可(緑の Allow)し、それ以外は最後の DenyAllInBound で拒否(赤の Deny)します。 |
| 2 | 送信セキュリティ規則 | 仮想ネットワーク内とインターネットへの送信を許可し、それ以外を拒否します。 |
既定のルールは削除できません。変えたいときは、より優先度の高い(数字の小さい)ルールを追加して上書きします。VirtualNetwork、AzureLoadBalancer、Internet は IP アドレスではなく、Azure が管理するアドレスのまとまり(サービスタグ)です。
優先順位
ルールを作るときは、優先度を考える必要があります。独自のルールの優先度は 100〜4096 の範囲で指定し、数字が小さいルールから順に評価されます。通信が一致したルールが見つかった時点で評価は終わり、それより数字の大きいルールは見ません。
たとえば、同じ通信に対する拒否ルールと許可ルールがある場合は、優先度の数字が小さいほうが適用され、もう一方は無視されます。既定のルール(65000〜65500)は独自のルールよりも数字が大きいので、独自のルールが必ず先に評価されます。同じ向きで同じ優先度のルールは作れません。
ルールの追加や削除が効くのは、新しい接続だけです。たとえば、接続中の RDP のセッションは、それを許可していたルールを消しても切れません。
リージョンとサブスクリプション
NSG は、作成するときにサブスクリプションとリージョンを選ぶリソースです。関連付ける仮想ネットワークや NIC と同じサブスクリプション、同じリージョンに作成しておきます。
ルール数の上限
1つの NSG に作れるルールの数には上限があります。現在のドキュメントでは、既定のルールも含めて1つの NSG あたり 2,000 です。ルールが増えてきたら、複数のアドレスやポートを1つのルールにまとめる(拡張セキュリティ規則)、サービスタグを使う、といった方法でルールの数を抑えます。
設定方法
ここでは、インターネットから仮想ネットワークへの RDP(TCP 3389)を許可する NSG を作り、サブネットに関連付けます。
NSG を作成する
Azure ポータル上部の検索バーで「ネットワーク セキュリティ グループ」を検索して開き、「作成」をクリックします。NSG を作るリソースグループと名前を設定します。
| サブスクリプション | Azure サブスクリプション 1 |
| 1リソース グループ | RG-VM 新規作成 |
| 2名前 | allow-RDP |
| 地域 | Japan East |
| No. | 項目 | 設定内容 |
|---|---|---|
| 1 | リソース グループ | 作成済みの RG-VM を選びます。「新規作成」で新しく作ることもできます。 |
| 2 | 名前 | 任意の名前です。今回は allow-RDP にしました。 |
| 3 | 確認および作成 | 確認の画面に進みます。地域は、関連付ける仮想ネットワークと同じ Japan East です。 |
リソースグループについては、次の記事を参考にしてください。
確認の画面で「検証に成功しました」と表示されたら、「作成」をクリックします。
| サブスクリプション | Azure サブスクリプション 1 |
| リソース グループ | RG-VM |
| 地域 | Japan East |
| 名前 | allow-RDP |
| タグ | なし |
作成が終わると、一覧に新しい NSG が表示されます。
| 名前 | リソース グループ | 場所 |
|---|---|---|
| 1allow-RDP | RG-VM | Japan East |
受信セキュリティ規則を追加する
一覧の名前(allow-RDP)をクリックし、設定 ›› 受信セキュリティ規則 ›› 追加 をクリックします。今回は、インターネットから仮想ネットワークのアドレス空間への RDP(TCP 3389)を許可するルールを作ります。
| 1ソース | Service Tag |
| ソース サービス タグ | Internet |
| ソース ポート範囲 | * |
| 2宛先 | Service Tag |
| 宛先サービス タグ | VirtualNetwork |
| 3サービス | RDP |
| 宛先ポート範囲 | 3389 |
| プロトコル | ○ Any◉ TCP○ UDP○ ICMP |
| 4アクション | ◉ 許可○ 拒否 |
| 5優先度 | 100 |
| 6名前 | AllowTagRDPInbound |
| No. | 項目 | 設定内容 |
|---|---|---|
| 1 | ソース/ソース サービス タグ | ソースに Service Tag を選ぶと、ソース サービス タグを選べるようになります。Internet を選びます。ソース ポート範囲は制限しないので、* のままにします。 |
| 2 | 宛先/宛先サービス タグ | 宛先も Service Tag にし、VirtualNetwork を選びます。VirtualNetwork は、仮想ネットワークのアドレス空間(ピアリングした仮想ネットワークや、接続したオンプレミスのアドレス空間なども含む)を表します。 |
| 3 | サービス | RDP を選ぶと、宛先ポート範囲 3389 とプロトコル TCP が自動で入ります。HTTPS や SSH なども選べます。Custom を選ぶと、任意のポート番号を指定できます。 |
| 4 | アクション | 許可 を選びます。 |
| 5 | 優先度 | 100〜4096 の範囲で指定します。今回は 100 にしました。あとからルールを間に足せるよう、100、200、300 のように間をあけておくと便利です。 |
| 6 | 名前 | 任意の名前です。今回は AllowTagRDPInbound にしました。 |
| 7 | 追加 | ルールが追加されます。 |
サービスタグについては、Microsoft のドキュメント「仮想ネットワーク サービス タグ」を参考にしてください。
追加すると、次のように登録されます。
| 優先度 | 名前 | ポート | プロトコル | ソース | 宛先 | アクション |
|---|---|---|---|---|---|---|
| 1100 | 2 AllowTagRDPInbou… | 3389 | TCP | Internet | VirtualNetwork | Allow |
| 65000 | AllowVnetInBound | 任意 | 任意 | VirtualNetwork | VirtualNetwork | Allow |
| 65001 | AllowAzureLoadBalance… | 任意 | 任意 | AzureLoadBalancer | 任意 | Allow |
| 65500 | DenyAllInBound | 任意 | 任意 | 任意 | 任意 | Deny |
| No. | 表示 | 意味 |
|---|---|---|
| 1 | 優先度 100 の行 | 追加したルールです。既定のルールより数字が小さいので、先に評価されます。 |
| 2 | 警告マーク(オレンジ) | RDP のポートがインターネットに公開されていることへの、セキュリティの警告です。 |
インターネットのどこからでも RDP できる状態は、パスワードを狙った攻撃を受けやすくなります。検証が終わったらルールを消すか、ソースを「IP Addresses」にして接続元の IP アドレスに絞ります。インターネットに RDP を公開せずに接続したい場合は、Azure Bastion を使う方法もあります。
NSG をサブネットに関連付ける
作成した NSG を、あらかじめ作ってある仮想ネットワーク(RG-VM-vnet)のサブネット(default)に関連付けます。仮想ネットワークとサブネットの概要は、次の記事を参考にしてください。
NSG の詳細画面で 設定 ›› サブネット ›› 関連付け をクリックします。関連付けたい仮想ネットワークとサブネットを選び、「OK」をクリックします。
| 1仮想ネットワーク | RG-VM-vnet (RG-VM) |
| 2サブネット | default |
次のように登録されます。これで、サブネット default にあるリソースへの、インターネットからの RDP が許可されます。
| 名前 | アドレス範囲 | 仮想ネットワーク |
|---|---|---|
| 1default | 10.0.0.0/24 | RG-VM-vnet |
VM に実際に適用されているルールは、VM の NIC の「有効なセキュリティ規則」で確かめられます。サブネットと NIC の両方に NSG がある場合も、まとめて確認できます。
まとめ
| 項目 | 内容 |
|---|---|
| 判定に使う情報 | 送信元・宛先のアドレスとポート、プロトコル(5タプル)。ステートフル |
| 関連付け | サブネットまたは NIC。1つのサブネット・NIC に NSG は1つ。受信はサブネット → NIC の順 |
| 既定のルール | 仮想ネットワーク内と Load Balancer からの受信を許可し、それ以外の受信は拒否。削除はできず、優先度の高いルールで上書きする |
| 優先度 | 独自のルールは 100〜4096。数字の小さい順に評価し、最初に一致したルールで決まる |
| この記事の設定 | NSG allow-RDP に Internet → VirtualNetwork の RDP 許可(優先度 100)を追加し、サブネット default に関連付け |
コメント