Virtual Networks
The presented resiliency recommendations in this guidance include Virtual Networks and associated Virtual Networks settings.
Summary of Recommendations
The below table shows the list of resiliency recommendations for Virtual Networks and associated resources.
Recommendation | Category | Impact | State | ARG Query Available |
---|---|---|---|---|
VNET-1 - All Subnets should have a Network Security Group associated | Access & Security | High | Preview | Yes |
VNET-2 - Use Azure DDoS Standard Protection Plans to protect all public endpoints hosted within customer Virtual Networks | Access & Security | High | Preview | Yes |
VNET-3 - Use Private Link, when available, for shared Azure PaaS services | Access & Security | Medium | Preview | No |
Recommendations Details
VNET-1 - すべてのサブネットにネットワーク セキュリティ グループが関連付けられている必要があります
Category: Access & Security
Impact: High
Guidance
ネットワーク・セキュリティ・グループ: ネットワーク・セキュリティ・グループおよびアプリケーション・セキュリティ・グループには、ソースおよび宛先のIPアドレス、ポートおよびプロトコルによってリソースとの間のトラフィックをフィルタリングできる複数の受信および送信セキュリティ規則を含めることができます。NSG は、サブネット レベルのセキュリティ層を提供します。GatewaySubnet、AzureFirewallSubnet、AzureFirewallManagementSubnet、RouteServerSubnet への NSG の適用はサポートされていないため、これらのサブネットは除外 (無視) されることに注意してください。
Resources
- Azure Virtual Network - Concepts and best practices | Microsoft Learn
- GatewaySUbnet
- Can I associate a network security group (NSG) to the RouteServerSubnet?
- Are Network Security Groups (NSGs) supported on the AzureFirewallSubnet?
Resource Graph Query
// Azure Resource Graph Query
// Find Subnets without NSG associated
resources
| where type =~ 'Microsoft.Network/virtualnetworks'
| mv-expand subnets = properties.subnets
| extend sn = string_size(subnets.properties.networkSecurityGroup)
| where sn == 0 and subnets.name !in ("GatewaySubnet", "AzureFirewallSubnet", "AzureFirewallManagementSubnet", "RouteServerSubnet")
| project recommendationId = "vnet-1", name, id, tags, param1 = strcat("SubnetName: ", subnets.name), param2 = "NSG: False"
VNET-2 - Azure DDoS Standard Protection プランを使用して、お客様の仮想ネットワーク内でホストされているすべてのパブリック エンドポイントを保護します
Category: Access & Security
Impact: High
Guidance
Azure DDoS Protection は、アプリケーション設計のベスト プラクティスと組み合わせることで、DDoS 攻撃から保護するための強化された DDoS 軽減機能を提供します。これは、仮想ネットワーク内の特定の Azure リソースを保護するのに役立つように自動的に調整されます。
Resources
- Reliability and Azure Virtual Network - Microsoft Azure Well-Architected Framework | Microsoft Learn
Resource Graph Query
// Azure Resource Graph Query
// Find virtual networks without DDoS Protection
resources
| where type =~ 'Microsoft.Network/virtualNetworks'
| where isnull(properties.enableDdosProtection) or properties.enableDdosProtection contains "false"
| project recommendationId = "vnet-2", name, id, tags, param1 = strcat("EnableDdosProtection: ", properties.enableDdosProtection)
VNET-3 - 使用可能な場合は、PaaS サービスにサービス エンドポイントではなくプライベート エンドポイントを使用します
Category: Access & Security
Impact: Medium
Guidance
仮想ネットワーク サービス エンドポイントは、Private Link が使用できず、データの不正な移動の懸念がない場合にのみ使用します。VNet サービス エンドポイント機能 (ネットワーク側で VNet サービス エンドポイントを有効にし、Azure サービス側で適切な VNet ACL を設定する) により、許可された VNet とサブネットへの Azure サービス アクセスが制限されるため、ネットワーク レベルのセキュリティと Azure サービス トラフィックの分離が提供されます。VNet サービス エンドポイントを使用するすべてのトラフィックは Microsoft のバックボーンを経由するため、パブリック インターネットから分離する別のレイヤーが提供されます
Resources
- Azure Virtual Network FAQ | Microsoft Learn
- Reliability and Network connectivity - Microsoft Azure Well-Architected Framework | Microsoft LearnNetworking Reliability
- Azure Private Link availability
Resource Graph Query
// Azure Resource Graph Query
// Find Subnets with Service Endpoint enabled for services that offer Private Link
resources
| where type =~ 'Microsoft.Network/virtualnetworks'
| mv-expand subnets = properties.subnets
| extend se = array_length(subnets.properties.serviceEndpoints)
| where se >= 1
| project name, id, tags, subnets, serviceEndpoints=todynamic(subnets.properties.serviceEndpoints)
| mv-expand serviceEndpoints
| project name, id, tags, subnetName=subnets.name, serviceName=tostring(serviceEndpoints.service)
| where serviceName in (parse_json('["Microsoft.CognitiveServices","Microsoft.AzureCosmosDB","Microsoft.DBforMariaDB","Microsoft.DBforMySQL","Microsoft.DBforPostgreSQL","Microsoft.EventHub","Microsoft.KeyVault","Microsoft.ServiceBus","Microsoft.Sql", "Microsoft.Storage","Microsoft.StorageSync","Microsoft.Synapse","Microsoft.Web"]'))
| project recommendationId = "vnet-3", name, id, tags, param1 = strcat("subnet=", subnetName), param2=strcat("serviceName=",serviceName), param3="ServiceEndpoints=true"