共用方式為

通过专用终结点使用语音服务

Azure Private Link允许使用专用终结点连接到 Azure 中的服务。 专用终结点是只能在特定虚拟网络和子网中访问的专用 IP 地址。

本文介绍如何在语音服务中设置和使用Private Link和专用终结点。 本文还介绍了如何在以后删除专用终结点,但仍使用语音资源。

注意

在继续操作之前,请查看 如何通过 Azure AI services 使用虚拟网络。

为专用终结点方案设置适用于语音的 AI 服务资源需要执行以下任务:

  1. 创建自定义域名
  2. 启用专用端点
  3. 调整现有应用程序和解决方案

专用终结点和Virtual Network服务终结点

Azure为通过Private Azure主干网络隧道的流量提供专用终结点和虚拟网络服务终结点。 这些终结点类型的用途和基础技术类似。 但这两种技术之间存在差异。 建议在设计网络之前了解这两种方法的优缺点。

确定要使用的技术时,需要考虑以下事项:

  • 这两种技术都可确保虚拟网络和语音资源之间的流量不会通过公共 Internet 传输。
  • 专用终结点为语音资源提供专门的专用 IP 地址。 只有在特定的虚拟网络和子网中可以访问此 IP 地址。 你可以完全控制你的网络基础结构中对此 IP 地址的访问权限。
  • Virtual Network服务终结点不提供语音资源的专用 IP 地址。 相反,它们封装发送到语音资源的所有数据包,并直接通过Azure主干网络传送这些数据包。
  • 这两种技术都支持本地方案。 默认情况下,使用Virtual Network服务终结点时,从本地网络无法访问安全地连接到虚拟网络中的Azure服务资源。 但你可以更改此行为
  • 虚拟网络服务端点通常用于根据虚拟网络流量来源控制 AI 服务资源的语音访问权限。
  • 对于Azure AI services,启用Virtual Network服务终结点会强制所有Azure AI services资源的流量通过专用主干网络。 这需要显式网络访问配置。 (有关详细信息,请参阅配置虚拟网络和语音资源网络设置。)专用终结点没有此限制,可为你的网络配置提供更大的灵活性。 通过使用同一虚拟网络的同一子网,可以实现通过专用主干访问一项资源,同时可以通过公共 Internet 访问另一项资源。
  • 专用终结点会产生额外的费用。 Virtual Network服务终结点是免费的。
  • 专用终结点需要额外的 DNS 配置
  • 一个语音资源可与专用终结点和Virtual Network服务终结点同时工作。

建议先试用这两种终结点类型,再决定生产设计。

有关详细信息,请参阅以下资源:

本文介绍如何将专用终结点与语音服务一起使用。 此处说明了 VNet 服务终结点的用法。

创建自定义域名

注意

启用了自定义域名的适用于语音的 AI 服务资源使用不同方法与语音服务交互。 可能必须为以下两种方案调整应用程序代码:使用专用终结点以及不使用专用终结点

按照以下步骤为你的语音资源创建 Azure AI 服务的自定义子域名称。

注意

启用自定义域名时,此操作不可逆。 返回到区域名称的唯一方法是创建一个新的语音服务资源。

如果语音资源具有大量通过 Speech Studio 创建的关联自定义模型和项目,则强烈建议在修改生产中使用的资源之前,使用测试资源尝试配置。

若要使用 Azure 门户创建自定义域名,请执行以下步骤:

  1. 转到 Azure 门户并登录到Azure帐户。

  2. 选择所需语音资源。

  3. 在左窗格的“资源管理”组中,选择“网络” 。

  4. 在“防火墙和虚拟网络”选项卡上,选择“生成自定义域名” 。 一个新的右面板随即出现,其中包含有关为资源创建唯一自定义子域的说明。

  5. 在“生成自定义域名”面板中,输入自定义域名。 完整自定义域会如下所示:https://{your custom name}.cognitiveservices.azure.cn

    请记住,创建自定义域名后,无法更改域名。

    输入自定义域名后,请选择“保存”。

  6. 操作完成后,在“资源管理”组中,选择“密钥和终结点” 。 确认资源的新终结点名称以这种方式开始:https://{your custom name}.cognitiveservices.azure.cn

