|
| 1 | +--- |
| 2 | +title: Azure private network connectivity options (ExpressRoute, VPN, SD-WAN) |
| 3 | +description: This concept article explains common options for connecting Azure to private networks (including on-premises and AWS), how they compare, and what to consider for latency, bandwidth, security, cost, and operational complexity. |
| 4 | +author: madhurinms |
| 5 | +ms.service: azure-storage-mover |
| 6 | +ms.topic: concept-article |
| 7 | +ms.author: madhn |
| 8 | +ms.date: 02/24/2026 |
| 9 | +--- |
| 10 | + |
| 11 | +# Azure private network connectivity options (ExpressRoute, VPN, SD-WAN) |
| 12 | +## Overview |
| 13 | + |
| 14 | +Azure supports several ways to connect to private networks. The best approach depends on your requirements for latency, bandwidth, security, cost, and operational complexity. |
| 15 | + |
| 16 | +* **Azure ExpressRoute** - Private, dedicated connectivity that doesn't traverse the public internet. |
| 17 | +* **Site-to-site IPsec VPN** - Encrypted tunnels over the public internet (typically using Azure VPN Gateway). |
| 18 | +* **SD-WAN via network virtual appliances (NVAs)** - Third-party appliances provide VPN/firewall features and can terminate tunnels instead of using native gateways. |
| 19 | + |
| 20 | +In general, ExpressRoute is preferred for the highest bandwidth and lowest latency. When ExpressRoute isn't available, use site-to-site VPN or an SD-WAN/NVA-based design. |
| 21 | + |
| 22 | +## Key concepts |
| 23 | + |
| 24 | +**ExpressRoute**: Private connectivity to Azure through a connectivity provider; typically used for predictable latency and higher throughput. |
| 25 | + |
| 26 | +**Azure VPN Gateway SKU**: The gateway size/SKU affects tunnel counts and throughput; choose based on required bandwidth and resiliency. |
| 27 | + |
| 28 | +**IPsec/IKE policy**: Cryptographic algorithms and parameters used to establish and secure VPN tunnels (for example, AES and SHA families, DH/PFS groups). |
| 29 | + |
| 30 | +**BGP (Border Gateway Protocol)**: Dynamic routing that exchanges prefixes between networks; commonly used for active/active tunnels and route failover. |
| 31 | + |
| 32 | +**Network virtual appliance (NVA)**: A third-party virtual network device (such as firewall/SD-WAN) deployed in Azure; often used for advanced inspection, policy, and routing. |
| 33 | + |
| 34 | +**UDR (user-defined routes)**: Custom routes in Azure that steer traffic to a specific next hop (for example, an NVA). |
| 35 | + |
| 36 | +**AWS Transit Gateway (TGW) / Virtual Private Gateway (VGW)**: AWS routing endpoints for VPN/Direct Connect; TGW is commonly preferred for hub-and-spoke and scale. |
| 37 | + |
| 38 | +**AWS VPC endpoint (VPCE) for Amazon S3**: Private connectivity from a VPC to S3; often paired with **private DNS** and endpoint/bucket policies. |
| 39 | + |
| 40 | +**S3 bucket policy and VPCE policy**: Resource-based policies that can allow/deny access, including restrictions to a specific VPCE via **aws:SourceVpce**. |
| 41 | + |
| 42 | +**Azure Private Link Service Direct Connect**: Azure capability to create outbound private connectivity to a destination IP (for example, an AWS VPCE IP) for services such as Storage Mover private connections. |
| 43 | + |
| 44 | +**Private connection approval**: Private connections might require explicit approval before they can be used by workloads/jobs. |
| 45 | + |
| 46 | +**Regional alignment**: Some resources (for example, AWS VPCEs and certain Azure service constructs) are region-scoped and must be deployed in compatible regions. |
| 47 | + |
| 48 | +## When to use each option |
| 49 | + |
| 50 | +**ExpressRoute**: Choose when you need predictable performance, private connectivity, and higher throughput for hybrid connectivity. |
| 51 | + |
| 52 | +**Site-to-site VPN**: Choose for faster setup, lower cost, or as a backup path; performance depends on internet conditions and gateway SKU. |
| 53 | + |
| 54 | +**SD-WAN/NVAs**: Choose when you need vendor-specific routing, security inspection, or an existing SD-WAN operational model. |
| 55 | + |
| 56 | +| **Option** | **Connectivity path** | **Typical strengths** | **Common tradeoffs** | |
| 57 | +|---|---|---|---| |
| 58 | +| **ExpressRoute** | Private circuit via provider/colocation | Low latency, high throughput, predictable performance | Lead time, cost, provider dependencies | |
| 59 | +| **Site-to-site IPsec VPN** | Encrypted tunnels over public internet | Quick to deploy, good for backup/DR | Variable performance; throughput limits per gateway/SKU | |
| 60 | +| **SD-WAN / NVAs** | Tunnels terminate on third-party appliances | Advanced policy, inspection, vendor features | More components to manage; appliance sizing/licensing | |
| 61 | + |
| 62 | +## Connectivity options in Azure |
| 63 | + |
| 64 | +### ExpressRoute |
| 65 | + |
| 66 | +**Learn more:** [ExpressRoute documentation](/azure/expressroute/) |
| 67 | + |
| 68 | +**Routing:** BGP is commonly used over private circuits to exchange prefixes between Azure and your network. |
| 69 | + |
| 70 | +**Connectivity providers:** ExpressRoute is typically provisioned through a colocation or connectivity provider (for example, Equinix, Megaport). |
| 71 | + |
| 72 | +### Site-to-site IPsec VPN (Azure VPN Gateway) |
| 73 | + |
| 74 | +**Overview:** Use Azure VPN Gateway for encrypted site-to-site IPsec tunnels over the public internet. For higher throughput and resiliency, select an appropriate gateway SKU (for example, Generation2 and zone-redundant SKUs where available). |
| 75 | + |
| 76 | +**Learn more:** [Tutorial - Create an S2S VPN connection](/azure/vpn-gateway/tutorial-site-to-site-portal) |
| 77 | + |
| 78 | +**Routing:** Use BGP to exchange routes and support active/active tunnels across multiple connections. |
| 79 | + |
| 80 | +For a detailed walkthrough of multi-tunnel BGP between Azure VPN Gateway and AWS, see: [Tutorial - Configure a BGP-enabled connection between Azure and AWS](/azure/vpn-gateway/vpn-gateway-howto-aws-bgp). |
| 81 | + |
| 82 | +#### Implementation tips (VPN performance) |
| 83 | + |
| 84 | +Example custom IPsec/IKE settings (validate against your device compatibility): **GCMAES256** for IPsec encryption/integrity, **SHA256** for IKE integrity, **DHGroup14**, **PFS2048**. |
| 85 | + |
| 86 | +:::image type="content" source="./media/cloud-to-cloud-networking/ipsec-policy.png" alt-text="Screenshot of ipsec policy." lightbox="./media/cloud-to-cloud-networking/ipsec-policy.png"::: |
| 87 | + |
| 88 | +**Learn more:** [Configure custom IPsec/IKE connection policies](https://docs.azure.cn/en-us/vpn-gateway/ipsec-ike-policy-howto). |
| 89 | + |
| 90 | +### SD-WAN with network virtual appliances (NVAs) |
| 91 | + |
| 92 | +SD-WAN and firewall NVAs can terminate VPN tunnels, perform inspection, and apply centralized routing and security policy. This approach is useful when you need vendor-specific capabilities or you already operate an SD-WAN platform across sites. |
| 93 | + |
| 94 | +**Fortinet**: FortiGate Next-Generation Firewall |
| 95 | + |
| 96 | +**Cisco**: Catalyst SD-WAN, Meraki SD-WAN |
| 97 | + |
| 98 | +**HPE (Aruba Networks)**: EdgeConnect SD-WAN |
| 99 | + |
| 100 | +**Palo Alto Networks**: Prisma SD-WAN |
| 101 | + |
| 102 | +**Arista (VMware)**: VeloCloud SD-WAN Virtual Edge |
| 103 | + |
| 104 | +SD-WAN NVAs are commonly licensed as either pay-as-you-go (PAYG) or bring-your-own-license (BYOL). Vendor support varies by deployment option. |
| 105 | + |
| 106 | +PAYG: Pay as you go |
| 107 | + |
| 108 | +BYOL: Bring your own license |
| 109 | + |
| 110 | +#### Example deployment (FortiGate NVA in Azure) |
| 111 | + |
| 112 | +**Select a topology** (single VM, active/passive, or active/active) based on availability and throughput requirements. |
| 113 | + |
| 114 | +**Choose a suitable VM size** (often F or D-series with higher vCPU) and enable **accelerated networking** where supported. |
| 115 | + |
| 116 | +**Network design**: place interfaces in WAN/LAN (and protected) subnets and configure NSG rules for required management and VPN ports (for example, UDP 500/4500 for IPsec). |
| 117 | + |
| 118 | +**Routing**: use UDRs to steer Azure-to-AWS prefixes through the NVA next hop. |
| 119 | + |
| 120 | +**Vendor documentation:** For example steps to configure IPsec between FortiGate devices, see the Fortinet Community article below. |
| 121 | + |
| 122 | +[How to configure VPN site-to-site between FortiGate devices (Fortinet Community)](https://community.fortinet.com/t5/FortiGate/Technical-Tip-How-to-configure-VPN-Site-to-Site-between/ta-p/197922) |
| 123 | + |
| 124 | +## AWS connectivity to Azure |
| 125 | + |
| 126 | +### AWS Direct Connect to Azure ExpressRoute |
| 127 | + |
| 128 | +AWS Direct Connect can be paired with Azure ExpressRoute through a colocation/provider to create a private, high-throughput path between AWS and Azure. |
| 129 | + |
| 130 | +**Routing:** BGP over private circuits |
| 131 | + |
| 132 | +**Connectivity:** Typically via a colocation/connectivity provider |
| 133 | + |
| 134 | +[What is Direct Connect? - AWS Direct Connect](https://docs.aws.amazon.com/directconnect/latest/UserGuide/Welcome.html) |
| 135 | + |
| 136 | +[Create an Direct Connect gateway - AWS Direct Connect](https://docs.aws.amazon.com/directconnect/latest/UserGuide/create-direct-connect-gateway.html) |
| 137 | + |
| 138 | +### AWS site-to-site VPN (BGP) |
| 139 | + |
| 140 | +For AWS-to-Azure VPN, use dynamic routing (BGP) and prefer AWS Transit Gateway (TGW) for scale and performance when applicable. |
| 141 | + |
| 142 | +**Learn more:** [Tutorial - Configure a BGP-enabled connection between Azure and AWS](/azure/vpn-gateway/vpn-gateway-howto-aws-bgp). |
| 143 | + |
| 144 | +### AWS SD-WAN with NVAs |
| 145 | + |
| 146 | +If you operate an SD-WAN platform in AWS (for example, FortiGate on EC2), you can terminate tunnels in AWS and connect to Azure using the same SD-WAN policy model used on-premises. |
| 147 | + |
| 148 | +1. Launch the NVA from AWS Marketplace and size the instance for required throughput. |
| 149 | +2. Attach WAN/LAN interfaces, associate an Elastic IP to the WAN interface, and disable source/destination checks if required by the appliance routing model. |
| 150 | +3. Configure security groups and route tables to allow Azure prefixes and steer traffic through the appliance. |
| 151 | + |
| 152 | +## Implementation details for S3 private access (VPC endpoints) |
| 153 | + |
| 154 | +### Configure an AWS VPC endpoint (VPCE) for Amazon S3 |
| 155 | + |
| 156 | +An AWS VPC endpoint (VPCE) for S3 lets your VPC reach S3 privately. For this design, you typically enable private DNS and then constrain access using VPCE and bucket policies. |
| 157 | + |
| 158 | +#### High-level steps |
| 159 | + |
| 160 | +1. Verify your VPC has **DNS support** and **DNS hostnames** enabled. |
| 161 | +2. Create an **interface** VPCE for **Amazon S3** in the target VPC and subnets, and enable **private DNS**. |
| 162 | +3. Configure VPCE and bucket policies to allow only required S3 actions and (optionally) restrict access to the specific endpoint using **aws:SourceVpce**. |
| 163 | + |
| 164 | +:::image type="content" source="./media/cloud-to-cloud-networking/vpce-policy.png" alt-text="Screenshot of vpce policy." lightbox="./media/cloud-to-cloud-networking/vpce-policy.png"::: |
| 165 | + |
| 166 | +Example: S3 bucket policy restricted to a specific VPCE. |
| 167 | + |
| 168 | +:::image type="content" source="./media/cloud-to-cloud-networking/s3-bucket-policy.png" alt-text="Screenshot of bucket policy." lightbox="./media/cloud-to-cloud-networking/s3-bucket-policy.png"::: |
| 169 | + |
| 170 | +**Note:** Record the VPCE private IP address; it is used as the destination IP for Azure Private Link Service Direct Connect. |
| 171 | + |
| 172 | +#### Security group considerations |
| 173 | + |
| 174 | +Allow required traffic from Azure source prefixes to the VPCE and related AWS resources (principle of least privilege). |
| 175 | + |
| 176 | +## Azure configuration for Private Link Service Direct Connect |
| 177 | + |
| 178 | +### Create the Private Link Service Direct Connect resource |
| 179 | + |
| 180 | +Private Link Service Direct Connect allows Azure to create outbound private connectivity to a destination IP address (for example, an AWS VPCE IP). In this scenario, it enables Storage Mover private connections to reach a private S3 endpoint over your established Azure-to-AWS network path. |
| 181 | + |
| 182 | +1. Deploy the PLS Direct Connect resource in the **same Azure region** as the Storage Mover resource and the Azure virtual network used to reach AWS. |
| 183 | +2. Enable the feature in the Azure portal using the provided flight link: [Azure portal flight link (PLS Direct Connect)](https://ms.portal.azure.com/?feature.canmodifystamps=true&exp.plsdirectconnect=true). |
| 184 | +3. Ensure the Azure VNet/subnet selected for source NAT has connectivity to the AWS VPC and the VPCE IP address. |
| 185 | + |
| 186 | +#### High-level steps |
| 187 | + |
| 188 | +1. Create the **Private Link Service (Your Service)** resource for Direct Connect in the correct region. |
| 189 | +2. Configure **Outbound settings**: |
| 190 | +3. Set connection method to **Destination IP address** and enter the **AWS VPCE IP address**. |
| 191 | +4. Select the **source NAT** virtual network and subnet that can route to AWS. |
| 192 | +5. Configure private IP address settings as required for resiliency (for example, two or more addresses in supported increments). |
| 193 | + |
| 194 | +### Create and approve private connections |
| 195 | + |
| 196 | +After creating the Direct Connect resource, create a private connection in Storage Mover and approve it before use. |
| 197 | + |
| 198 | +1. In **Storage Mover**, open **Storage Endpoints** and then the **Private Connections** tab. |
| 199 | +2. Create a private connection that references the Direct Connect private link service, then approve it so it can be associated to jobs. |
| 200 | + |
| 201 | +### Use private connections for cloud-to-cloud migration |
| 202 | + |
| 203 | +1. Use the above Private connection as part of Create job operation. Select ‘Cloud to Cloud' migration type. |
| 204 | +2. When creating a cloud-to-cloud migration job, set the S3 bucket type to **Private** and associate the approved private connection. |
| 205 | +3. Verify the private connection is listed and in **Approved** state. |
| 206 | +4. Only private connections in **Approved** state can be selected. |
| 207 | +5. Remaining job steps are the same as a public S3-to-Blob migration. |
| 208 | + |
| 209 | + |
| 210 | + |
| 211 | + |
| 212 | +## Troubleshooting |
| 213 | + |
| 214 | +### Connectivity and IP addressing |
| 215 | + |
| 216 | +* **Verify Destination IP in Azure PLS:** Ensure the Azure Private Link Service is pointed specifically to the AWS VPC Endpoint's IP address. A mismatch here will prevent the initial handshake. |
| 217 | +* **Validate Network Path:** Confirm that the underlying network infrastructure (e.g., VPN, ExpressRoute, or Cloud Interconnect) is established and routing traffic correctly between the Azure environment and the AWS VPC. |
| 218 | +* **Check Interface Configurations:** Review the AWS VPC Endpoint configuration to ensure it is active and associated with the correct subnets and security groups. |
| 219 | + |
| 220 | +### VPCE policy configuration |
| 221 | + |
| 222 | +* **Audit Resource Permissions:** Inspect the `Resource` element in your VPCE policy. It must explicitly include the ARN of the target S3 bucket (e.g., `arn:aws:s3:::your-bucket-name` and `arn:aws:s3:::your-bucket-name/*`). |
| 223 | +* **Audit Action Permissions:** Ensure the `Action` element in the VPCE policy permits necessary operations. At a minimum, `s3:Get*` and `s3:List*` are required for reading and browsing data. |
| 224 | +* **Policy Logic:** If using a custom policy, ensure there are no "Deny" statements that inadvertently override the "Allow" statements for the Azure-sourced traffic.<br> |
| 225 | + |
| 226 | +:::image type="content" source="./media/cloud-to-cloud-networking/vpce-policy.png" alt-text="Screenshot of vpce policy." lightbox="./media/cloud-to-cloud-networking/vpce-policy.png"::: |
| 227 | + |
| 228 | +### S3 bucket policy constraints |
| 229 | + |
| 230 | +* **VPCE allow listing:** Check the S3 Bucket Policy for a `Condition` block. If the bucket restricts access, it must explicitly allow the `aws:SourceVpce` corresponding to the VPC Endpoint being used. |
| 231 | +* **Principal Access:** Ensure the IAM identity or the anonymous access (if applicable via VPCE) is not blocked by the bucket's Access Control List (ACL) or Public Access Block settings. |
| 232 | + |
| 233 | +:::image type="content" source="./media/cloud-to-cloud-networking/s3-bucket-policy.png" alt-text="Screenshot of bucket policy" lightbox="./media/cloud-to-cloud-networking/s3-bucket-policy.png"::: |
| 234 | + |
| 235 | +### Regional alignment |
| 236 | + |
| 237 | +* **Region Scope Validation:** AWS VPC Endpoints for S3 are **region scoped**. A VPCE in `us-west` cannot route traffic to an S3 bucket located in `us-east`. |
| 238 | +* **Remediation:** If a regional mismatch is identified, the S3 bucket must be migrated to the same region as the VPCE, or a new VPCE must be established in the bucket's region (noting that this may require additional cross-region routing |
| 239 | + |
| 240 | +## Limits |
| 241 | + |
| 242 | +* Customers can configure a maximum of 10 Private Connections/region. This includes private connection state in Approved/Pending/Disconnected state. |
| 243 | +* PLS direct should be configured in the same region as Storage Mover Resource. |
| 244 | + |
| 245 | +## Performance |
| 246 | + |
| 247 | +| **Setup** | ** Max Throughput (Apxmt)** | |
| 248 | +|---|---| |
| 249 | +| **Azure VPN Gateway (4 IPSec Tunnels) with single Private connection** | 4.5 Gbps | |
| 250 | +| **Azure VPN Gateway (4 IPsec Tunnels) with 2 Private connections** | 5.6 Gbps | |
| 251 | +| **FortiGate SDWAN with a Private Connection** | 2 Gbps | |
| 252 | +| **2 FortiGate SDWANs each with VPN tunnel and Private Connection** | 2 Gbps * 2 | |
| 253 | + |
| 254 | +## Next steps |
| 255 | + |
| 256 | +Review ExpressRoute concepts and planning in the [ExpressRoute documentation](/azure/expressroute/). |
| 257 | + |
| 258 | +Create a site-to-site VPN connection in Azure: [Tutorial - Create an S2S VPN connection](/azure/vpn-gateway/tutorial-site-to-site-portal). |
| 259 | + |
| 260 | +For BGP between Azure and AWS, follow: [Tutorial - Configure a BGP-enabled connection between Azure and AWS](/azure/vpn-gateway/vpn-gateway-howto-aws-bgp). |
| 261 | + |
| 262 | + |
| 263 | + |
| 264 | + |
| 265 | + |
| 266 | + |
| 267 | + |
| 268 | + |
| 269 | + |
| 270 | + |
| 271 | + |
| 272 | + |
| 273 | + |
| 274 | + |
| 275 | + |
| 276 | + |
| 277 | + |
| 278 | + |
0 commit comments