こちらの内容についてMicrosoft社のAzureドキュメントを見ながら勉強し理解した内容を共有する。この記事では特にネットワークセキュリティグループ(NSG)とアプリケーションセキュリティグループ(ASG)についてまとめる。

この記事をサクッと読んでからMicrosoft社のドキュメントを読むと少し理解が早いかもしれない。(逆に混乱したらすみません)
昔の日本語ドキュメントサイトに比べて最近は本当に改善されて読みやすくなったので、もっと深く理解したいと思った方は記事途中に参照リンクを貼っておくのでそちらを参照されたし。
ネットワークセキュリティグループ(NSG)とは
仮想ネットワーク(VNet)に作成したSubnet、もしくはVNet内のVMに割り当てられたネットワークインタフェースカード(NIC)に対するネットワークトラフィックのフィルター機能。仮想ネットワーク内のVM間やSubnet間、もしくは仮想ネットワークとインターネット間のトラフィックを許可/拒否できる設定を行う。
ネットワークセキュリティグループの割当先
- VMのNIC(個別設定)
- VNetのSubnet(Subnetに含むNICすべてに対する一括設定)
SubnetとNICのネットワークセキュリティグループの評価順
NSGはSubnetとNICの両方に設定することができる。例えば、NSGを設定する際にSubnetと、そのSubnetに設定されているNICに対し、それぞれNSGを割り当てた場合、それぞれのNSGが順番に評価される。インバウンドとアウトバウンドでは順番が逆になる。
- インバウンドの場合
- まずSubnetのNSGで評価
- Subnetを通過した場合、次にNICのNSGで評価
- アウトバウンドの場合
- まずNICのNSGで評価
- NICを通過した場合、次にSubnetのNSGで評価
ネットワークセキュリティグループの既定規則
NSGを作成すると既定で以下の規則が適用されており、必要に応じてオーバーライドできる(変更は不可)。これは、VM同士の通信において、同じSubnet内のVM同士であればなんの問題もなく通信できるが、それ以外の場所にあるVM同士では通信できないというのがデフォルトの動作であることを示している。パブリックIPが割り当てられたVMやその他インターネット経由でアクセスするリソースについては特に制限なくアクセスできることも示している。
- インバウンド
- AllowVnetInbound
- 同じサブネット内のVMからのトラフィックはすべて許可
- AllowAzureLoadBalancerInbound
- 既定のロードバランサーからのトラフィックはすべて許可
- DenyAllInbound
- 上記以外のトラフィックはすべて拒否
- AllowVnetInbound
- アウトバウンド
- AllowVnetOutbound
- 同じサブネット内のVMへのトラフィックはすべて許可
- AllowInternetOutbound
- インターネットへのトラフィックはすべて許可
- DenyAllOutbound
- 上記以外(別Subnetへのトラフィックなど)はすべて拒否
- AllowVnetOutbound
拡張セキュリティ規則
NSGには「拡張セキュリティ規則」というものがあり、多くのNSGを定義しなければならない複雑な規則がある場合に、一箇所で管理する事で管理コストを削減できるものがある。
- 拡張セキュリティ規則の管理対象
- 複数のIPアドレス範囲
- 複数のポート範囲
- サービスタグ
- アプリセキュリティグループ
サービスタグ
サービスタグというのは、特定のIPアドレスやポートを指定しなくてもタグ名で複数のリソースを指定できる便利な識別子。Microsoftで管理されており、追加/編集/削除はできない。
- VirutalNetwork
- Azure内もしくはハイブリッド構成のオンプレミス内のすべてのVNetIPアドレスを表現する
- AzureLoadBalancer
- Azureが管理しているインフラのロードバランサーのIPを表現する(正常性プローブの送信元となるホストの仮想IP)
- Internet
- VNet外部のすべてのパブリックIP(VM、WebApps、Functionsなどに割り当てられているパブリックIPも含む)
- AzureTrafficManager
- Azure Traffic ManagerのIPアドレスを表現する
- Storage
- Azure StorageのIPアドレス空間を表現する(リージョン指定も可能)
- SQL
- Azure SQL(Database, for MySQL, for PostgreSQL, Synapse Analytics)の格サービスのIPアドレスを表現する(リージョン指定も可能)
- AppService
- Azure App Serviceのアドレスプレフィックスを表現する
アプリケーションセキュリティグループ(ASG)とは
アプリケーションで利用するリソースのNICを登録するためのグループ。
同じSubnetにあるリソースで、用途によりNSGを分けたい場合がある。例えばWEBアプリサーバーとDBサーバーといった感じだ。通常のこのようなケースではNSGを2つ作成し、それぞれに各NICのIPを登録する必要がある。
ASGを利用すると特定用途のリソースのNICに対してまとめてNSGを設定できるというメリットがある。ASGがないと、NIC追加時にはNSGに対してIPや規則を個別に追加設定する必要が発生する。ASGは名前で複数NICのIPを表現するので管理が楽。
スケールアウトするWEBサーバーとクラスタ構成のDBサーバーがある場合、例えば
- WEBサーバー
- ASG:WEB_SVR_ASG
- NSG:外部からの80ポートへのインバウンドのみ許可
- DBサーバー
- ASG:DB_SVR_ASG
- NSG:WEB_SVR_ASGからの1433ポートへのインバウンドのみ許可
として構成する事で、スケールアウトやクラスターの追加といったことに対する追加の設定はASGへのVMの追加のみで、改めてNSGへのIPや規則の追加設定は不要。
ASGとNICとNSGの関係
紐付け方法は以下の通り
- ASG作成
- NICのIP設定としてASGを登録
- NSGに登録されているIP範囲を空にし、ASGを追加する
すでにNSGが存在する場合にASGを追加設定する場合のポイントは、IP範囲を空で指定すること。
以下の設定例は、ASGに登録したVMから80ポートでインターネットに接続することを拒否する設定を行なっている。例えばDBサーバー群を登録しておくことで、DBサーバーからはインターネットへの接続を実施できなくなる。DBサーバーをHA構成にする場合、ASGに各DBサーバーを登録するだけで同じNSGの設定が有効になる。
# 指定のRGにASGを作成
az network asg create \
--resource-group <Resource Group Name> \
--name <ASG Name>
# VNetに登録したVMのNIC設定を変更し、NICをASGに紐付け
az network nic ip-config update \
--resource-group <Resource group name> \
--application-security-groups <ASG name> \
--name <NIC config name> \
--nic-name <NIC nane> \
--vnet-name <VNet name> \
--subnet <Subnet name>
# 指定のRGに定義されているNSG設定を変更し、ASGをNSGのSourceに紐付け
az network nsg rule update \
--resource-group <Resource group name> \
--nsg-name <NSG name> \
--name <NSG Rule name> \
--direction Inbound \
--priority 150 \
--source-address-prefixes "" \
--source-port-ranges '*' \
--source-asgs <ASG name> \
--destination-address-prefixes 10.0.0.4 \
--destination-port-ranges 80 \
--access Deny \
--protocol Tcp \
--description "Deny from DataServer to AppServer on port 80 using application security group"
コメント