Azure Private Endpoint (Private Link)
An Azure Private Endpoint giving a target PaaS resource a private IP inside your VNet so traffic stays on the Microsoft backbone - wire to existing subnet/target or run fully self-contained.
Verification
Live-testedReally deployed to a cloud sandbox, verified against its outputs and assertions, then destroyed - with the teardown confirmed.
Conformance
- Static validation (fmt · validate · tflint)
- Security scan clean (Checkov)
- Plan test superseded by live test
Provenance
- SHA-256 checksum
- Cosign signature
Functional
- Live-tested - applied, verified, destroyed
Last verified 2026-06-30 · how we verify
Verify this download
cosign · sha-256Don't take our word for it. Every release is signed with cosign - check the bytes against our pinned public key before you trust them.
# 1. Our pinned public key - fetch once, trust out-of-band
curl -O https://www.iac-bazaar.com/cosign.pub
# 2. This module's Sigstore bundle
curl -o azure-private-endpoint-1.0.0.sigstore.json \
https://www.iac-bazaar.com/api/artifacts/azure-private-endpoint/signature
# 3. Verify the tarball you downloaded
cosign verify-blob \
--key cosign.pub \
--bundle azure-private-endpoint-1.0.0.sigstore.json \
azure-private-endpoint-1.0.0.tar.gz
# → Verified OK
# 4. (optional) confirm the checksum too
echo "626c330f2d4efab7f49314c5e8373b53a7f3a12d34b7b7711377418929c34ae1 azure-private-endpoint-1.0.0.tar.gz" | sha256sum -cUse it from the registry
terraform · opentofumodule "private_endpoint" {
source = "www.iac-bazaar.com/iac-bazaar/azure-private-endpoint/azure"
version = "1.0.0"
}Needs a registry token from /account/tokens. The module itself is free; the account is what identifies you. Full setup: registry docs.
Cite it in your README
badge · attributionPaste this beside the module in the repository that uses it. The badge is rendered from this artifact's verification record, so it reads live-tested because the record says so, and the link lands on this page.
[](https://www.iac-bazaar.com/catalog/azure-private-endpoint?utm_source=syndication&utm_medium=readme&utm_campaign=artifact)
Terraform module 1.0.0, live-tested on IaC Bazaar: [Azure Private Endpoint (Private Link)](https://www.iac-bazaar.com/catalog/azure-private-endpoint?utm_source=syndication&utm_medium=readme&utm_campaign=artifact)
```hcl
module "private_endpoint" {
source = "www.iac-bazaar.com/iac-bazaar/azure-private-endpoint/azure"
version = "1.0.0"
}
```Preview:
Inputs & outputs
Create a free account to read this module's contract
The declared contract - every input name, type, default and description, plus every output - is shown to signed-in accounts, not to anonymous visitors.
A free account sees the contract of every module in the catalogue. There is no subscription and nothing to buy - the modules are free to download, and they run under Vizier.
Documentation
azure-private-endpoint
An Azure Private Endpoint (Private Link) to a target PaaS resource — a Storage Account, Key Vault, Azure SQL, App Service, and so on. The endpoint gives the service a private IP inside your VNet so traffic stays on the Microsoft backbone and never traverses the public internet.
It works two ways:
- Production wiring — point it at an existing subnet (
subnet_id) and an existing target (target_resource_id). - Self-contained — set
create_network = trueto build a dedicated VNet + subnet, and/orcreate_demo_target = trueto stand up a locked-down demo Storage Account target. With both on, onetofu applyyields a complete Private Link example (VNet + subnet + storage + endpoint), andtofu destroyremoves it all.
Works with Terraform and OpenTofu (>= 1.6), azurerm provider
>= 4.0, < 5.0, random >= 3.0, < 4.0.
What it provisions
azurerm_private_endpoint— the endpoint + its auto-created NIC, with aprivate_service_connectionto the target's chosensubresource_names.- (optional,
create_network)azurerm_virtual_network+azurerm_subnet(subnet hasprivate_endpoint_network_policies = "Disabled"). - (optional,
create_demo_target)azurerm_storage_account— public access off, shared keys off, TLS 1.2+, infrastructure (double) encryption on, blob/container soft delete (7 days) on — named uniquely viarandom_string. - (optional,
create_private_dns_zone)azurerm_private_dns_zoneand, when a network is also created, anazurerm_private_dns_zone_virtual_network_link, with the endpoint's records registered automatically.
Security notes
- The connection auto-approves for first-party (same-tenant) targets. Set
is_manual_connection = true(+request_message) only for cross-tenant / cross-subscription targets you do not own; the owner must approve. - The built-in demo target is secure by default: public network access off (reachable only through the endpoint), shared keys off (Entra-ID auth), TLS 1.2+, infrastructure (double) encryption on, and blob/container soft delete (7 days) on.
- Module-created subnets disable private-endpoint network policies so the
endpoint attaches; if you supply your own
subnet_id, ensure the same on it. - Name resolution: attach a private DNS zone (
private_dns_zone_idsorcreate_private_dns_zone) so clients resolve the service FQDN to the private IP; otherwise consumecustom_dns_configsfrom the outputs.
Requirements
| Requirement | Version |
|---|---|
| Terraform / OpenTofu | >= 1.6 |
hashicorp/azurerm | >= 4.0, < 5.0 |
hashicorp/random | >= 3.0, < 4.0 |
Authenticate via az login (or a service principal) and set
ARM_SUBSCRIPTION_ID. See docs/CONNECTING-PROVIDERS.md#azure.
License
Commercial — IaC Bazaar EULA. © IaC Bazaar. Original work (not derived from a third-party module).
Usage code & full reference need an account
The complete copy-paste usage, the full input/output reference, and operational notes are free with an account - shown here and bundled in the download. Sign in and this section fills in.
- Usage — connect to an existing target
- Usage — self-contained (own VNet + demo Storage target)
- Common subresource (group ID) names
- Inputs
- Outputs
Related modules
azure-vpn-gateway
A connection with no ipsec_policy negotiates from a built-in list that still offers 1024-bit Diffie-Hellman and SHA-1, so a peer that proposes them gets them and the tunnel comes up looking healthy. Always writes an explicit policy and refuses the weak groups. A gateway with no connection bills by the hour for nothing, so the sites come with the gateway; BGP is on, Basic is refused.
azure-virtual-wan
A hub is billed from the moment it exists and routes nothing until something connects; disable_vpn_encryption sends branch traffic in clear; and a VNet connection without internet security sends 0.0.0.0/0 out its own default route, bypassing the hub firewall. Connections come with it, branch encryption stays on, every connection routes the internet through the hub, and the prefix must be a /23.
azure-expressroute
A provider circuit is a clear-text path across the provider's network - MACsec is for Direct ports only, and IPsec over the private peering is yours to build - so the module requires that to be stated and exports encrypted = false. The SKU tier decides where the circuit reaches; a circuit with no peering carries nothing once provisioned. Private peering with its /30 pairs and VLAN is created here.
azure-vnet
Production VNet with subnets, NSGs, route tables, peering and optional NAT Gateway - the network backbone every Azure deployment starts with.
azure-vnet-peering
Both halves of a hub-and-spoke VNet peering in one apply, since one half alone sits in Initiated and carries nothing. hub_has_gateway writes allow_gateway_transit on the hub and use_remote_gateways on the spoke, in the order Azure requires; forwarded traffic is on for both halves because a hub firewall forwards by definition. One subscription; both directions bill per gigabyte.
azure-nat-gateway
Default outbound access is retired, so a subnet with no NAT gateway has no internet at all and fails as a timeout rather than an error. Each public IP gives 64,512 SNAT ports held for the whole idle timeout; exceed that and connections fail intermittently in a way that looks like the remote service being flaky.