启用专用终结点

建议使用附加到虚拟网络的专用 DNS 区域,并对专用终结点进行必要更新。 你可以在预配过程中创建专用 DNS 区域。 如果使用自己的 DNS 服务器,则可能还需要更改 DNS 配置。

在为生产语音资源预配专用终结点之前,决定 DNS 策略。 并测试 DNS 更改,尤其是在使用自己的 DNS 服务器时。

按照以下文章之一来创建专用终结点。 这些文章使用 Web 应用作为示例资源(通过专用终结点提供)。

使用以下这些参数,而不是所选文章中的参数:

设置
资源类型 Microsoft.CognitiveServices/accounts
资源 <您的语音资源名称>
目标子资源 帐户

专用终结点的DNS:查看 Azure AI 服务资源中专用终结点的 DNS 的一般原则。 然后通过执行以下各节中所述的检查,来确认 DNS 配置是否正常工作。

解析来自虚拟网络的 DNS

此检查是必需的。

按照以下步骤测试来自虚拟网络的自定义 DNS 条目:

  1. 登录位于专用终结点连接到的虚拟网络中的虚拟机。

  2. 打开Windows命令提示符或 Bash shell,运行 nslookup,并确认它已成功解析资源的自定义域名。

    C:\>nslookup my-private-link-speech.cognitiveservices.azure.cn
    Server:  UnKnown
    Address:  168.63.129.16
    
    Non-authoritative answer:
    Name:    my-private-link-speech.privatelink.cognitiveservices.azure.cn
    Address:  172.28.0.10
    Aliases:  my-private-link-speech.cognitiveservices.azure.cn
    
  3. 确认 IP 地址与专用终结点的 IP 地址匹配。

解析来自其他网络的 DNS

仅当在资源的“网络”部分启用了“所有网络”选项或“所选网络和专用终结点”访问选项时,才执行此检查 。

如果计划仅使用专用终结点访问资源,则可以跳过此部分。

  1. 登录连接到允许访问资源的网络的计算机。

  2. 打开Windows命令提示符或 Bash shell,运行 nslookup,并确认它已成功解析资源的自定义域名。

    C:\>nslookup my-private-link-speech.cognitiveservices.azure.cn
    Server:  UnKnown
    Address:  fe80::1
    
    Non-authoritative answer:
    Name:    vnetproxyv1-weu-prod.chinaeast2.chinacloudapp.cn
    Address:  13.69.67.71
    Aliases:  my-private-link-speech.cognitiveservices.azure.cn
              my-private-link-speech.privatelink.cognitiveservices.azure.cn
              chinaeast2.prod.vnet.cog.trafficmanager.cn
    

注意

解析的 IP 地址指向虚拟网络代理终结点,该终结点会将网络流量分配给语音资源的专用终结点。 对于具有自定义域名但没有专用终结点的资源,行为会有所不同。 有关详细信息,请参阅此节

调整应用程序以使用具有专用终结点的 AI 服务语音资源

具有自定义域的适用于语音的 AI 服务资源以不同的方式与语音服务进行交互。 对于启用自定义域的语音资源,无论是否配置专用终结点,情况都是如此。 此节中的信息适用于这两种方案。

按照本部分的说明调整已有的应用程序和解决方案,以使用一个专为语音设计、启用了自定义域名和专用终结点的 AI 服务资源。

启用了自定义域名和专用终结点的 AI 服务语音资源使用不同的方法与语音服务交互。 本部分介绍如何将此类资源与语音服务 REST API 和语音 SDK 结合使用。

注意

