你当前正在访问 Microsoft Azure Global Edition 技术文档网站。 如果需要访问由世纪互联运营的 Microsoft Azure 中国技术文档网站,请访问 https://docs.azure.cn

为语音和语言服务连接你的存储空间(预览版)

注释

本文档适用于 Microsoft Foundry(经典)门户。

🔄 如果你使用的是新门户,请切换到 Microsoft Foundry(新)文档

注释

本文档适用于 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)。

  1. 确保 Foundry 资源具有系统分配的托管标识。
  2. 在存储帐户上,将 Storage Blob Data Contributor 角色分配给 Foundry 资源的托管标识。
  3. 对于此场景,请勿将该角色分配给单个项目标识。

不支持基于 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 并中断绑定。