1. はじめに
こんにちは。SCSK志村です。
Azureの仮想ネットワークサービスにおける「ネットワークセキュリティグループ(以下NSG)」と「ルートテーブル」の既定値および実機挙動の確認方法についてまとめました。
2.NSGの既定値について
NSGは作成時にAzure によって既定の規則が作成されます。
既定の規則の詳細は公式ドキュメントの以下に記述があります。
Azure ネットワーク セキュリティ グループの概要 | Microsoft Learn
受信規則の一つを例にとって確認してみます。
Priority | source | 送信元ポート | 宛先 | 送信先ポート | Protocol | アクセス |
---|---|---|---|---|---|---|
65000 | VirtualNetwork | 0-65535 | VirtualNetwork | 0-65535 | Any | Allow |
source/宛先が「VirtualNetwork」に対するすべての通信が許可されていることが確認できます。
この「VirtualNetwork」は「サービスタグ」と呼ばれる、Azureで定義されたIPアドレスプレフィックスのグループを表します。
Azure サービス タグの概要 | Microsoft Learn
例えば、「VirtualNetwork」は仮想ネットワークアドレス空間をグルーピングしたものであることがわかります。
仮想ネットワーク アドレス空間 (仮想ネットワークに対して定義されているすべての IP アドレスの範囲)、すべての接続されたオンプレミスのアドレス空間、ピアリングされた仮想ネットワーク、仮想ネットワーク ゲートウェイに接続された仮想ネットワーク、ホストの仮想 IP アドレス、およびユーザーが定義したルートで使用されるアドレス プレフィックス。 このタグには、既定のルートも含まれる場合もあります。
上記の受信規則が実際の環境でどのような許可をしているのかを実機で調査してみました。
3.NSGの実機挙動の確認方法
Azure上で以下の環境を作成しました。
サービス | IPアドレスプレフィックス/IPアドレス |
---|---|
VNet | 10.0.0.0/16 |
Subnet | 10.0.0.0/24 |
VM | 10.0.0.4 |
サブネットに既定の設定で作成したNSGを紐づけています。
公式ドキュメントの記載通り、「VirtualNetwork」からの通信が許可されています。
この「VirtualNetwork」が指す具体的なIPアドレスプレフィックスは、「有効なセキュリティルール」の機能で確認することができます。
ネットワークセキュリティグループの画面から 「ヘルプ」>「有効なセキュリティルール」を表示します。
対象サブネットに存在する「仮想マシン」・「NIC」を選択すると対象のNICで有効となっているルールが表示されます。
ここでサービスタグ「仮想ネットワーク※」を選択します。
※表示により「VirtualNetwork」と「仮想ネットワーク」の翻訳の表記ゆれが発生するのでご注意ください。
アドレスプレフィックスとしてソース、宛先に「10.0.0.0/16」「168.63.129.16/32」と表示されました。
「10.0.0.0/16」:このSubnetが存在するVNetのIPアドレスプレフィックス
「168.63.129.16/32」:Azureプラットフォームリソースへの通信で利用するIPアドレス(ホストノードの仮想 IP)
IP アドレス 168.63.129.16 とは | Microsoft Learn
この2つのIPアドレスプレフィックスが「VirtualNetwork」タグとしてグルーピングされていることを確認することができました。
受信規則も送信規則も許可されているので同一VNet内の通信は既定の設定で許可されていることがわかります。
4.ルートテーブルの既定値について
次にルートテーブルの既定値を確認します。
既定のルートの詳細は公式ドキュメントの以下に記述があります。
Azure 仮想ネットワーク トラフィックのルーティング | Microsoft Learn
Azure 仮想ネットワークのサブネットごとにルート テーブルが自動的に作成され、既定のシステム ルートがテーブルに追加されます。
と記述があるため、このシステムルートの一つを例にとって確認してみます。
ソース | アドレス プレフィックス | 次ホップの種類 |
---|---|---|
Default | 仮想ネットワークに固有 | 仮想ネットワーク |
仮想ネットワーク(VNet)のIPアドレスプレフィックスの次ホップが仮想ネットワークとなっています。
仮想ネットワーク内のルーティングはシステムルートで定義されていることが確認できます。
上記のシステムルートが実際の環境でどのような許可をしているのかを実機で調査してみました。
5.ルートテーブルの実機挙動の確認方法
既定の設定でルートテーブルを作成し、サブネットにアタッチします。
システムルートが存在するはずですが、表示上はルートが存在しないことが確認できます。
実際にルートは存在しないのか、どのようなルートが有効になっているのかは「有効なルート」の機能で確認することができます。
ルートテーブルの画面から 「ヘルプ」>「有効なルート」 を開き、「仮想マシン」・「NIC」を選択します。
すると、対象のNICで有効となっているルートが表示されます。
ルートテーブル上には何も表示されませんでしたが、有効となっているルートが存在することを確認できます。
VnetのIPアドレスプレフィックス「10.0.0.0/16」のネクストホップが仮想ネットワークとなっており、先のシステムルートの記述の通りとなっていることがわかります。
表示上ルートは存在しませんがルートテーブルの確認時は「システムルート」が有効化されていることに注意が必要です。
6.まとめ
NSG、ルートテーブルの既定値と実機挙動の確認方法をまとめてみました。
既定で一定の通信が許可されるのはユーザフレンドリーではありますが、想定しない通信許可にもつながります。
設計通りの通信許可となっているか実機で確認をしておくと安心と考えます。
この記事がAzureにおけるネットワーク設計の一助になれば幸いです。