无专用终结点但使用自定义域名的适用于语音的 AI 服务资源也以特殊方式与语音服务进行交互。 这种方法与使用专用终结点的 AI 服务语音资源的应用场景不同。 必须考虑这一点,因为你以后可能会决定删除专用终结点。 请参阅本文后面的“调整应用程序以使用无专用终结点的适用于语音的 AI 服务资源”

具有自定义域名和专用终结点的语音资源:与 REST API 结合使用

对于此部分,我们会使用 my-private-link-speech.cognitiveservices.azure.cn 作为示例语音资源 DNS 名称(自定义域)。

语音服务具有用于语音转文本文本转语音的 REST API。 对于启用了专用终结点的应用场景,请考虑以下信息。

语音转文本具有两个 REST API。 每个 API 都有不同的用途,使用不同的终结点,当你在启用了专用终结点的方案中使用时需要不同的方法。

语音转文本 REST API 包括:

适用于短音频的语音转文本 REST API 和文本转语音 REST API 在专用终结点方案中的用法是相同的。 它相当于本文后面所述的语音 SDK 情况

语音转文本 REST API 使用一组不同的终结点,因此它要求对启用专用终结点的方案采用不同的方法。

下一小节会介绍这两种情况。

语音转文本 REST API

通常,语音资源使用 Azure AI services 区域终结点语音转文本 REST API 通信。 这些资源的命名格式如下:

{region}.api.cognitive.azure.cn

下面是一个示例请求 URL:

https://api.cognitive.azure.cn/speechtotext/v3.1/transcriptions

注意

请参阅本文,了解 Microsoft Azure 由世纪互联节点运营。

为适用于语音的 AI 服务资源启用自定义域(这对专用终结点来说是必需的)后,该资源会对基本 REST API 终结点使用以下 DNS 名称模式:

{your custom name}.cognitiveservices.azure.cn

这意味着在我们的示例中,REST API 终结点名称为:

my-private-link-speech.cognitiveservices.azure.cn

示例请求 URL 需要转换为:

https://my-private-link-speech.cognitiveservices.azure.cn/speechtotext/v3.1/transcriptions

此 URL 应该可以从连接了专用终结点的虚拟网络进行访问(如果提供正确的 DNS 解析)。

为适用于语音的 AI 服务资源启用自定义域名后,通常会将所有请求 URL 中的主机名替换为新的自定义域主机名。 请求的所有其他部分(如前面示例中的路径 /speechtotext/v3.1/transcriptions)会保持不变。

提示

某些客户开发使用区域终结点 DNS 名称的区域部分的应用程序(例如,将请求发送到在特定Azure区域中部署的语音资源)。

适用于语音的 AI 服务资源的自定义域包含有关部署资源的区域的信息。 因此,前面所述的应用程序逻辑会不起作用,需要更改。

适用于短音频的语音转文本 REST API 和文本转语音 REST API

适用于短音频的语音转文本 REST API文本转语音 REST API 使用两种类型的终结点:

  • Azure AI services 区域端点,用于通过 Azure AI services REST API 进行通信,以获取授权令牌。
  • 所有其他操作的特殊终结点

注意

请参阅本文,了解 Microsoft Azure 由世纪互联节点运营。

有关与语音 SDK 结合使用的此小节提供了有关特殊终结点以及如何为启用了专用终结点的语音资源转换其 URL 的详细说明。 针对 SDK 介绍的相同原则适用于短音频的语音转文本 REST API 和文本转语音 REST API。

熟悉上一段落中提到的小节中的材料,并查看以下示例。 该示例说明文本转语音 REST API。 适用于短音频的语音转文本 REST API 的用法完全等效。

注意

在专用终结点方案中使用适用于短音频的语音转文本 REST API 和文本转语音 REST API 时,请使用通过 Ocp-Apim-Subscription-Key 标头传递的资源密钥。 (请参阅适用于短音频的语音转文本 REST API文本转语音 REST API 的详细信息)

仅当在语音资源的“网络”部分启用了“所有网络”访问选项后,才能使用授权令牌并通过 Authorization 标头将它传递到特殊终结点。 在其他情况下,在尝试获取授权令牌时会收到 ForbiddenBadRequest 错误。

