Connect your own storage for Speech and Language services (Preview)
This article refers to the Microsoft Foundry (new) portal.
Items marked (preview) in this article are currently in public preview. This preview is provided without a service-level agreement, and we don’t recommend it for production workloads. Certain features might not be supported or might have constrained capabilities. For more information, see Supplemental Terms of Use for Microsoft Azure Previews.
userOwnedStorage binding at creation time. This binding routes Speech and Language data to your Azure Storage account while maintaining backward compatibility with earlier standalone resource patterns.
Prerequisites
An Azure account with an active subscription. If you don’t have one, create a free Azure account, which includes a free trial subscription.- An Azure Storage account (Blob) in a region supported by your Foundry resource.
- Resource group permissions:
OwnerorContributorrole on the resource group containing the Foundry resource. - Storage account permissions:
Storage Blob Data Contributorrole on the storage account (assigned to the Foundry resource’s managed identity). - (Optional) Customer-managed keys (CMK) configured on the storage account if you require CMK encryption.
Set the
userOwnedStorage binding when you create the resource. You can’t change this binding later. Review the restrictions before proceeding.Understand restrictions
Review these constraints before configuringuserOwnedStorage:
| Restriction | Details |
|---|---|
| Single account | You can set only one storage account for Speech & Language. |
| Creation time only | Must be set during resource creation; can’t add or change afterward. |
| Non-removable | You can’t remove or swap the storage account post-creation. |
| Deletion impact | If you delete or move the storage account (resource ID changes), Speech & Language stop functioning. Attempt storage account recovery first; otherwise you must recreate the Foundry resource. |
| Shared across both capabilities | Speech and Language share the same account (distinct containers). For strict isolation, create separate Foundry resources and storage accounts. |
| Data access scope | Any user with access to the Foundry resource can access Speech & Language outputs; project-level isolation doesn’t apply for this binding. |
Configure authentication
Speech and Language support only Azure role-based access control (RBAC) through the resource’s managed identity.- Ensure the Foundry resource has a system-assigned managed identity.
- On the storage account, assign the
Storage Blob Data Contributorrole to the Foundry resource’s managed identity. - Don’t assign the role to individual project identities for this scenario.
Example (Azure CLI) – role assignment
principalId and roleDefinitionId.
Reference: az role assignment create | az resource show
Example (PowerShell) – role assignment
RoleAssignment object with the DisplayName, ObjectId, and Scope properties.
Reference: New-AzRoleAssignment | Get-AzResource
Create resource with storage account
Set theuserOwnedStorage field during resource creation.
Bicep template snippet
ARM template snippet
Terraform snippet
Refer to the Terraform cognitive_account documentation.Sample repository
See the infrastructure examples (including Speech/Language storage) in the Foundry samples repository.Speech integration details
Speech scenarios (Speech-to-Text batch or real-time, Custom Speech, Text-to-Speech, Custom Voice) conform to the guidance in Bring your own storage (BYOS) Speech resource. When you setuserOwnedStorage, those outputs route to the bound storage account containers.
Customer-managed keys (CMK)
If you configure customer-managed keys encryption on the storage account, Speech data written there uses those keys. If you don’t setuserOwnedStorage, Speech falls back to Microsoft-managed storage and doesn’t inherit CMK settings from the Foundry resource.
Language integration details
TheuserOwnedStorage binding mirrors historical Language resource behavior with one key difference: you can’t update or replace the storage account after deletion or move. In standalone Language resources, an update is possible. In the unified Foundry resource, it isn’t. Plan lifecycle mitigation accordingly.
Shared storage configuration
Speech and Language share the same storage account. Different container naming conventions keep data logically separated. Because access is at the resource scope, any resource-level user can reach both sets of outputs. For stricter separation, deploy distinct resources.Verify the configuration
After creating the resource withuserOwnedStorage, confirm the binding is active:
- In the Azure portal, go to your Foundry resource.
- Select Resource Management > Properties and verify the User Owned Storage field displays your storage account resource ID.
- Run a test Speech or Language operation (for example, a batch transcription job) and confirm the output appears in a container within your storage account.
Troubleshooting
| Issue | Mitigation |
|---|---|
| Accidental deletion of storage account | Attempt recovering the account. If unsuccessful, recreate the Foundry resource. |
| Role assignment missing | Re-run RBAC role assignment for the resource managed identity on the storage account. |
| Moved storage to new subscription | Recreate resource; moving changes the resource ID and breaks binding. |