どうも、フリーランスエンジニアのMakotoです。
今回は、ネットワークセキュリティグループについて解説します。その名の通り、ネットワークのセキュリティを強化するための基本となる重要なサービスです。ぜひ、最後までお読みください。
それではいってみましょう!
ネットワークセキュリティグループは2022年7月改定後の試験範囲に記載はありませんが、仮想マシンの構成要素の一部として、あるいは関連トピックとして出題される可能性があります。仮に出題されずとも非常に重要なサービスなので合わせて学習されることをオススメします。
ネットワークセキュリティグループ(NSG)とは?
ネットワークセキュリティグループは、仮想ネットワーク内のAzureリソース(仮想マシンなど)が送受信するトラフィック(データ)を許可・拒否するためのサービスです。略してNSGと呼ぶことが多いです。
決められたルールにもとづいてトラフィックを許可・拒否する機能を一般的には「パケットフィルタリング」とか「ファイアウォール」と呼ぶこともあります。
NSGはトラフィックを制御するためのルールの集まりで、受信(インバウンド)と送信(アウトバウンド)ごとにルールを定義します。
NSGのフィルタ処理で使われる5つの情報
NSGではトラフィックを許可したり拒否するために次の5つの情報を使います。この5つの組み合わせの情報を「5タプル」と呼びます。タプルは「組」を表す言葉です。
- 送信元IPアドレス
- 宛先IPアドレス
- 送信元ポート番号
- 宛先ポート番号
- プロトコル
規則の設定項目
ルールのことをAzureポータル上では「規則」と呼ばれ、受信と送信ごとに規則を設定することができます。
- 受信セキュリティ規則
- 送信セキュリティ規則
それぞれのセキュリティ規則の画面で入力できる項目は次の通りです。
入力項目 | 説明 |
---|---|
ソース | 送信元IPアドレス |
ソースポート範囲 | 送信元ポート番号 |
宛先 | 宛先IPアドレス |
宛先ポート範囲 | 宛先ポート番号 |
プロトコル | TCP / UDP / ICMP または Any(全て) |
アクション | 許可 / 拒否 |
優先度 | 100 ~ 4096 の数値。 数値が小さいほど優先順位が高い(小さい順に評価される) |
名前 | ルールの名前(NSGの中で一意) |
説明 | ルールの説明(任意) |
以下は受信セキュリティ規則を追加する画面です。ソースと宛先ではIPアドレスのほかにサービスタグなどの「拡張セキュリティ規則」を指定することも可能です(後述)
この例では、一意のグローバルIPアドレスからのリモートデスクトップ接続を許可しています。ポート番号を覚えていなくても「サービス」をプルダウンから選択すればポート番号とプロトコルの組み合わせを選択できます。
NSGの拡張セキュリティ規則
送信元、宛先IPアドレスが複数ある場合、それらを一つ一つ指定したり、あるいは、IPアドレスが変わってしまった場合にそれらを追従するのは面倒ですよね。
そういった複数のIPアドレス範囲の定義を簡略化してくれるのが「拡張セキュリティ規則」で次の2つがあります。
- サービスタグ
- アプリケーションセキュリティグループ
サービスやアプリケーションの観点でIPアドレスをグループ化するのでIPアドレスの値自体を意識する必要がありません。
サービスタグ
サービスタグは、Azureサービスが利用するIPアドレス範囲の定義セットです。
例えば、宛先サービスタグに「Storage」を指定するとAzure Storageが利用するIPアドレス範囲を指定できます。ちなみに、リージョンが付与されているサービスタグを指定すると、対象リージョンのIPアドレスに限定できます。
また、「Internet」というサービスタグもあり、インターネットで利用される不特定多数のグローバルIPアドレスを表します。※Azureサービスが使うグローバルIPアドレスも含まれます
アプリケーションセキュリティグループ(ASG)
アプリケーションセキュリティグループは、仮想マシンをグループ化するための機能です。
例えば、Webサーバをグループ化する「web-sv」というASGを作成しておいて、予め複数の仮想マシンをこのweb-svに割り当てておくことで、セキュリティ規則の画面でまとめて指定できます。
NSGと名前が似ていますが、単に仮想マシンをグループ化するだけのものです。また、ASGを作成だけしても意味がありませんので、仮想マシンを割り当てる操作を忘れないように注意が必要です。
NSGの関連付けパターン
NSGはサブネットまたはネットワークインターフェイス、または、その両方に関連付けることができます。「NSGなし」にすることもできますが、すべてのトラフィックが許可されるのでオススメできません。
サブネットに関連付けた場合は、そのサブネットに所属するすべてのAzureリソース(主に仮想マシン)に適用されます。
ネットワークインターフェイスに関連付け
単一の仮想マシンのみに適用
サブネットに関連付け
サブネットに配置されている全ての仮想マシンに適用
公式ドキュメントにもあるとおり、両方にNSGを割り当てると管理が煩雑になるのでオススメしません。用途ごとにサブネットを分けておいて、基本的にはサブネットに関連付けるようにするのがわかりやすいと思います。
特別な理由がない限り、ネットワーク セキュリティ グループをサブネットまたはネットワーク インターフェイスに関連付けることをお勧めします。両方に関連付けることは、お勧めしません。 サブネットに関連付けられたネットワーク セキュリティ グループの規則が、ネットワーク インターフェイスに関連付けられたネットワーク セキュリティ グループの規則と競合する可能性があるため、予期しない通信の問題が発生し、トラブルシューティングが必要になることがあります。
出典:サブネット内トラフィック
なお、NSGを仮想ネットワーク全体に関連付けることはできません。関連付け先はサブネットかネットワークインターフェイスです。
また、NSGはあくまでトラフィックを制御するためのもので、送受信されるデータを暗号化する機能はありません。同じセキュリティでも暗号化は別です。
暗号化はHTTPSやIPSecなど、OS・アプリケーションの機能で実装します。混同しないように注意しましょう。
仮想マシンにNSGを適用する場合の注意点
仮想マシン作成時の関連付け先に注意せよ
NSGをどこに関連付けるか?は設計の観点で重要です。
仮想マシンを作成してリモートデスクトップで接続するハンズオン記事で実践したように仮想マシンの作成手順の中でNSGもいっしょに作成すると、それはネットワークインターフェイスに関連付けられることになります。
正確には、仮想マシンの作成画面で指定するNSGはネットワークインターフェイスに関連付けるための設定です。
慣れてきたら先にNSGとセキュリティ規則を作成してサブネットに関連付けしておいて、仮想マシンの作成画面では「なし」で進める手順も試してみてください。
選択したサブネットに関連付けがあると以下のように「サブネットに関連付けられていますよ」とガイダンスで表示されます。よくよく見るとパラメータの名前は「NIC ネットワークセキュリティグループ」となってますね。
Anyの許可はテスト環境に限定せよ
ソースや宛先で指定できる「Any」は全てを表します。
管理者がWindowsにRDP(3389)で、LinuxにSSH(22)で接続する場合、それらをNSGで許可する必要がありますが、初めのうちは接続元のIPアドレスを「Any」で作成しがちです。
一時的な環境であれば問題ありませんがセキュリティ上あまりよろしくありません。これも慣れてきたらCMANなどで自宅環境のグローバルIPアドレスを確認し、ソースIPアドレスに指定するようにしましょう。
現在はソースに「My IP address」を指定すると、接続元の環境のグローバルIPアドレスを登録することができます。
そもそも、Azure Bastionというマネージドな踏み台サービスを使えばポート開放する必要もなくなりますが、AZ-900の範囲外なのでそれはまた別の記事でご紹介します。
既定のセキュリティ規則
NSGには初めから登録されている「既定のセキュリティ規則」がいくつかあります。AZ-900試験で問われることはないと思いますが
とならないように解説しておきます。
先にまとめを書くとこうです。
- 同じ仮想ネットワーク上にあるリソース間のトラフィックは送受信とも許可(※)
- ロードバランサからのヘルスチェックは許可
- インターネットへ出ていく通信は許可
- 他はすべて拒否
※仮想ネットワーク⇔仮想ネットワークの通信は許可されていますが、別々の仮想ネットワーク間で通信を行うにはこちらの記事で解説している仮想ネットワークピアリングなどで繋げてあげる必要があるので、ここでは「同じ仮想ネットワーク上」と記載しています。
受信セキュリティ規則
- AllowVNetInBound
- 仮想ネットワーク同士のトラフィックが許可されます
- AllowAzureLoadBalancerInBound
- ロードバランサが宛先サーバを死活監視するためのトラフィックが許可されます
- DenyAllInbound
- すべての受信トラフィックが拒否されます
送信セキュリティ規則
- AllowVnetOutBound
- 仮想ネットワーク同士のトラフィックが許可されます
- AllowInternetOutBound
- インターネット宛の送信トラフィックは許可されます
- DenyAllOutBound
- すべての送信トラフィックが拒否されます
まとめ
今回はネットワークセキュリティグループ(NSG)の概要と設定するためのパラメータについて解説しました。
仮想マシンを安全に運用していくためにネットワークセキュリティグループは重要です。また、仮想ネットワークに配置する他のAzureリソースでもネットワークセキュリティグループは登場します。
この記事を参考にネットワークセキュリティグループの基本をしっかりおさえておきましょう!