文本转语音 REST API 使用示例

我们使用中国北部作为示例Azure区域,my-private-link-speech.cognitiveservices.azure.cn作为示例语音资源 DNS 名称(自定义域)。 我们示例中的自定义域名 my-private-link-speech.cognitiveservices.azure.cn 属于在中国北部区域中创建的语音资源。

若要获取区域中支持的语音列表,请执行以下请求:

https://chinaeast2.tts.speech.azure.cn/cognitiveservices/voices/list

请参阅文本转语音 REST API 文档中的更多详细信息。

对于启用了专用终结点的语音资源,需要修改相同操作的终结点 URL。 示例请求如下所示:

https://my-private-link-speech.cognitiveservices.azure.cn/tts/cognitiveservices/voices/list

请参阅语音 SDK 的构造终结点 URL 小节中的详细说明。

具有自定义域名和专用终结点的语音资源:与语音 SDK 结合使用

将语音 SDK 与启用了自定义域名和专用终结点的语音资源结合使用需要查看并可能会更改应用程序代码。

对于此部分,我们会使用 my-private-link-speech.cognitiveservices.azure.cn 作为示例语音资源 DNS 名称(自定义域)。

构造终结点 URL

通常在 SDK 方案中(以及在适用于短音频的语音转文本 REST API 和文本转语音 REST API 方案中),语音资源会将专用区域终结点用于不同的服务产品。 这些终结点的 DNS 名称格式为:

{region}.{speech service offering}.speech.azure.cn

示例 DNS 名称为:

chinaeast2.stt.speech.azure.cn

