NOBTAの気ままにITブログ

Azure全般 / SQL Serverに関する情報を発信していきます。

Azure ネットワーク セキュリティ グループ (NSG) の設定について(ベストプラクティス) [Azure]


スポンサーリンク

Azure ネットワーク セキュリティ グループ (NSG) は、サブネット単位、ネットワーク インターフェース単位で設定が可能です。

※ AWSの場合、サブネット単位は ネットワーク ACL (ブラック リスト型)、ネットワーク インターフェース単位 (厳密には、EC2 インスタンスレベル) は、セキュリティ グループ (ホワイト リスト型) となっているため、Azure ネットワーク セキュリティ グループを設計する場合、AWSとは違った考慮が必要になります。

 

Azure ネットワーク セキュリティ グループ (NSG) を設計するうえで考慮しなければならない点としては、既定で「受信セキュリティ規則」: 「AllowVnetInBound」、「送信セキュリティ規則」:「AllowVnetOutBound」が有効になっている点でしょうか。

 

f:id:nobtak:20200211012934p:plain

 「AllowVnetInBound」、「AllowVnetOutBound」では、仮想ネットワーク サービス タグ 「VirtualNetwork」 に対して、すべてのポート、すべてのプロトコルが許可されています。そのため、既定の設定のままの場合、例えば、仮想ネットワーク内のサブネット間の通信、仮想ネットワーク間の通信は、すべて許可されている状態になっています。

仮想ネットワーク サービス タグの詳細については、Azure サービス タグの概要 | Microsoft Docs を参照

 

そのため、Azure ネットワーク セキュリティ グループ (NSG) で仮想ネットワーク内のサブネット間、仮想ネットワーク間の通信についても、特定のポート、プロトコルのみを許可したい場合は、明示的に 仮想ネットワーク サービス タグ 「VirtualNetwork」 に対して、すべてのポート、すべてのプロトコルを拒否する設定を追加したうえで、許可したいポート、プロトコルを追加することで実現することができます。

 

f:id:nobtak:20200211022723p:plain

上記の例では、受信セキュリティ規則 : 優先度 4096 に「DenyVnetInBound」という規則を追加し、仮想ネットワーク サービス タグ 「VirtualNetwork」 に対して、すべてのポート、すべてのプロトコルを拒否する設定を実施しています。

また、受信セキュリティ規則 : 優先度 4095 に「AllowALBInBound」規則を追加し、仮想ネットワーク サービス タグ 「AzureLoadBalancer」に対して、すべてのポート、すべてのプロトコルを許可しています。Azure LoadBalancer (168.63.129.16) は、Azure ロードバランサーを構築した場合、Load Balancer の正常性プローブに対して生死確認監視が行っているらしく、Azure ロードバランサーを使用していない場合は特に問題はないのですが、SQL Server 可用性グループをAzure 仮想マシンで構築し、可用性リスナー経由で通信する場合、Azure ロードバランサー (Internal Load Balancer : ILB) が使用されており、今後 意図せず 可用性リスナー経由で SQL Server に接続できないという現象を発生させないためにも、この設定を追加すると良いかと思います。

送信セキュリティ規則についても、Azure ネットワーク セキュリティ グループ (NSG)の設計が複雑になりますが、同様に 仮想ネットワーク サービス タグ 「VirtualNetwork」 に対して、すべてのポート、すべてのプロトコルを拒否することができます。