An Azure service that stores unstructured data in the cloud as blobs.
For Azure Blob Storage behind a private endpoint, curl should target the storage account blob FQDN, not the VM private IP, not the private endpoint IP directly, and not 127.0.0.1.
Use this pattern from the Linux VM:
curl https://<STORAGE ACCOUNT>.blob.core.windows.net/<CONTAINER NAME>/<FILE NAME>
If the blob is accessed with Microsoft Entra authentication, first get an access token from the VM’s managed identity, then pass it as a bearer token:
curl 'http://169.254.169.254/metadata/identity/oauth2/token?api-version=2018-02-01&resource=https%3A%2F%2Fstorage.azure.com%2F' -H Metadata:true
Then call the blob:
curl https://<STORAGE ACCOUNT>.blob.core.windows.net/<CONTAINER NAME>/<FILE NAME> -H "x-ms-version: 2017-11-09" -H "Authorization: Bearer <ACCESS TOKEN>"
For the private endpoint path to work, DNS must resolve the storage account name to the private endpoint IP. The most important check is DNS resolution.
From the VM, verify the name resolves privately. A correct result includes *.privatelink.* and a private IP such as 10.x.x.x or 172.16.x.x. If the name resolves to a public IP, the VM is not using the private DNS path.
Typical interpretation:
-
*.privatelink.*+ private IP: DNS is correct. - Public IP and no
*.privatelink.*: private DNS zone is missing or not configured. -
NXDOMAINor server can’t find the name: DNS zone or forwarder is misconfigured.
If DNS is correct but curl still shows no route to host or timeouts, the next likely causes are:
- NSG or firewall rules blocking traffic between the VM subnet and the private endpoint subnet.
- Missing or disconnected VNet peering if the VM and private endpoint are in different VNets.
- Routing issues causing traffic not to reach the private endpoint.
If the VM is outside the VNet that is linked to the private DNS zone, DNS requests must be forwarded to Azure-side DNS so the storage account FQDN resolves to the private endpoint IP.
References:
- Tutorial: Use a Linux VM/VMSS to access Azure resources (identity-linux-mi-vm-access-storage)
- Troubleshoot "403" access denied errors for Azure Storage or Azure Key Vault through a private endpoint
- Troubleshoot private endpoint connectivity failures
- Cannot connect to the Private Endpoint of an Azure Storage Account from AWS - Microsoft Q&A