区域(DNS 名称的第一个元素)的所有可能值都在语音服务支持的区域中列出。 (请参阅本文,了解由世纪互联终结点运营的Microsoft Azure。下表显示了语音服务产品/服务的可能值(DNS 名称的第二个元素):

DNS 名称值 语音服务产品
s2s 语音翻译
stt 语音转文本
tts 文本转语音
voice 定制声音

因此,前面的示例 (chinaeast2.stt.speech.azure.cn) 代表中国北部的语音转文本终结点。

启用了专用终结点的终结点通过特殊代理与语音服务通信。 因此,必须更改终结点连接 URL。

“标准”终结点 URL 如下所示:

{region}.{speech service offering}.speech.azure.cn/{URL path}

专用终结点 URL 如下所示:

{your custom name}.cognitiveservices.azure.cn/{URL path}

语音 SDK 会根据所使用的服务自动配置 /{URL path}。 因此,仅必须按说明配置 /{baseURL}

修改应用程序

请按照以下步骤修改代码:

  1. 在 Azure 门户中,从资源的“密钥和终结点”菜单中确定应用程序终结点 URL。 在此示例中,它将是 my-private-link-speech.cognitiveservices.azure.cn

  2. 使用终端 URL 创建SpeechConfig实例:

    1. 修改已确定的终结点,如前面构造终结点 URL 部分中所述。

    2. 修改创建 SpeechConfig 实例的方式。 应用程序很可能会使用如下所示的内容:

      var config = SpeechConfig.FromSubscription(speechKey, azureRegion);
      

      由于前面几节中所述的主机名和 URL 更改,此示例不适用于启用了专用终结点的语音资源。 如果尝试使用已启用专用终结点的资源的密钥来运行现有应用程序而不进行任何修改,则会收到身份验证错误 (401)。

      若要使它正常工作,请修改实例化 SpeechConfig 类的方式并使用“从终结点”/“使用终结点”初始化。 假设我们定义了以下两个变量:

      • speechKey 包含启用了专用终结点的语音资源的密钥。
      • endPoint 包含 修改后的 终结点 URL(使用相应编程语言所需的类型)。 在我们的示例中,此变量应包含:
        wss://my-private-link-speech.cognitiveservices.azure.cn
        

      创建一个 SpeechConfig 实例:

      var config = SpeechConfig.FromEndpoint(endPoint, speechKey);
      
      auto config = SpeechConfig::FromEndpoint(endPoint, speechKey);
      
      SpeechConfig config = SpeechConfig.fromEndpoint(endPoint, speechKey);
      
      import azure.cognitiveservices.speech as speechsdk
      config = speechsdk.SpeechConfig(endpoint=endPoint, subscription=speechKey)
      
      SPXSpeechConfiguration *config = [[SPXSpeechConfiguration alloc] initWithEndpoint:endPoint subscription:speechKey];
      
      import * as sdk from "microsoft.cognitiveservices.speech.sdk";
      config: sdk.SpeechConfig = sdk.SpeechConfig.fromEndpoint(new URL(endPoint), speechKey);
      

进行此修改后,应用程序应使用启用了专用终结点的语音资源。 我们正在努力更加无缝地支持私有终结点场景。

具有自定义域名但没有专用终结点的语音资源:与语音 SDK 结合使用

使用启用了自定义域且没有专用终结点的语音资源进行语音 SDK 配置,与本文档所述的包含专用终结点的配置等效。

使用 Speech Studio

Speech Studio 是一个 Web 门户,用于在应用程序中构建和集成Azure语音服务。 当你在 Speech Studio 项目中工作时,将代表你进行对相应语音资源的网络连接和 API 调用。 使用专用终结点虚拟网络服务终结点和其他网络安全选项可能会限制 Speech Studio 功能的可用性。 使用 自定义语音音频内容创建等功能时,通常使用 Speech Studio。

从虚拟网络访问 Speech Studio

若要从Azure虚拟网络中的虚拟机使用 Speech Studio,请允许与该虚拟网络所需的 service tags 集建立传出连接。 请参阅 支持的区域和服务产品/服务中的详细信息。

对语音资源端点的访问 等于访问 Speech Studio 门户。 不支持通过专用或 VNet 服务终结点访问 Speech Studio。

在 Speech Studio 项目中工作

本部分描述如何使用不同类型的 Speech Studio 项目来应对语音资源的不同网络安全配置。 预计应已建立 Web 浏览器与 Speech Studio 的连接。 在Azure门户中或使用 CLI 设置语音资源网络安全:

Azure CLI

# View current network settings
az cognitiveservices account show \
  --name <your-speech-resource-name> \
  --resource-group <your-resource-group-name> \
  --query "{publicAccess:properties.publicNetworkAccess, networkRules:properties.networkAcls}" \
  -o json

# Change public network access (options: Enabled, Disabled)
az cognitiveservices account update \
  --name <your-speech-resource-name> \
  --resource-group <your-resource-group-name> \
  --public-network-access Enabled

Azure 门户

  1. 转到 Azure 门户并登录到Azure帐户。
  2. 选择语音资源。
  3. 在左侧窗格的“资源管理”组中,选择“网络”“防火墙和虚拟网络”。
  4. 从“所有网络”、“选定的网络和专用终结点”或“禁用”中选择一个选项。

自定义语音和音频内容创建

下表介绍了每个语音资源的“网络”“防火墙和虚拟网络”安全设置的自定义语音识别/有声内容创作辅助功能>

注意

如果仅允许专用终结点通过 “网络>专用终结点连接 ”选项卡,则不能将 Speech Studio 与语音资源一起使用。 仍可以在 Speech Studio 外部使用语音资源。

语音资源网络安全设置 Speech Studio 项目可访问性
所有网络 无限制
所选网络和专用终结点 可从允许的公共 IP 地址访问
已禁用 不可访问

如果选择“ 所选网络”和“专用终结点”,则会看到包含 虚拟网络防火墙 访问配置选项的选项卡。 在“防火墙”部分,必须允许至少一个公共 IP 地址,并将该地址用于浏览器与 Speech Studio 的连接。

若要在不放宽对生产语音资源的网络访问限制的情况下使用自定义语音,请考虑以下解决方法之一:

  • 为开发创建另一个可在公共网络上使用的语音资源。 在开发资源上的 Speech Studio 中准备自定义模型,然后将该模型复制到你的生产资源。 请参阅Models_CopyTo REST 请求和语音转文本 REST API
  • 可以对所有自定义语音操作(而不是 Speech Studio)使用 语音转文本 REST API

若要在不放宽对生产语音资源的网络访问限制的情况下使用自定义语音,请考虑以下解决方法之一:

  • 为开发创建另一个可在公共网络上使用的语音资源。 在开发资源的 Speech Studio 中准备自定义模型,然后提交 Azure 支持请求,请求协助将模型复制到生产资源。

调整应用程序以使用没有专用终结点的适用于语音的 AI 服务资源

在本文中,我们已多次指出,为适用于语音的 AI 服务资源启用自定义域是不可逆的。 与使用区域终结点名称的方法相比,此类资源会使用不同方式与语音服务通信。

本部分说明了如何将具有自定义域名但没有任何专用终结点的适用于语音的 AI 服务资源与语音服务 REST API 及语音 SDK 结合使用。 这可能是曾用于专用终结点场景的资源,但其专用终结点已被删除。

DNS 配置

请记住启用了专用终结点的语音资源的自定义域 DNS 名称如何从公用网络进行解析。 在这种情况下,解析的 IP 地址指向虚拟网络的代理终结点。 该终结点用于将网络流量调度到启用专用终结点的 Azure AI 服务资源。

但是,删除所有资源专用终结点后(或在启用自定义域名后),会重新预配语音资源的 CNAME 记录。 它现在指向相应 Azure AI services 区域终结点 的 IP 地址。

因此,nslookup 命令的输出将如下所示:

C:\>nslookup my-private-link-speech.cognitiveservices.azure.cn
Server:  UnKnown
Address:  fe80::1

Non-authoritative answer:
Name:    apimgmthskquihpkz6d90kmhvnabrx3ms3pdubscpdfk1tsx3a.chinacloudapp.cn
Address:  13.93.122.1
Aliases:  my-private-link-speech.cognitiveservices.azure.cn
          api.cognitive.azure.cn
          cognitiveweprod.trafficmanager.cn
          cognitiveweprod.azure-api.net
          apimgmttmdjylckcx6clmh2isu2wr38uqzm63s8n4ub2y3e6xs.trafficmanager.cn
          cognitiveweprod-chinaeast2-01.regional.azure-api.net

将它与来自此节的输出进行比较。

具有自定义域名但没有专用终结点的语音资源:与 REST API 结合使用

语音转文本 REST API

语音转文本 REST API 用法完全等同于启用了专用终结点的语音资源的情况。

适用于短音频的语音转文本 REST API 和文本转语音 REST API

在这种情况下,适用于短音频的语音转文本 REST API 的用法和文本转语音 REST API 的用法与常规情况没有区别,但有一个例外。 (请参阅下面的注释。)应使用在适用于短音频的语音转文本 REST API文本转语音 REST API 文档中介绍的两个 API。

注意

在自定义域方案中使用适用于短音频的语音转文本 REST API 和文本转语音 REST API 时,请使用通过 Ocp-Apim-Subscription-Key 标头传递的 API 密钥。 (请参阅适用于短音频的语音转文本 REST API文本转语音 REST API 的详细信息)

仅当在语音资源的“网络”部分启用了“所有网络”访问选项后,才能使用授权令牌并通过 Authorization 标头将它传递到特殊终结点。 在其他情况下,在尝试获取授权令牌时会收到 ForbiddenBadRequest 错误。

同时使用专用终结点和Virtual Network服务终结点

可以使用私有终结点虚拟网络服务终结点来同时访问相同的语音资源。 若要启用此同时使用,需要在 Azure 门户中语音资源的网络设置中使用 Selected Networks and Private Endpoints 选项。 在这种情况下不支持其他选项。

定价

有关定价详细信息,请参阅 Azure Private Link 定价

了解更多信息