Globally unique resources that provide access to data management services and serve as the parent namespace for the services.
A 403 Forbidden in this context indicates that the storage or service endpoint the recurring integration uses is rejecting the request due to authorization or network restrictions. Since it works in all other environments and only fails in production, focus on production-specific configuration differences.
Key areas to investigate:
- SAS token validity and scope
- If the recurring integration uses Azure Storage with SAS tokens, verify in production that:
- The SAS token is not expired.
- The SAS token has the required permissions for the operation (read/write/list, etc.).
- The SAS token is not constrained by an invalid
sip(IP restriction) or a start time that is in the future.
- A 403 with Azure Storage commonly occurs when the SAS is invalid, expired, or too restricted.
- Compare the SAS configuration used in production with one from a working environment.
- If the recurring integration uses Azure Storage with SAS tokens, verify in production that:
- Storage account firewall and networking
- Check the storage account used by the recurring integration in production:
- If “Selected networks” is enabled, ensure the outbound IP(s) of the D365 F&O production environment are allowed.
- If access is restricted by IP or virtual network, confirm that production’s IP or VNet is included.
- If a proxy or firewall is in the path, confirm that the proxy IP (not just the client IP) is allowed on the storage firewall.
- Check the storage account used by the recurring integration in production:
- Authorization mismatch / RBAC and permissions
- If the integration uses Azure AD / OAuth instead of SAS:
- Confirm the service principal or managed identity used by the production environment has the correct data-plane roles on the storage account (for example, Storage Blob Data Contributor/Owner or the appropriate Files role if using Azure Files).
- Ensure the identity has the same roles in production as in the other environments.
- A 403 with an
AuthorizationPermissionMismatcherror code indicates the identity does not have the required data permissions.
- If the integration uses Azure AD / OAuth instead of SAS:
- Environment-specific endpoint or routing issues
- Verify that the production environment is pointing to the correct storage account/container and not to a different one with stricter security.
- Check any custom routes, VPNs, or Azure Firewall rules that might be forcing storage traffic through a path where it is blocked or misrouted.
- Logging and error details
- Enable diagnostic logging on the storage account and review the 403 entries to see the exact error code (for example,
AuthorizationFailure,AuthorizationPermissionMismatch, or SAS-related messages). This will indicate whether the issue is SAS, RBAC, firewall, or something else.
- Enable diagnostic logging on the storage account and review the 403 entries to see the exact error code (for example,
In practice, resolving this typically involves:
- Regenerating a SAS token for production with correct permissions and without overly strict IP or start-time constraints, or
- Adjusting storage firewall rules to include the production environment’s outbound IP/proxy IP, and/or
- Ensuring the production identity has the same storage data-plane roles as in non-production.
References:
- Troubleshoot client application errors in Azure storage accounts
- Azure Blob Storage integration with Adobe Experience Manager throws 403 - Microsoft Q&A
- Azure File Share Access Issue: Unauthorized Request Error with SAS URL - Microsoft Q&A
- users cannot upload documents to blob storage file share - Microsoft Q&A