如何为 Azure SignalR 服务配置自定义域

除了 Azure SignalR 服务提供的默认域之外,还可以向你的服务添加自定义 DNS 域。 本文介绍如何将自定义域添加到 SignalR 服务。

注意

自定义域是高级层功能。 标准层资源可以升级到高级层,且不会发生故障。

若要配置自定义域,需要:

  1. 添加自定义域证书。
  2. 创建 DNS CNAME 记录。
  3. 添加自定义域。

先决条件

  • 通过 Azure 应用服务或第三方注册机构注册的自定义域。
  • 具有活动订阅的 Azure 帐户。
  • Azure 资源组。
  • Azure SignalR 服务资源。
  • 一个 Azure 密钥保管库实例。
  • 存储在 Key Vault 实例中的自定义域 SSL 证书。 请参阅 Key Vault 证书入门
  • Azure DNS 区域。 (可选)

添加自定义证书

需要先添加自定义 SSL 证书,然后才能添加自定义域。 SignalR 服务通过托管标识访问密钥保管库中存储的证书。

添加域证书需要执行三个步骤。

  1. 在 SignalR 服务中启用托管标识。
  2. 向托管标识授予对密钥保管库的访问权限。
  3. 向 SignalR 服务添加自定义证书。

在 SignalR 服务中启用托管标识

可以使用系统分配的或用户分配的托管标识。 本文演示如何使用系统分配的托管标识。

  1. 在 Azure 门户中,转到 Azure SignalR 服务资源。

  2. 在左侧的菜单中选择“标识”。

  3. 在“系统分配”选项卡中,将“状态”切换为“启用”。

    Screenshot of enabling managed identity.

  4. 选择“保存”,然后在系统提示启用系统分配的托管标识时选择“是”。

创建标识后,将显示对象(主体)ID。 SignalR 服务将使用系统分配的托管标识的对象 ID 来访问密钥保管库。 托管标识的名称与 SignalR 服务实例的名称相同。 在下一部分中,需要使用该名称或对象 ID 搜索主体(托管标识)。

向托管标识授予对密钥保管库的访问权限

SignalR 服务使用托管标识来访问密钥保管库。 必须向托管标识授予对密钥保管库的访问权限。

授予权限的步骤取决于是选择“保管库访问策略”还是“Azure 基于角色的访问控制”作为密钥保管库权限模型。

如果使用“保管库访问策略”作为密钥保管库权限模型,请按照此过程添加新的访问策略。

  1. 转到密钥保管库资源。

  2. 从左侧菜单中选择“访问策略”。

  3. 选择创建Screenshot of Key Vault's access policy page.

  4. 在“权限”选项卡中:

    1. 在“机密权限”下选择“GET”。
    2. 在“证书权限”下选择“GET”。
  5. 选择“下一步”,转到“主体”选项卡。

    Screenshot of Permissions tab of Key Vault's Create an access policy page.

  6. 在搜索框中输入托管标识的对象 ID。

  7. 从搜索结果中选择该托管标识。

  8. 选择“查看 + 创建” 选项卡。

    Screenshot of the Principal tab of Key Vault's Create an access policy page.

  9. 从“查看 + 创建”选项卡中,选择“创建”。

访问策略表中列出了 SignalR 服务实例的托管标识。

Screenshot of Key Vault's Access policies page.

向 SignalR 服务添加自定义证书

按照以下步骤将自定义证书添加到 SignalR 服务:

  1. 在 Azure 门户中,转到 Azure SignalR 服务资源。

  2. 在菜单窗格中,选择“自定义域”。

  3. 在“自定义证书”下,选择“添加”。

    Screenshot of custom certificate management.

  4. 输入自定义证书的名称。

  5. 选择“从密钥保管库中选择”,以选择密钥保管库证书。 选择后,应自动填充后面的“Key Vault 基 URI”、“Key Vault 机密名称”。 或者,也可以手动填写这些字段。

  6. 如果要将证书固定到特定版本,可以选择指定“Key Vault 机密版本”。

  7. 选择添加

Screenshot of adding a custom certificate.

SignalR 服务将提取证书并验证其内容。 成功后,证书的“预配状态”将为“成功”。

Screenshot of an added custom certificate.

创建自定义域 CNAME 记录

必须在 Azure DNS 区域中或使用第三方注册机构服务为自定义域创建 CNAME 记录。 CNAME 记录创建从自定义域到 SignalR 服务默认域的别名。 SignalR 服务使用该记录来验证自定义域的所有权。

例如,如果默认域为 contoso.signalr.azure.cn,自定义域为 contoso.example.com,则需要在 example.com 上创建 CNAME 记录。

创建 CNAME 记录后,可以执行 DNS 查找以查看 CNAME 信息。 例如,linux dig(DNS 查找)命令的输出应类似于以下输出:

 contoso.example.com. 0 IN CNAME contoso.signalr.azure.cn.

如果使用 Azure DNS 区域,请参阅管理 DNS 记录,了解如何添加 CNAME 记录。

Screenshot of adding a CNAME record in Azure DNS Zone.

如果使用其他 DNS 提供程序,请按照该提供程序的指南来创建 CNAME 记录。

添加自定义域

现在,将自定义域添加到 SignalR 服务。

  1. 在 Azure 门户中,转到 Azure SignalR 服务资源。

  2. 在菜单窗格中,选择“自定义域”。

  3. 在“自定义域”下,选择“添加”。

    Screenshot of custom domain management.

  4. 输入自定义域的名称。

  5. 输入自定义域的完整域名,例如 contoso.com

  6. 选择适用于此自定义域的自定义证书。

  7. 选择添加

    Screenshot of adding a custom domain.

验证自定义域

若要验证自定义域,可以使用运行状况 API。 运行状况 API 是一个公共终结点,用于返回 SignalR 服务实例的运行状况。 可通过 https://<your custom domain>/api/health 获取运行状况 API。

下面是使用 cURL 的示例:

PS C:\> curl.exe -v https://contoso.example.com/api/health
...
> GET /api/health HTTP/1.1
> Host: contoso.example.com

< HTTP/1.1 200 OK

它应返回 200 状态代码,而不会出现任何证书错误。

在专用网络中访问 Key Vault

如果已将专用终结点配置为密钥保管库,则 SignalR 服务无法通过公用网络访问密钥保管库。 可通过设置共享专用终结点,让 SignalR 服务能够通过专用网络访问密钥保管库。

创建共享专用终结点后,可以添加自定义证书,如上面的向 SignalR 服务添加自定义证书部分中所述。

重要

无需在密钥保管库 URI 中更改域。 例如,如果密钥保管库基本 URI 为 https://contoso.vault.azure.cn,则仍使用此 URI 来配置自定义证书。

无需在密钥保管库防火墙设置中显式允许 SignalR 服务 IP 地址。 有关详细信息,请参阅密钥保管库专用链接诊断

证书轮换

如果在创建自定义证书时未指定机密版本,Azure SignalR 服务则会定期检查 Key Vault 中的最新版本。 发布新版本时,将会自动应用该版本。 延迟通常在 1 小时内。

或者,也可以将自定义证书固定到 Key Vault 中的特定机密版本。 需要应用新证书时,可以编辑机密版本,然后主动更新自定义证书。

清理

如果不打算使用在本文中的创建资源,则可以删除资源组。

注意

删除资源组会删除其中包含的所有资源。 如果指定的资源组中存在本文范围外的资源,这些资源也会被删除。

后续步骤