Azure Private Link: Reaching Cloud Services Without Touching the Public Internet
A complete, plain-English guide to private endpoints, private DNS, Private Link service, hybrid access, security benefits, network design, troubleshooting and the mistakes that make private connections quietly fail.
Imagine a large company with a bank next door. Employees could walk out of the front gate, cross the public street and queue at the bank counter with everyone else. Or the company could build a covered corridor from its own lobby straight to a private bank window, so staff never step outside. The corridor is faster to reach, nobody on the street sees who goes in, and strangers cannot use it because it only starts inside the company.
Azure Private Link builds that corridor between your private network and the cloud services you depend on. Services such as storage, databases and key vaults normally live behind public addresses on the internet. Private Link gives them a private address inside your own network, so your servers reach them through the Microsoft backbone and the public door can be locked. In this guide you will learn what it is, how it works inside, why DNS is the heart of every Private Link design, how to connect from on-premises, how to secure, monitor and pay for it, and which mistakes to avoid.
1What Private Link Is and Why It Exists
Begin with the problem of services that live on public addresses, then see how a private address changes the story.
The problem
Most Azure platform services, such as a storage account or a SQL database, are reached through a name that resolves to a public internet address. Even when your own server sits inside a private network, its request to the storage account usually leaves through the network edge and enters the service’s public front door. That front door is open to the world, protected only by passwords, keys and firewall lists. If a key leaks, anyone anywhere can try to use it. Security teams dislike this, and many rules for regulated industries ask for private paths.
What the service is
Azure Private Link lets you access Azure platform services, and also services owned by partners or by your own teams, over a private endpoint: a network interface with a private address from your own virtual network. When your application connects to that address, the traffic stays on the Microsoft private backbone network. You can then switch off public access on the service entirely, so the only way in is through your private corridor.
A hospital has a public entrance for visitors and a staff-only tunnel to the pharmacy building across the road. If the pharmacy locks its street door and accepts only people arriving through the tunnel, strangers cannot walk in, yet every staff member still gets there. The tunnel mouth is the private endpoint.
What you gain
Traffic off the internet
Packets travel over the Microsoft backbone from your network to the service, never through the public internet.
Public door can close
You can disable public access, so stolen keys are useless from outside your network.
Private address you own
The service appears as one address in your range, so firewalls and routing rules treat it like any other internal server.
Works from on-premises
Offices connected by VPN or private circuits can reach the same private address.
Protection against data theft
The endpoint points to one specific resource, not the whole service, which limits where data can be sent.
Offer your own service privately
You can publish a service of your own so customers connect without exposing it to the internet.
2Background: How Cloud Services Were Reached Before
Private Link did not appear from nowhere. It answers weaknesses in earlier ways of connecting to platform services.
The public endpoint
Every platform service started with a public endpoint, a name and address reachable from anywhere. This is simple and works with every device and every country, which is why it is the default. The cost is exposure. Anything reachable from anywhere will be scanned, probed and tested by attackers within hours of existing.
Firewall rules on the service
The first improvement was a firewall built into the service. You could say “accept connections only from these public addresses.” That helps, but your own servers in the cloud may not have stable public addresses, and addresses can be shared or spoofed by mistakes in other layers. You were still talking across the public internet.
Service endpoints
Next came service endpoints. These let a subnet in your virtual network be listed as allowed on the service’s firewall, so traffic from that subnet to the service travels the Azure backbone and the service sees which subnet it came from. This was a real step forward and is easy to enable. But the service still has a public address. Your traffic is just given a better road to it. Also, service endpoints do not work from on-premises networks, and they apply to the whole service type in a region, not to one chosen resource.
Network injection
Some services, such as certain managed databases, can be deployed directly into your virtual network, taking addresses in a dedicated subnet. This gives full privacy but only for services built to be injected, and it needs larger address ranges and special subnets.
Private Link
Private Link takes a different path. Instead of giving the service a better route to a public address, it brings a private doorway for one specific resource into your network. The service resource gets an address in your own range. It works for a wide list of services with a common approach and also reaches from on-premises.
| Approach | Service address you connect to | Works from on-premises | Scope |
|---|---|---|---|
| Public endpoint | Public | Yes, via internet | Whole internet unless firewalled |
| Service firewall | Public | Yes, if address listed | Listed public addresses |
| Service endpoint | Public, with backbone routing | No | Whole service type in a region |
| Network injection | Private, in your subnet | Yes | One deployed instance |
| Private Link | Private, in your subnet | Yes | One specific resource |
Teams often ask whether service endpoints are “good enough”. They are useful, but they leave the public door in place. Private Link lets you close that door. Knowing this difference helps you explain the choice to managers and auditors.
3Core Concepts: The Vocabulary of Private Link
Each term below says what it is, why it exists, a picture from daily life and an example.
Private endpoint
A network interface in your subnet with a private address, connected to one specific service resource. Analogy: a private telephone extension wired to one office in another building. Example: an extension reaching one storage account.
Private Link resource
The service instance the endpoint points to, such as a storage account, a database server or a key vault. Analogy: the office at the other end of the extension.
Sub-resource or group ID
The particular part of a service you connect to, such as the blob part or the file part of a storage account. Analogy: a department inside the office. One endpoint serves one sub-resource.
Private Link service
Your own service, placed behind a standard load balancer, offered to other networks through private endpoints. Analogy: you open your own bank window and give customers a private corridor.
Private DNS zone
A private phone book that turns a service name into the private address, visible only inside linked networks. Analogy: a staff directory that lists the extension number, not the public number.
Zone group
A setting that lets the endpoint place its own record automatically into a private DNS zone. Analogy: the receptionist who updates the directory when a new extension is installed.
Virtual network link
The connection that lets a virtual network read a private DNS zone. Analogy: giving a building a copy of the staff directory.
Connection approval
The owner of the service must accept a connection request in some cases, such as when an endpoint comes from a different company. Analogy: the receptionist approving a visitor pass.
Public network access setting
A switch on the service to disable its public door. Analogy: locking the street entrance of the bank.
Conditional forwarder
A DNS rule on a server that sends questions for certain names to another resolver. Analogy: a switchboard that says “for pharmacy calls, ask the pharmacy operator.”
Alias and CNAME
A name that points to another name. Services return a chain of names; the chain is how private and public answers are chosen. Analogy: a nickname that leads to the real name.
NAT IP for Private Link service
An address from the provider’s subnet used to represent consumers when they reach the published service. Analogy: a front-desk badge used for all visitors.
How the words fit together
Read it as a chain: a private endpoint in a subnet points to a Private Link resource through a group ID. A private DNS zone linked to the network makes the service name resolve to the endpoint’s private address. The application keeps using the same name it always used, but now it lands on the private corridor. When the owner has switched off the public network access, no other way remains.
A Private Link design always has two parts: the endpoint that gives a private address, and the DNS that makes names point to it. Missing either part gives a connection that fails or, worse, quietly uses the public path.
4Architecture and Components
Here is the full picture of how a private endpoint connects your network to a platform service.
flowchart LR
subgraph VNET["Your virtual network"]
APP["Application server"]
subgraph PESUB["Private endpoint subnet"]
PE["Private endpoint network interface"]
end
DNSR["DNS resolver"]
end
PDZ["Private DNS zone"] -.-> DNSR
APP -->|"asks for service name"| DNSR
DNSR -->|"returns private address"| APP
APP -->|"connects to private address"| PE
PE ==>|"Microsoft backbone"| SVC["Storage account or database"]
PUB["Public endpoint of service"] -. "disabled by owner" .-> SVC
The private endpoint
It is a network interface that lives in a subnet you choose. It takes one private address, and it is linked to exactly one resource and one sub-resource. Think of it as a small receptionist’s desk in your building that forwards every call to one specific office elsewhere.
The platform side
On the service side, the resource keeps a list of private endpoint connections, each with a state such as pending, approved or rejected. Traffic from an approved endpoint is accepted. The service can also be told to refuse all public traffic, leaving the private endpoint as the only entrance.
The DNS part
A private DNS zone holds the record that maps the service name to the private address. The zone is linked to the virtual networks that need it. Without this link, name lookups return the public address and the private endpoint goes unused.
Supporting pieces
| Component | Role |
|---|---|
| Subnet for endpoints | Holds the network interfaces; sized for the number of endpoints planned |
| Private DNS zone | Answers name questions with private addresses inside linked networks |
| Virtual network link | Allows a network to use the zone |
| Network security group | Can filter traffic to endpoints, if the subnet setting for policies is enabled |
| Route table | Can steer traffic to endpoints through a firewall when needed |
| DNS forwarder or resolver | Lets on-premises networks use the same private answers |
| Azure Monitor | Records metrics and logs for endpoints and the services behind them |
| Azure Policy | Enforces rules like “all storage accounts must use private endpoints” |
5Private Endpoint, Private Link Service and Service Endpoint
Three similar names cause endless confusion. Separating them makes every later chapter easier.
Private endpoint: the consumer side
A private endpoint is what you create in your network to reach a service. You are the consumer. It brings a remote service to a local private address. This is the most commonly used part of Private Link.
Private Link service: the provider side
A Private Link service is what you create when you want to offer something of yours to others. You put your application behind a standard load balancer, attach a Private Link service to it, and share its identifier. Consumers in other networks, even in other companies, create private endpoints that point to it. Their traffic reaches your load balancer without your service having a public address. You are the provider.
Service endpoint: the older neighbor
A service endpoint, as described earlier, is a routing and firewall feature. It uses the service’s public address but tells Azure to send traffic over the backbone. It is not part of Private Link, although people often compare them.
| Question | Private endpoint | Private Link service | Service endpoint |
|---|---|---|---|
| Who creates it? | The consumer | The provider | The network owner |
| What does it give? | A private address for a remote resource | A way to publish your service privately | A better path to a public address |
| Service keeps a public address? | Can be turned off | Not needed | Yes |
| Reachable from on-premises? | Yes | Yes, through endpoint | No |
| Scope | One resource, one sub-resource | One published service | All instances of a service type in a region |
| Extra cost | Hourly and data charges | Charges on the endpoint side | Free feature |
A private endpoint is your office’s direct line to a supplier. A Private Link service is you giving your customers a direct line to you. A service endpoint is telling the courier to use a faster road to the supplier’s public shop. The first two build new private connections; the last only improves a road.
A simple rule to remember
If you want to use something privately, make a private endpoint. If you want to offer something privately, make a Private Link service. If you only want a simple, free improvement and you do not need to close the public door, a service endpoint may do.
6Internal Working: How One Connection Travels
Follow one request from an application to a storage account through a private endpoint.
sequenceDiagram participant APP as Application participant DNS as Private DNS participant PE as Private endpoint participant BB as Microsoft backbone participant SVC as Storage service APP->>DNS: Where is mystorage.blob.core.windows.net? DNS-->>APP: Private address 10.1.4.5 APP->>PE: Open secure connection to 10.1.4.5 PE->>BB: Forward over private path BB->>SVC: Deliver to approved resource SVC-->>BB: Response BB-->>PE: Return PE-->>APP: Response with service identity
Step by step
The application asks for a name
It uses the same service name it always used. Nothing in the application code has to change.
DNS answers with a private address
Because the network is linked to the private DNS zone, the lookup returns the endpoint’s private address instead of the public one.
The application connects
It opens a normal secure connection to that private address. To the application, the service looks like another server in the network.
The endpoint forwards the traffic
The platform carries the connection from the network interface over the Microsoft backbone to the specific service resource.
The service checks the connection
It verifies that the connection comes from an approved private endpoint and then applies its normal authentication, such as keys or identity tokens.
Data returns the same way
Responses travel back on the same private path.
The name stays the same
A beautiful detail is that applications keep using the public service name. The magic is in DNS, which returns different answers to different askers. Inside the linked network, the answer is private. Outside, the answer is public (or nothing, if public access is off). This avoids changing certificates, since the secure connection is still made to the original name.
Source address seen by the service
The service sees the connection as arriving from the private endpoint’s resource, not from your server’s address. You cannot rely on the service’s log of the client address to identify the specific caller inside your network. Use your own network logs for that.
Encryption still applies
Private Link makes the path private, not the data automatically encrypted by itself. Services still use encrypted connections, and you should keep requiring them. Private path plus encryption plus authentication is the full set.
7DNS: The Heart of Every Private Link Design
More Private Link problems come from DNS than from anything else. Learn this chapter well and most faults become easy to find.
What DNS does
DNS is the phone book of the internet. You give it a name and it returns an address. Without DNS, you would need to remember numbers for every service. In a Private Link design, the whole trick is that the same name returns a different address depending on who asks.
The chain of names
When you look up a storage name, the answer is a chain. The name you typed points to another name, which in turn leads to the final address. With Private Link, Azure adds a special middle step: the public name points to a name inside a special private-link zone. If your network has a private DNS zone for that area, the lookup finds the private address. If it does not, the lookup falls through to the public address.
flowchart TD
Q["App asks for mystorage.blob.core.windows.net"] --> R{"Resolver linked to private DNS zone?"}
R -->|"Yes"| P["Private zone returns 10.1.4.5"]
R -->|"No"| U["Public DNS returns public address"]
P --> OK["Traffic uses private endpoint"]
U --> X{"Public access allowed on service?"}
X -->|"Yes"| PUBP["Traffic uses public internet path"]
X -->|"No"| FAIL["Connection refused"]
Private DNS zones
Azure suggests standard zone names for each service type, such as one zone for blob storage, another for SQL databases and another for key vaults. You create the zone, link it to every virtual network that must resolve the private name, and the endpoint adds a record. Using the standard names matters, since they match what the service expects in the chain.
Zone groups
With a zone group on the endpoint, the platform creates and updates the record in the chosen zone automatically. This removes human error when endpoints are created, replaced or have an address change. It is the preferred approach.
Where the lookup comes from
A virtual machine in a virtual network asks the DNS server configured for that network. If it is the default Azure resolver, and the network is linked to the zone, it gets the private answer. If it is a custom DNS server, that server must itself be able to ask Azure’s resolver, or it will return public answers. This is the most common cause of “it worked in the portal, but my server uses the public address.”
| DNS setup | Private answer? | What to check |
|---|---|---|
| Default Azure resolver, network linked to zone | Yes | Link exists, record exists |
| Default resolver, network not linked | No | Add a virtual network link |
| Custom DNS server in the network | Only if it forwards to Azure’s resolver | Forwarder to the Azure resolver address |
| On-premises DNS server | Only with conditional forwarding | Forwarders point to a resolver inside Azure |
| Public resolver on the client | Never | Do not bypass corporate DNS |
Test with a lookup
From the machine that has the problem, look up the service name using a standard lookup tool. If the answer is a private address from your range, DNS is right. If it is a public address, fix DNS before you touch anything else.
Asking “where is the pharmacy?” in the hospital lobby gets the answer “take the tunnel, second door.” Asking the same question on the street gets the address of the street entrance. The question is the same; the helper who answers decides which path you take.
8The Lifecycle of a Private Endpoint Connection
A private endpoint connection moves through states, and knowing them explains many surprises.
stateDiagram-v2 [*] --> Pending: request created Pending --> Approved: owner approves Pending --> Rejected: owner rejects Approved --> Disconnected: owner removes or resource deleted Rejected --> Pending: request again Disconnected --> [*] Approved --> Approved: traffic flows
Automatic and manual approval
When you own both the endpoint and the service, or have the right permissions, the connection is approved automatically at creation. When the service belongs to someone else, or you lack that right, the connection starts as pending until the owner approves. This is a deliberate safety step: the owner of the service decides who may connect.
Creating an endpoint
Choose the resource and sub-resource
Pick the service instance and the part you need, such as blob or file for storage.
Choose the subnet
Place the endpoint in a subnet with enough free addresses and appropriate rules.
Configure DNS
Pick the matching private DNS zone and let the zone group manage the record.
Wait for approval if needed
If pending, ask the service owner to approve it.
Test from inside the network
Look up the name, connect to the service and confirm it uses the private address.
Close the public door
When all clients work privately, disable public network access on the service.
Changing and replacing endpoints
An endpoint cannot be moved to another subnet. To change subnets, you create a new endpoint, switch, and delete the old one. Plan the cutover so DNS is updated cleanly and old records do not linger. Using a zone group helps keep records matched to the live endpoint.
What deletion does
If the endpoint is deleted, its address is released and the DNS record should be removed. If the service resource is deleted, the connection becomes disconnected. Clients will then fail until you rebuild the pieces. Keep deletion under change control.
Disabling public access before every client uses the private path breaks anyone who still connects the old way, including build servers, developer laptops and partner tools. List every client first, then switch carefully.
9Supported Services and Sub-Resources
Private Link works with a long and growing list of Azure services. The list changes often, so treat the tables here as examples and verify the current list.
Why sub-resources matter
Many services have several parts that are reached through different names. A storage account has blob, file, queue, table and other parts. Each needs its own private endpoint with its own group ID and DNS zone. If you create one for blob only, file access still uses the public path or fails when public access is off.
| Service (example) | Typical sub-resources | Typical private DNS zone area |
|---|---|---|
| Storage account | Blob, file, queue, table, web, data lake | One zone per part |
| SQL database server | SQL server | One zone for SQL |
| Key Vault | Vault | One zone for vaults |
| Container registry | Registry | One zone, with regional data records |
| App Service and Functions | Sites | One zone for web apps |
| Cosmos database | Per API such as SQL or MongoDB | Zone depends on API |
| Service Bus and Event Hubs | Namespace | Shared zone for the namespace family |
| Azure Monitor private scope | Monitor | Several zones together |
These are examples only. Names of zones and group IDs are published in the official documentation, and they should be copied from there rather than guessed.
Services with extra considerations
Web apps
A private endpoint on a web app controls inbound access only. Outbound connections from the app to other services need a different feature, called virtual network integration.
Container registries
Registries use extra data endpoints per region, so more than one record is needed.
Monitoring
Private monitoring uses a scope object and several DNS zones. Missing one makes agents fall back or fail.
Data analytics services
Some workspaces need separate endpoints for studio, notebooks and data parts.
Cross-region and cross-tenant
An endpoint can usually point to a resource in another region or another directory, with approval.
Limits
Each subscription and network has a maximum number of endpoints. Check current limits.
Checking support before designing
Before promising a private design to a team, confirm in the documentation that the service supports private endpoints, in your region, at your chosen pricing tier. Some tiers of some services do not. Discovering this late can force a service upgrade or a redesign.
10Private Link Service: Publishing Your Own Application
The provider side lets you offer your application to other networks without a public address.
The pieces
You run your application on servers behind a standard internal load balancer. You create a Private Link service attached to the load balancer’s frontend. The service uses one or more addresses from a subnet, called NAT addresses, to represent incoming consumer traffic. Consumers create private endpoints that point to your service’s identifier, called its alias, and you approve them.
flowchart LR
subgraph CONS["Consumer network"]
CAPP["Consumer application"] --> CPE["Private endpoint"]
end
subgraph PROV["Provider network"]
PLS["Private Link service with NAT addresses"] --> ILB["Standard load balancer"]
ILB --> S1["App server 1"]
ILB --> S2["App server 2"]
end
CPE ==>|"private backbone"| PLS
Why use it
Software companies use it to offer private connections to customers without sharing network ranges. Large organizations use it between departments that have overlapping address ranges, because the NAT step hides the consumer’s real addresses. Platform teams use it to share a central service, such as a license server or an internal API, with many spokes.
Overlapping address ranges
Two networks with the same address range normally cannot be connected. With Private Link service, the consumer only sees an address from its own range, and the provider sees addresses from its NAT range. Neither needs to know the other’s ranges, which is a big help when joining networks built independently.
Controlling access
You decide who may connect by subscription visibility lists and by manual approval. Auto-approval can be given to trusted subscriptions, and everyone else must wait for approval. Review the list of connections regularly.
Seeing the consumer
Because of the NAT step, your servers see the NAT addresses, not the consumer’s real addresses. If you need to know the original address, there is an option to pass it along using a header protocol, which your application must be able to read. Check the documentation for the details and limits.
Limits and sizing
NAT address count
Each NAT address offers a limited number of ports. Many consumers or connections need more addresses.
Standard load balancer only
The basic load balancer cannot be used with the service.
Region match
The service and load balancer must live in the same region, though consumers may be elsewhere.
Protocols
Traffic is carried at the network connection level, so any application protocol over the supported transport works.
A supplier gives each customer a private phone line that rings at one desk inside the supplier’s company. The customer sees only their own phone system. The supplier sees only one reception line. Neither needs to learn the other’s internal numbering.
11Network Design: Subnets, Filtering and Routing
Private endpoints are network citizens. They need space, sensible filtering and correct routes.
A subnet for endpoints
You can place endpoints in any subnet, but many teams create a dedicated subnet for them. Each endpoint uses one address, and some services need several addresses for one logical endpoint. Size the subnet with room to grow. A separate subnet lets you apply a clear set of network rules to all endpoints in one place.
Network policies for endpoints
Historically, network security groups and user-defined routes did not apply to private endpoint traffic. A subnet setting now lets you enable network policies so that security groups and routes affect the endpoints. With it on, you can filter who may reach each endpoint and send the traffic through a firewall. Check the current behavior and the exact setting for your case.
Hub-and-spoke designs
flowchart TD
subgraph HUB["Hub network"]
FW["Firewall"]
DNSH["DNS resolver"]
PEH["Shared private endpoints"]
end
subgraph SP1["Spoke 1"]
A1["Applications"]
end
subgraph SP2["Spoke 2"]
A2["Applications"]
end
A1 --> FW
A2 --> FW
FW --> PEH
A1 -.-> DNSH
A2 -.-> DNSH
PDZ["Private DNS zones linked to hub and spokes"] -.-> DNSH
PEH ==> SVC["Platform services"]
Central or local endpoints
| Choice | Benefit | Cost |
|---|---|---|
| Endpoints in a central hub | Fewer endpoints, simple DNS, one place to inspect | Traffic crosses peering and the hub; shared limits |
| Endpoints in each spoke | Isolation, local traffic, team ownership | More endpoints and more DNS links |
| Mix by sensitivity | Strict control for critical data, simplicity for the rest | More rules to explain |
Routing through a firewall
If you want a firewall to inspect traffic to endpoints, add routes that send the endpoint addresses to the firewall. Return traffic must come back the same way, or the firewall will drop it. With network policies enabled, a more specific route to the endpoint address is respected. Test carefully because asymmetric paths cause confusing faults.
Peering and reach
Machines in peered networks can reach an endpoint if routes and rules allow it. The endpoint does not need to be in the same network as the client. DNS, however, must be linked or forwarded for each network that needs the private name.
Maintain a simple table of every endpoint: the service it reaches, its subnet, its address, its DNS zone and its owner. Troubleshooting is very quick when this table exists, and very slow when it does not.
12Hybrid Access: Reaching Private Endpoints From On-Premises
Offices and data centers can use the same private corridors, if the path and the names are arranged correctly.
The path
Your on-premises network connects to Azure through a site-to-site VPN or a dedicated private circuit. Once connected, on-premises machines can send traffic to the private address of an endpoint just as they would to any Azure server, provided that routes are advertised both ways and firewalls allow it.
The name
The path is the easy part. The names are harder. On-premises DNS servers know nothing about your private DNS zones in Azure. If an office machine asks for the storage name, its normal DNS returns the public address. To fix this, create a conditional forwarder on the on-premises DNS server that sends questions for the service’s name area to a resolver inside Azure. That resolver, linked to the private zones, returns the private address.
sequenceDiagram participant PC as Office computer participant ODNS as On-premises DNS participant ARES as Azure DNS resolver participant PDZ as Private DNS zone participant PE as Private endpoint PC->>ODNS: Lookup service name ODNS->>ARES: Conditional forward for service area ARES->>PDZ: Query linked private zone PDZ-->>ARES: Private address ARES-->>ODNS: Private address ODNS-->>PC: Private address PC->>PE: Connect over VPN or private circuit
Which forwarding zone
The recommended forwarding name is the special private-link name of the service, rather than the plain public name. Forwarding the plain public name can break access to other, non-private resources in the same area. Read the current guidance in the documentation to select the right zone name for each service.
The Azure resolver
You need something in Azure that can answer forwarded questions. Options include a managed private DNS resolver service with an inbound address, or a DNS server running on a virtual machine that forwards to the Azure resolver. A managed resolver reduces upkeep.
Common hybrid problems
| Symptom | Likely cause | Fix |
|---|---|---|
| Office computer gets the public address | No conditional forwarder | Add forwarder to the Azure resolver |
| Name works but connection times out | Route or firewall missing on the path | Check routes in both directions and rules at each firewall |
| Works for some offices only | Different DNS servers in each office | Configure all DNS servers the same way |
| Laptop at home fails | Remote users bypass corporate DNS | Use a VPN client that sets the corporate DNS |
| Intermittent failures | One forwarder or resolver is unhealthy | Add a second resolver and monitor |
Closing the public door also closes it for developer laptops that are not on the private network. Decide in advance how developers will connect: through VPN, a jump host or a private development environment.
13Security Benefits and Data Exfiltration
Private Link improves security in several ways. The biggest is controlling where data may flow.
Closing the public door
The simplest benefit is turning off public network access on the service. After that, an attacker with a stolen key still cannot connect from the internet, because there is no public path to try. The attacker would need to be inside your network or one connected to it.
Data exfiltration
Data exfiltration means data being copied out of your control, whether by an attacker or by a careless insider. With public access and service endpoints, a compromised server inside your network might copy files to any storage account in the same service, including one owned by the attacker, because the route allows the whole service type. A private endpoint points to one specific resource. The only storage account reachable over that private path is the one you chose. This shrinks the places data can be sent.
An office mailbox that accepts letters addressed to any post office box in the city lets someone mail secrets to a stranger. A pneumatic tube that connects only to the company’s own archive room cannot deliver anywhere else.
Combined with other controls
Firewall allow-list
A network firewall denies all outbound traffic except to approved private endpoints and names, so servers cannot reach the public service address.
Identity-based access
Use managed identities and role assignments instead of shared keys, so a leaked secret is less valuable.
Service firewall rules
Keep the service’s own network rules strict as a second barrier.
Approval workflow
Require manual approval for connections from outside your own subscriptions.
Policy enforcement
Use Azure Policy to deny services that allow public access and to require private endpoints.
Encryption
Keep secure connections required and manage keys in a vault reached privately.
What Private Link does not do
It does not authenticate users, scan content, or stop a trusted insider from misusing allowed access. It does not replace encryption, role-based access or monitoring. It narrows the paths and removes the public one. A weak password on an application still lets an inside attacker in.
Control of who can create endpoints
Creating a private endpoint is a powerful act, since it opens a path to a service. Restrict the permission to create endpoints, review them in audits and alert on new ones. An attacker with enough rights might create an endpoint to their own resource to move data out, so watch for unexpected connections to unknown resources.
| Risk | Control |
|---|---|
| Public access still on | Disable it on the service after migration; enforce by policy |
| Data copied to a foreign resource | Private endpoint to specific resources, firewall allow-list |
| Rogue endpoints created | Restrict permissions, alert on new endpoints, review connections |
| Leaked keys | Managed identities, key rotation, vault access via private path |
| Wrong DNS exposes traffic to public path | Test lookups, deny public access so mistakes fail closed |
| Weak internal segmentation | Network rules on the endpoint subnet |
14Access Control and Governance Around Endpoints
A private network path is only one lock. Good governance makes sure the doors, keys and visitors are all managed.
Role-based access
Azure role-based access control decides who can create, change and approve endpoints. Give network engineers the right to create endpoints in network resource groups, give service owners the right to approve connections on their resources, and give auditors read access. Splitting these duties prevents one person from both creating a path and approving it.
Approvals across teams
When one team wants a connection to another team’s service, the request arrives as a pending connection. The service owner reviews: who is asking, which subscription, which network and why. Approve, reject, and record the reason. A shared list of approved consumers is useful for audits.
Azure Policy
Policies are rules that Azure itself enforces. Useful examples include: deny creation of storage accounts with public access, require that selected services have private endpoint connections, audit endpoints that are not linked to the standard private DNS zones, and require that endpoints exist in approved subnets. Policies can also deploy missing DNS records automatically. They turn good intentions into automatic checks.
Naming and tags
Name endpoints in a consistent way that shows the service, the sub-resource, the environment and the region. Tag them with owner, cost center and application. A good name lets anyone read the purpose from the list.
Change control
Deleting a DNS zone link or an endpoint can take down an application instantly. Use resource locks on shared DNS zones and endpoints that production relies on. Apply changes through infrastructure code with review. Keep the earlier version available for quick rollback.
Documentation
Write down the standard design: where DNS zones live, who owns them, which networks are linked, how on-premises forwarding works and who may approve what. A short document with a diagram saves hours during incidents and onboarding.
Most organizations keep private DNS zones in one shared subscription managed by the network team, with spokes linked to them. This avoids many copies of the same zone with conflicting records.
15Performance, Limits and Scaling
Private endpoints are simple, but they have limits worth knowing before you plan a large estate.
Bandwidth and latency
A private endpoint is not a separate machine with its own throughput cap that you must size. It is a path through the platform. Practical speed depends on the service, on the client, and on any firewall or gateway in the path. Latency is normally very close to the public path because both ride the same backbone, and sometimes better because there are fewer hops at the edge. If you send traffic through a firewall in a hub, that firewall adds its own delay and capacity limit.
Connection counts and ports
For the Private Link service side, NAT addresses limit the number of simultaneous connections per consumer. For heavy use, add more NAT addresses so the pool of ports is larger. Watch connection counts on the load balancer.
Number of endpoints
Each network, each subscription and each service resource has maximum counts of endpoints and connections. Large estates with thousands of resources can reach them. The documentation lists the numbers, and they change over time, so check them while planning, not after the first failure.
Address space
Every endpoint takes at least one address from its subnet, and some take more. A subnet that seemed generous can fill up as teams add endpoints for each storage part, each database and each vault. Reserve ranges and keep a record of use.
A worked sizing example
The numbers below are illustrative, not limits. Suppose a company has 30 applications, and each needs private access to a storage account with three parts (blob, file and queue), a database server and a key vault. That is 5 endpoints per application, or 150 endpoints. If each uses one address and you add a growth margin of 40 percent, you need about 210 addresses. A subnet with 256 addresses has some reserved by Azure, which leaves slightly fewer usable, so choose a larger range, such as one holding 512, or use a few subnets. Compare this plan with the real current limits per network.
Shared endpoints reduce counts
If many applications use the same storage account or vault, one shared endpoint in a hub serves all. This cuts counts but raises the shared-fate risk, as discussed before.
Plan subnets generously
Changing a subnet later means moving endpoints.
Count per sub-resource
One storage account can need five endpoints, not one.
Track limits
Alert when you reach seventy percent of a limit.
16High Availability and Resilience
Private paths must keep working when parts fail. Consider where each piece can break.
The endpoint itself
A private endpoint is a platform-managed construct and is built to be resilient inside its region. It does not need you to run two of them for redundancy against ordinary hardware faults. Its availability follows that of the underlying platform and the service it connects to.
The service behind it
If the service is zone-redundant or geo-replicated, the endpoint reaches the primary location. For cross-region recovery, you need an endpoint for the secondary resource in the secondary region too, plus DNS arrangements that make clients switch. Many services offer a failover that changes which resource a name points to; check how that interacts with private DNS records, because the private record must follow the failover.
DNS is part of availability
If the resolver or the private zone is unavailable, names do not resolve and applications fail even though the endpoint is healthy. Use redundant resolvers, keep DNS zones in resilient configurations, and monitor lookups. Many large outages in private designs were DNS outages.
Regional design
flowchart LR
subgraph RA["Region A"]
APPA["Applications"] --> PEA["Private endpoint to primary storage"]
end
subgraph RB["Region B"]
APPB["Standby applications"] --> PEB["Private endpoint to secondary storage"]
end
PEA ==> PRIM["Primary storage account"]
PEB ==> SEC["Secondary storage account"]
PRIM -. "replication" .-> SEC
PDZ["Private DNS zones linked to both regions"] -.-> APPA
PDZ -.-> APPB
Failure modes to expect
| Failure | Effect | Defense |
|---|---|---|
| Private DNS link removed | Names resolve to public addresses, connections fail when public is off | Locks, policy, alerts on zone changes |
| Endpoint deleted | Applications lose access | Locks and change control |
| Resolver down | No name resolution | Redundant resolvers |
| Region outage | Primary endpoint unavailable | Secondary endpoint, tested failover |
| Service failover without DNS update | Clients still point to the old resource | Automate record changes, test |
| Subnet full | Cannot add endpoints | Plan address space |
17Monitoring, Logging and Troubleshooting
When a private connection fails, a calm routine finds the cause quickly. Almost always it is DNS, routing or a rule.
What to watch
Bytes in and out
Traffic through each endpoint, to see use and spot sudden changes.
Connection state
Pending, approved or disconnected states of each connection.
Network flow logs
Which sources talk to the endpoint address, when and how much.
DNS query logs
Which names are asked and what was answered, to find clients getting public answers.
Activity log
Creation, deletion and approval of endpoints and DNS changes.
Service logs
Access logs of the target service, to confirm requests arrive privately.
A troubleshooting walk
Is the connection approved?
Check the state of the endpoint connection on the service. Pending or rejected means no traffic flows.
What does DNS return?
From the failing machine, look up the name. A private address means DNS is fine. A public address means a missing zone link, a custom DNS gap or a missing forwarder.
Can the machine reach the address?
Test a connection on the service port to the private address. A timeout points to routes or filters.
Do rules allow it?
Check security groups, firewall rules and effective routes on the client and, if network policies are on, on the endpoint subnet.
Does the service accept this caller?
If the connection is made but requests fail with authorization errors, the problem is identity or keys, not the network.
Is the right sub-resource covered?
An endpoint for blob does not help file access. Confirm that each needed part has its own endpoint and zone.
Common error pictures
| What you see | Usual cause |
|---|---|
| “Public access is not permitted” | DNS returned the public address while the public door is closed |
| Timeout connecting to a private address | Route, security group or firewall blocks the path |
| Certificate name mismatch | Client connects by address instead of by service name |
| Works from one network, not another | Zone not linked to the second network |
| Works until the endpoint is recreated | Stale DNS record or cached answer |
| Authorization failure after connection | Missing role or wrong key, not a network fault |
Machines remember DNS answers for a while. After changing DNS, flush the cache on the client or wait for the lifetime of the old answer before judging the fix.
18Understanding Cost
Private Link adds charges to the bill. Knowing the parts lets you predict and manage them. Prices change, so use the official calculator for real numbers.
Endpoint hours
Each private endpoint is billed per hour while it exists, whether or not it carries traffic.
Data processed
A per-gigabyte charge for data sent through the endpoint, in and out, with tiers that may reduce the rate at high volumes.
Private DNS
Zones and queries are charged at small rates, which can add up with many zones and heavy lookup traffic.
Network transfer
Peering and cross-region transfer between networks may carry separate charges.
Firewalls and resolvers
Supporting services, such as a central firewall or a DNS resolver, have their own bills.
People
Design, testing and ongoing management take real time.
A worked monthly example
The numbers below are invented to show the method. Suppose an endpoint costs 0.01 dollars per hour. A month of 730 hours is 7.30 dollars per endpoint. With 150 endpoints, that is 150 times 7.30, or 1,095 dollars. If total traffic through all endpoints is 10 terabytes, which is 10,000 gigabytes, at an illustrative 0.01 dollars per gigabyte, data charges are 100 dollars. DNS zones and queries might add 20 dollars. The total is about 1,215 dollars per month. If you consolidate to 60 shared endpoints in a hub, the hourly part falls to 60 times 7.30, or 438 dollars, though you might add a firewall’s cost and peering transfer.
Ways to reduce cost
Share endpoints where isolation does not demand separate ones. Avoid creating endpoints for unused sub-resources. Delete endpoints for retired services. Keep test endpoints out of long-running test environments. Review traffic: very chatty workloads send a lot of data through endpoints, and moving components closer together may cut both cost and delay.
Compare against the risk
A private endpoint costs a few dollars a month. Compared with the cost of a data breach, the price is small. The aim is not to avoid private endpoints, but to avoid waste, such as forgotten test endpoints and duplicated copies.
Tags for owner, environment and application make it easy to find unused endpoints and charge the right team.
19Choosing Between Private Link and Other Options
Private Link is powerful, but it is not always the right tool. Choose by what you need to achieve.
flowchart TD
S["Need private access to a platform service"] --> A{"Must close the public door?"}
A -->|"Yes"| PL["Use Private Link"]
A -->|"No"| B{"Need access from on-premises?"}
B -->|"Yes"| PL
B -->|"No"| C{"Only need a better path from Azure subnets?"}
C -->|"Yes"| SE["Service endpoint is simple and free"]
C -->|"No"| D{"Service can be deployed into your network?"}
D -->|"Yes"| INJ["Consider network injection"]
D -->|"No"| PL
| Need | Best fit | Reason |
|---|---|---|
| Strict rules: no public access allowed | Private Link | Lets you disable the public endpoint |
| Access from offices | Private Link | Reachable over VPN and private circuits |
| Prevent data being sent to other tenants’ accounts | Private Link | Scoped to one resource |
| Quick, free improvement, Azure-only clients | Service endpoint | Easy to turn on, no per-hour fee |
| Offer your service privately to customers | Private Link service | No public address needed |
| Public website open to everyone | None of these for inbound | Use a web gateway and firewall in front |
| Dedicated managed instance in your network | Network injection | The service is designed for it |
Private Link and a firewall
They work well together. Private Link brings the service inside your network, and a firewall decides which servers may use which endpoint. Without a firewall or security rules, any machine in the network that can route to the endpoint address can use it.
Private Link and web gateways
A web gateway can use a private endpoint to reach a back-end web app, so the web app has no public door and the gateway is the only entrance. This pattern is common for public sites whose back ends must stay private.
Choosing between these options is like choosing how to give staff access to an archive. A guarded tunnel for all staff and offsite offices is Private Link. A fast lane on the public road with a guest list is a service endpoint. Moving the archive into your own building is network injection.
20Advantages, Disadvantages and Trade-offs
An honest look at what the service does well and where it brings complications.
Advantages
- Removes the public path to platform services
- Scopes access to one specific resource, reducing data theft paths
- Works from on-premises as well as from Azure
- Applications keep using the same service names
- Lets you publish your own service without public addresses
- Hides address range overlaps between networks
- Supported by a wide and growing list of services
Disadvantages
- Adds hourly and data charges for each endpoint
- DNS design becomes more complex and more critical
- One endpoint per service part leads to many endpoints
- Developer access from outside the network needs extra arrangements
- Troubleshooting involves several layers: DNS, routes, rules and approval
- Limits on endpoint counts and address space need planning
- Does not authenticate users or inspect content by itself
Key trade-offs
| Choice | Benefit | Cost |
|---|---|---|
| Public access disabled | Smallest exposure | Every client must have a private path |
| Central shared endpoints | Fewer endpoints, simpler DNS | Shared fate, firewall load |
| Endpoints per application | Isolation and clear ownership | More cost and records |
| Network policies on endpoint subnet | Filtering and inspection of endpoint traffic | More rules, risk of asymmetric paths |
| Manual approval | Owner controls who connects | Delays and an approval queue |
| Auto-created DNS records | Fewer human errors | Must manage zones centrally |
Finding the balance
Choose private access first for sensitive data: databases, vaults, storage holding personal or financial records. For low-risk public content, the extra complexity may not pay off. A risk-based list of which services must be private keeps the design focused.
21Design Patterns and Anti-Patterns
Successful teams repeat a few designs. Struggling teams repeat a few mistakes. Naming both makes them easy to copy or avoid.
Patterns that work
Central DNS, local endpoints
Keep private DNS zones in one managed place and link every network to them, while teams create endpoints near their applications.
Zone group everywhere
Always create endpoints with a zone group so DNS records follow the endpoint automatically.
Deny public by policy
Enforce with policy that new services cannot have public access, which makes private design the default.
Hub resolver for hybrid
One managed resolver in the hub answers questions forwarded from on-premises DNS.
Firewall allow-list of endpoints
Outbound firewall rules allow only the private addresses of approved endpoints.
Endpoint register
A maintained table of endpoints, owners and zones, ideally generated from code.
Anti-patterns to avoid
Endpoint without DNS
Creating an endpoint and forgetting the zone link, so clients keep using the public path and nobody notices until public is closed.
Many copies of the same zone
Each team makes its own zone for the same service and records conflict across networks.
Public door left open “just in case”
The endpoint exists but public access is on, so the security benefit is lost.
Hand-edited DNS records
Manual records go stale when endpoints change.
Forwarding the wrong name
On-premises forwarders point the whole public service area to Azure, breaking non-private resources.
Ignoring developers
Closing public access with no plan for how engineers will reach the service, leading to risky workarounds.
22Best Practices and Common Mistakes
A checklist to apply before any private design goes live.
Best practices
Decide the DNS design first
Choose where zones live, which networks link to them and how on-premises forwards.
Use standard zone names
Copy the official names for each service so the name chain matches.
Create endpoints through code
Define endpoints, zone groups and links in templates under version control.
List every client before closing public access
Include build servers, developers, partners and monitoring tools.
Test from each network and from on-premises
Look up the name, connect to the service and confirm the private address in logs.
Protect shared DNS and endpoints with locks
Prevent accidental deletion with locks and controlled change.
Monitor and alert
Watch connection states, DNS changes, new endpoints and unusual traffic.
Review regularly
Every quarter, remove unused endpoints, check ownership and re-test failover.
Common mistakes
| Mistake | Result | Prevention |
|---|---|---|
| Zone not linked to a network | Public address returned, then failures when public is off | Link all networks through code and test |
| Custom DNS server without forwarding to Azure | Private names never resolve | Forward service zones to the Azure resolver |
| One endpoint for all parts of storage | Other parts fail | One endpoint and zone per part used |
| Endpoint in too small a subnet | Cannot add more | Plan address space with growth |
| Public access disabled too early | Pipelines and laptops break | Inventory clients, stage the change |
| Forgetting outbound integration for web apps | Private inbound works, outbound calls fail | Use virtual network integration for outbound |
| No approval process | Pending connections wait forever | Define owners and response time |
| Stale records after rebuilding | Traffic goes to a dead address | Use zone groups and remove old records |
23Failure Scenarios and Recovery
Walk through the failures in advance, and recovery becomes routine.
Scenario one: everything fails after closing public access
A team disables public access on a storage account and several jobs stop. Cause: some clients, like a build server in another network, still resolve to the public address. Recovery: temporarily re-enable public access with a narrow network rule, link the zone to that network, then close again. Prevention: a client inventory and a staged rollout starting with logging only.
Scenario two: the zone link was deleted
Someone cleans up unused links and removes one that was in use. Applications in that network begin to see public addresses and fail. Recovery: restore the link. Prevention: resource locks, policy and alerts on changes to DNS links.
Scenario three: on-premises users get the public address
Office machines cannot reach the private service. Cause: a missing conditional forwarder on one office DNS server. Recovery: add the forwarder and flush caches. Prevention: configure all offices from one template and test from each site.
Scenario four: a pending connection stays pending
A new team’s endpoint to another team’s database never works. Cause: the connection waits for approval and no one noticed. Recovery: the owner reviews and approves. Prevention: an approval process with notifications and a response time target.
Scenario five: failover moves the service but not the clients
A database fails over to a secondary region, but applications keep connecting to the primary’s private address. Cause: the private record still points to the old endpoint. Recovery: update the record or use a failover-aware name arrangement. Prevention: design and rehearse DNS changes as part of failover tests.
Scenario six: a rogue endpoint
Audit logs show a new endpoint to an unknown storage account in an unusual subscription. Action: investigate who created it and why, remove it if unauthorized, review the account used, and check firewall logs for data sent through it. Prevention: restrict who may create endpoints and alert on every creation.
flowchart TD
A["Client cannot reach service"] --> B{"Lookup returns private address?"}
B -->|"No"| C["Fix zone link, custom DNS forwarding or on-premises forwarder"]
B -->|"Yes"| D{"Connection approved?"}
D -->|"No"| E["Ask service owner to approve"]
D -->|"Yes"| F{"Port reachable?"}
F -->|"No"| G["Check routes, security groups and firewall"]
F -->|"Yes"| H["Check identity, keys and roles"]
C --> I["Retest and confirm in logs"]
E --> I
G --> I
H --> I
Know in advance how you would briefly reopen a narrow public path in an emergency, who may approve it and how it is closed again. A written plan prevents risky improvisation.
24Migrating an Existing Application to Private Endpoints
Most real projects add Private Link to a system that already runs. A careful sequence avoids outages.
Inventory
List every service in use and every client that touches it, including scheduled jobs, build pipelines, partner tools and staff laptops.
Check support
Confirm each service, region and pricing tier supports private endpoints and note sub-resources.
Prepare DNS
Create central zones, link networks, set up forwarding for on-premises and test with a pilot service.
Create endpoints
Build endpoints with zone groups, approve them, and keep public access on for now.
Verify private use
Check logs to confirm clients now use the private path. Find stragglers that still use public addresses.
Fix stragglers
Link missing networks, fix custom DNS, adjust developer access arrangements.
Close the public door
Disable public access in a quiet period, watch error rates and keep a rollback plan.
Lock in the result
Apply policy to prevent public access in the future, add alerts and document the design.
Use logs to find clients
Before closing, service logs show the source of each request. Requests that come from public addresses reveal clients that are not yet private. Fix these first. This evidence-based approach is far safer than guessing.
Pilot first
Start with one low-risk service and one application. The pilot reveals the DNS and approval problems unique to your organization, so later waves go faster.
Communicate
Tell developers, support teams and partners about the date and about the new way to connect. Provide a short guide: how to reach the service from a laptop, whom to ask for access, and where to find the status page.
Moving traffic from the public street to a private tunnel is done by first opening the tunnel, watching who uses it, helping those still on the street, and only then locking the street door.
25Real-World Usage Examples
These are typical, invented scenarios that show the ideas at work. They are not reports about any named company.
A payments company protects transaction data
The company stores transaction files in storage accounts and records in a database. Rules require that no customer data path crosses the public internet. Private endpoints serve storage and database, public access is disabled by policy, and a firewall allows only the application subnets to reach the endpoint addresses. Audit evidence comes from policy compliance reports and network logs.
A hospital group connects clinics and cloud records
Clinics reach a cloud records system over private circuits. On-premises DNS forwards the service names to a resolver in the hub, which returns private addresses. Staff use the same web address as before, and the records system has no public door.
A vendor offers a private connection to customers
A data-processing vendor puts its service behind a standard load balancer and publishes it with Private Link service. Enterprise customers create endpoints in their own networks and the vendor approves them. Customers with overlapping address ranges connect without any range changes, and nothing is exposed to the internet.
A department secures a shared key vault
Several teams use one key vault for secrets. Only private endpoints reach it, and a central team approves connections. Policy denies any new vault with public access, and alerts fire on every new endpoint, so unusual connections are noticed within minutes.
A web app with a private back end
A public shop site goes through a web gateway. The back-end web app and its database have no public doors; the gateway reaches the app through a private endpoint, and the app reaches the database through another. If an attacker finds the back-end name, the connection simply has nowhere to go.
What they share
Each example treats DNS as a first-class part of the design, closes the public door only after checking every client, uses policy to keep the result in place, and watches the logs. The corridor works because it is planned and checked.
26Practical Notes for Storage, Databases and Key Vaults
Three services account for most private endpoint projects. Each has small habits worth knowing in advance.
Storage accounts
Storage is the service with the most parts, so it creates the most endpoints. List which parts your applications really use. A data lake needs the blob part and the data lake part. A file share needs the file part. Static websites use the web part. Create only the endpoints you need, and give each its own zone link. Also remember that tools which copy data between accounts, such as migration utilities, run from a machine that must itself resolve and reach the private addresses of both accounts.
Databases
A database server usually needs one endpoint. Clients connect using the server name and their normal sign-in. One surprise is the connection mode: some database services redirect clients to a different address after the first handshake, and in a private design that redirect must also stay on the private path. Read the documentation for the connection policy that suits private endpoints, and test with the real application driver, not only with a test tool.
Key vaults
A vault holds the keys to everything else, so it is the first candidate for private access. Many services read secrets at start-up, and if a vault is private but the application subnet cannot resolve its name, the application fails to start. This can look like a deployment failure when it is really DNS. When you protect a vault, make sure the services that need it at start-up, such as build pipelines and scaling systems, are covered by the private path.
Common companions
Messaging
Queues and event streams are often used by many applications. One shared endpoint in a hub can serve them all.
Container registries
Build agents and clusters pull images constantly. Check that both control and data records resolve privately.
Monitoring
Agents send logs from every server. Missing private zones here cause silent gaps in monitoring.
A simple order of work
Start with monitoring and the vault, since they support everything else. Then do storage, then databases, then the rest. At each step, verify with a lookup and a real connection, and keep public access on until the logs show no public clients.
A connection test from a command-line utility proves the network path. A test from the real application proves drivers, certificates and settings. Do both before declaring a service ready.
27Frequently Asked Questions
Short answers to common questions. Where a detail may have changed, confirm in the current Microsoft documentation.
28Summary and Key Takeaways
Private Link brings cloud services into your network by giving them private addresses, so that traffic stays on the Microsoft backbone and the public door can be closed.
Key takeaways
- A private endpoint is a network interface in your subnet connected to one specific service resource and sub-resource; a Private Link service lets you publish your own application privately.
- Every design has two parts: the endpoint and the DNS. Link private DNS zones to every network, and forward on-premises names to a resolver in Azure.
- Unlike service endpoints, Private Link allows you to disable public access and limits data exfiltration to the one resource you choose.
- Plan for each service part, subnet size, endpoint limits and the connection approval process before building.
- Enforce the design with Azure Policy, locks, role-based access and alerts on new endpoints and DNS changes.
- Migrate in stages: inventory clients, create endpoints, verify logs, fix stragglers, then close the public door.
- Most faults are DNS faults. Check what the failing machine resolves first, and verify current services, limits and prices in the official documentation.