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