Private Network access for Blob Storage URIs from Azure OpenAI Service

Sean K 20 Reputation points
2025-04-05T15:20:27.96+00:00

I'm working on a project that requires all resources to be inaccessible via public endpoints. To simplify, the service consists of three core resources: A web app (App Service), Azure OpenAI, and Azure Storage Account. The web app is the only resource that's publicly accessible, and is connected to a VNet through a delegated subnet. The blob store and OpenAI service are not accessible publicly and are accessible from the web app via the web app subnet.

I'm having trouble with the following scenario: I'd like users to be able to upload images through the web app, have them stored in the blob store, and then pass the images to OpenAI service as an SAS URI so OpenAI models can process the image and respond to user prompts. I have image upload and viewing on the web app working, but I can't seem to get Azure OpenAI to be able to access images served from my Azure blob store.

I've tried a few variations of the following configurations:

  • Create a service subnet that both my storage account and OpenAI service attach to
  • Create private endpoints for OpenAI Service and Storage Account (blob sub-service) service to access a new "service subnet"

Could anyone point me in the right direction? I was pretty surprised that having a dedicated subnet with access to both services didn't end up working, but maybe I have some fundamental misconception of how some of this is working... Thanks in advance!

Azure OpenAI Service
Azure OpenAI Service
An Azure service that provides access to OpenAI’s GPT-3 models with enterprise capabilities.
3,917 questions
0 comments No comments
{count} votes

Accepted answer
  1. Marcin Policht 44,245 Reputation points MVP
    2025-04-05T17:31:54.35+00:00

    As far as I can tell, the primary reason for the behavior you're seeing is that Private Endpoints and SAS URIs don’t play well together — unless public network access is enabled. When you generate an SAS URI, you're giving a public-facing URL (e.g., https://yourstorage.blob.core.windows.net/...) with an access token. Azure OpenAI tries to fetch the image using this URI.

    If your storage account disables public access, then even valid SAS URIs won't work from Azure OpenAI, unless Azure OpenAI is somehow accessing storage internally (not via the public blob endpoint).

    Unfortunately, Azure OpenAI does not currently access blob URIs over private endpoints. It fetches them via the public internet, even when operating inside a VNet.

    As far as resolving this, you might consider re-enable public access on Storage but scope it to trusted services and shortening the duration of validity of your SAS keys...

    Alternatively, consider the approach described at https://learn.microsoft.com/en-us/answers/questions/1183111/azure-blob-sas-url-for-blob-private-endpoint


    If the above response helps answer your question, remember to "Accept Answer" so that others in the community facing similar issues can easily find the solution. Your contribution is highly appreciated.

    hth

    Marcin


0 additional answers

Sort by: Most helpful

Your answer

Answers can be marked as Accepted Answers by the question author, which helps users to know the answer solved the author's problem.