ExpressRoute Gateway


The presented resiliency recommendations in this guidance include ExpressRoute Gateway and associated ExpressRoute Gateway settings.

Summary of Recommendations

Recommendations Details

ERGW-1 - 回復性を高めるために、ExpressRoute ゲートウェイを異なるピアリングの場所から 2 つ以上の回線に接続します

Category: Availability

Impact: High

Guidance

各 ExpressRoute ゲートウェイを少なくとも 2 つの回線に接続し、各回線が他の回線と比較して多様なピアリングの場所から接続されるようにします。

Resources

Resource Graph Query

// Azure Resource Graph Query
// Provides a list of ExpressRoute Gateways that are not connected to two or more ExpressRoute Circuits. Baremetal circuits are excluded from consideration
//This query assumes that the running entity has visibilty to the gateway, connection, and circuit scopes.
//Start with a full list of gateways
(resources
| where type == "microsoft.network/virtualnetworkgateways"
| where properties.gatewayType == "ExpressRoute"
| extend exrGatewayId = tolower(tostring(id))
| join kind=inner(
resources
| where type == "microsoft.network/virtualnetworkgateways"
| where properties.gatewayType == "ExpressRoute"
| extend exrGatewayId = tolower(tostring(id))
| join kind=leftouter(
//connections joined with circuit peer info
resources
| where type == "microsoft.network/connections"
| extend connectionType = properties.connectionType
| extend exrGatewayId = tolower(tostring(properties.virtualNetworkGateway1.id))
| extend peerId = tolower(tostring(properties.peer.id))
| extend connectionId = tolower(tostring(id))
| where connectionType == "ExpressRoute"
| join kind=leftouter(
  resources
  | where type == "microsoft.network/expressroutecircuits"
    //should this be location instead of peeringLocation
  | extend circuitId = tolower(tostring(id))
  | extend peeringLocation = tostring(properties.serviceProviderProperties.peeringLocation)
  | extend peerId = tolower(id)
) on peerId ) on exrGatewayId
//remove bare metal services connections/circuits
| where not(isnotnull(connectionId) and isnull(sku1))
//group by gateway ID's and peering locations
| summarize by exrGatewayId, peeringLocation
//summarize to connections with fewer than two unique connections
| summarize connCount = count() by exrGatewayId
| where connCount < 2) on exrGatewayId
| project recommendationId = "ergw-1", name, id, tags, param1 = "twoOrMoreCircuitsConnectedFromDifferentPeeringLocations: false")
| union
(
resources
| where type == "microsoft.network/virtualnetworkgateways"
| where properties.gatewayType == "ExpressRoute"
| extend exrGatewayId = tolower(tostring(id))
| join kind=leftouter(
//connections joined with circuit peer info
resources
| where type == "microsoft.network/connections"
| extend connectionType = properties.connectionType
| extend exrGatewayId = tolower(tostring(properties.virtualNetworkGateway1.id))
| extend peerId = tolower(tostring(properties.peer.id))
| extend connectionId = tolower(tostring(id))
| where connectionType == "ExpressRoute") on exrGatewayId
| where isnull(connectionType)
| project recommendationId = "ergw-1", name, id, tags, param1 = "twoOrMoreCircuitsConnectedFromDifferentPeeringLocations: false", param2 = "noConnectionsOnGateway: true"
)



ERGW-2 - ゾーン冗長ゲートウェイ SKU を使用します

Category: Availability

Impact: High

Guidance

Azure ExpressRoute ゲートウェイは、1 つの可用性ゾーンにデプロイされる場合と、2 つ以上の可用性ゾーンにデプロイされる場合に、異なる SLA を提供します。すべての Azure SLA の詳細については、Online Services のサービス レベル アグリーメント (SLA) を参照してください。可用性ゾーン間で仮想ネットワーク ゲートウェイを自動的にデプロイするには、ゾーン冗長仮想ネットワーク ゲートウェイを使用できます。ゾーン冗長ゲートウェイを使用すると、ゾーン回復性の恩恵を受けて、Azure 上のミッション クリティカルでスケーラブルなサービスにアクセスできます

Resources

Resource Graph Query

