你当前正在访问 Microsoft Azure Global Edition 技术文档网站。 如果需要访问由世纪互联运营的 Microsoft Azure 中国技术文档网站,请访问 https://docs.azure.cn。
注释
本文档适用于 Microsoft Foundry(新)门户。
重要
本文中标记了“(预览版)”的项目目前为公共预览版。 此预览版未提供服务级别协议,不建议将其用于生产工作负载。 某些功能可能不受支持或者受限。 有关详细信息,请参阅 Microsoft Azure 预览版补充使用条款。
Microsoft Foundry 将代理、Azure OpenAI、语音和语言功能统一到单个资源类型下。 对于语音和语言,在创建时通过资源级绑定集启用自带存储 (BYOS) (userOwnedStorage)。 此绑定提供与早期独立语音和语言资源模式的向后兼容性,同时集中管理。
当你特别需要语音和语言数据才能登录到你拥有的 Azure 存储帐户时,请使用本文。 有关更广泛的方法(连接、功能主机以及何时将其用于其他功能),请参阅 “连接到自己的存储”。
先决条件
开始之前:
拥有有效订阅的 Azure 帐户。 如果没有帐户,请创建一个 免费的 Azure 帐户,其中包括免费试用订阅。
- Foundry 资源所支持的区域中的 Azure 存储帐户 (Blob)。
- 权限:Foundry 资源(或资源组)和存储帐户的所有者或参与者。
- 决定在存储帐户上使用客户管理的密钥(CMK)加密(可选)。
- 对以下限制的理解。
小窍门
查看 Azure 存储文档 ,了解加密、网络和高级安全选项。
了解限制
在配置 userOwnedStorage之前,请考虑以下约束:
| 限制 | 详细信息 |
|---|---|
| 单帐户 | 只能为语音和语言设置一个存储帐户。 |
| 仅限创建时 | 必须在创建资源期间设置;之后无法添加或更改。 |
| 不可移动 | 创建后无法删除或交换存储帐户。 |
| 删除影响 | 如果删除或移动存储帐户(资源 ID 更改),语音和语言将停止运行。 首先尝试 存储帐户恢复 ;否则必须重新创建 Foundry 资源。 |
| 在这两项功能之间共享 | 语音和语言共享同一帐户(但有不同的容器)。 为严格隔离,请创建单独的 Foundry 资源和存储帐户。 |
| 数据访问范围 | 任何有权访问 Foundry 资源的用户都可以访问语音和语言输出;项目级隔离不适用于此绑定。 |
配置身份验证
语音和语言仅通过资源的托管标识支持 Azure 基于角色的访问控制 (RBAC)。
- 确保 Foundry 资源具有系统分配的托管标识。
- 在存储帐户上,将
Storage Blob Data Contributor角色分配给 Foundry 资源的托管标识。 - 对于此场景,请勿将该角色分配给单个项目标识。
不支持基于 API 密钥的身份验证。
示例 (Azure CLI) - 角色分配
STORAGE_ID=/subscriptions/<sub>/resourceGroups/<rg>/providers/Microsoft.Storage/storageAccounts/<storageName>
FOUNDRY_ID=/subscriptions/<sub>/resourceGroups/<rg>/providers/Microsoft.CognitiveServices/accounts/<foundryName>
# Assign Storage Blob Data Contributor
az role assignment create \
--assignee-object-id $(az resource show --ids $FOUNDRY_ID --query identity.principalId -o tsv) \
--assignee-principal-type ServicePrincipal \
--role "Storage Blob Data Contributor" \
--scope $STORAGE_ID
示例 (PowerShell) - 角色分配
$storage = "/subscriptions/<sub>/resourceGroups/<rg>/providers/Microsoft.Storage/storageAccounts/<storageName>"
$foundry = "/subscriptions/<sub>/resourceGroups/<rg>/providers/Microsoft.CognitiveServices/accounts/<foundryName>"
$principalId = (Get-AzResource -ResourceId $foundry).Identity.PrincipalId
New-AzRoleAssignment -ObjectId $principalId -RoleDefinitionName "Storage Blob Data Contributor" -Scope $storage
使用存储帐户创建资源
在创建资源时设置 userOwnedStorage 字段。
Bicep 模板代码片段
resource storage 'Microsoft.Storage/storageAccounts@2023-01-01' existing = {
name: storageName
}
resource foundry 'Microsoft.CognitiveServices/accounts@2025-05-01-preview' = {
name: foundryName
location: location
kind: 'AIServices'
sku: { name: 'S0' }
identity: {
type: 'SystemAssigned'
}
properties: {
userOwnedStorage: {
storageResourceId: storage.id
}
}
}
ARM 模板代码片段
{
"type": "Microsoft.CognitiveServices/accounts",
"apiVersion": "2025-05-01-preview",
"name": "[parameters('foundryName')]",
"location": "[parameters('location')]",
"kind": "AIServices",
"identity": { "type": "SystemAssigned" },
"sku": { "name": "S0" },
"properties": {
"userOwnedStorage": {
"storageResourceId": "[resourceId('Microsoft.Storage/storageAccounts', parameters('storageName'))]"
}
}
}
Terraform 代码片段
请参阅 Terraform cognitive_account文档。
resource "azurerm_cognitive_account" "foundry" {
name = var.foundry_name
location = var.location
resource_group_name = azurerm_resource_group.rg.name
kind = "AIServices"
sku_name = "S0"
# userOwnedStorage equivalent
storage {
resource_id = azurerm_storage_account.speechlang.id
}
identity {
type = "SystemAssigned"
}
}
示例存储库
请参阅 Foundry 示例存储库中的基础结构示例(包括语音/语言存储)。
语音集成详细信息
语音方案(语音转文本批处理/实时、自定义语音、文本转语音、自定义语音)符合 “自带存储”(BYOS)语音资源中的指南。
userOwnedStorage 设置时,这些输出将路由到绑定的存储帐户容器。
客户管理的密钥 (CMK)
如果在存储帐户上配置 客户管理的密钥 加密,则写入其中的语音数据会使用这些密钥。 如果没有设置 userOwnedStorage,语音服务将回退到 Microsoft 托管存储,并且不会从 Foundry 资源继承 CMK 设置。
语言集成详细信息
绑定 userOwnedStorage 镜像历史语言资源行为,但有一个关键区别:删除或移动后无法更新或替换存储帐户。 在独立语言资源中,可以进行更新。在统一的 Foundry 资源中则无法更新,需要相应地规划生命周期缓解措施。
共享存储配置
语音和语言共享相同的存储帐户(不同的容器命名约定使数据在逻辑上保持分隔)。 由于访问权限在资源范围内,因此任何资源级用户都可以访问这两组输出。 为了进行更严格的分离,请部署不同的资源。
Troubleshooting
| 問题 | 缓解措施 |
|---|---|
| 意外删除存储帐户 | 尝试 恢复帐户。 如果失败,请重新创建 Foundry 资源。 |
| 缺少角色分配 | 对存储帐户上的资源托管标识重新运行 RBAC 角色分配。 |
| 将存储移动到新订阅 | 重新创建资源;移动更改资源 ID 并中断绑定。 |