// Azure Resource Graph Query
// For all VNGs of type ExpressRoute, show any that do not have AZ in the SKU tier
resources
| where type =~ "Microsoft.Network/virtualNetworkGateways"
| where properties.gatewayType == "ExpressRoute"
| where properties.sku.tier !contains 'AZ'
| project recommendationId = "ergw-2", name, id, tags, param1= strcat("sku-tier: " , properties.sku.tier), param2=location
| order by id asc



ERGW-3 - 誤って削除されないように ExpressRoute ゲートウェイの Azure リソース ロックを構成します

Category: Availability

Impact: Medium

Guidance

ExpressRoute ゲートウェイの Azure リソース ロックを構成して、誤って削除されないようにします。管理者は、Azure サブスクリプション、リソース グループ、またはリソースをロックして、ユーザーが誤って削除したり変更したりしないように保護できます。ロックは、すべてのユーザー権限よりも優先されます。

Resources

Resource Graph Query

// under-development



ERGW-4 - ゲートウェイの正常性を監視します

Category: Monitoring

Impact: High

Guidance

ExpressRoute ゲートウェイの可用性、パフォーマンス、スケーラビリティのために Network Insights を使用して監視を設定します。

アドバタイズされたルート、学習されたルート、VM の数の可用性メトリックのアラートを、使用中の ExpressRoute ゲートウェイ SKU でサポートされている量に基づいて構成します。お客様の環境に基づいて変更されるルートの頻度に関するアラートを構成します。

ExpressRoute Gateways |Azure Monitor ベースライン アラート に従って、使用中の ExpressRoute ゲートウェイ SKU でサポートされている量とお客様の環境に基づいて、パケット/秒のアラートを構成します。

使用中の ExpressRoute ゲートウェイ SKU でサポートされている量とお客様環境で予想されるフロー数、およびこの値がお客様環境の履歴ベースラインを超えた場合の最大フロー数/秒に基づいて、アクティブなフローのスケーラビリティ メトリックのアラートを構成します。

Resources

Resource Graph Query

//The KQL files for this test are distributed into 7 different files.
//Make sure and run all 7 for complete coverage
.



ERGW-6 - VNet 間通信に ExpressRoute 回線を使用しないようにします

Category: Networking

Impact: Medium

Guidance

既定では、複数の仮想ネットワーク (それぞれ ExpressRoute ゲートウェイ) を同じ ExpressRoute 回線にリンクすると、仮想ネットワーク間の接続が有効になります。ただし、仮想ネットワーク間の通信に ExpressRoute 回線を使用せず、代わりに VNet ピアリング、Azure Firewall、NVA、Azure Route Server 経由の VNet ハブでのルーティング、Azure 内のサイト間 VPN、仮想 WAN の使用、SD-WAN の使用など、他の手法を使用することをお勧めします。

ExpressRoute 経由の VNet 間接続が推奨されない理由の詳細については、ExpressRoute 経由の仮想ネットワーク間の接続 | Microsoft Learn を参照ください。

Resources

Resource Graph Query

// under-development



ERGW-7 - お客様が管理するゲートウェイ メンテナンスを構成します - プレビュー段階

Category: Availability

Impact: High

Guidance

ExpressRoute 仮想ネットワーク ゲートウェイは、機能、信頼性、パフォーマンス、セキュリティを強化するために定期的に更新されます。お客様が管理するメンテナンスを構成してスケジュールすると、これらの更新の影響が最小限に抑えられ、メンテナンス期間に最も適した更新スケジュールが調整されます。

Resources

Resource Graph Query

// Azure Resource Graph Query
// Find all Virtual Network Gateways without Maintenance Configurations

resources
| where type =~ "Microsoft.Network/virtualNetworkGateways"
| extend resourceId = tolower(id)
| join kind=leftouter  (
    maintenanceresources
    | where type =~ "Microsoft.Maintenance/configurationAssignments"
    | project JsonData = parse_json(properties)
    | extend maintenanceConfigurationId = tolower(tostring(JsonData.maintenanceConfigurationId))
    | join kind=inner (
        resources
        | where type =~ "Microsoft.Maintenance/maintenanceConfigurations"
        | project maintenanceConfigurationId=tolower(id)
    ) on maintenanceConfigurationId
    | project maintenanceConfigurationId, resourceId=tolower(tostring(JsonData.resourceId))
) on resourceId
| where isempty(maintenanceConfigurationId)
| project recommendationId = "ergw-7", name, id, tags, param1= strcat("sku-tier: " , properties.sku.tier), param2=location