为 Azure API 管理实例配置自定义域名

适用于:所有 API 管理层级

在 Azure 云中创建 Azure API 管理服务实例时,Azure 将为它分配一个 azure-api.cn 子域(例如 apim-service-name.azure-api.cn)。 你还可以使用自己的自定义域名(例如 contoso.com)公开 API 管理终结点。 本文演示了如何将现有的自定义 DNS 名称映射到 API 管理实例公开的终结点。

重要

API 管理仅接受主机头值与以下项匹配的请求:

  • 网关的默认域名
  • 网关的任何已配置的自定义域名

注释

目前,工作区网关不支持自定义域名。

重要

更改 API 管理服务的基础结构(例如配置自定义域、添加 CA 证书、缩放、虚拟网络配置、可用性区域更改和区域添加)可能需要 15 分钟或更长时间才能完成,具体取决于服务层和部署大小。 具有更多缩放单元或多区域配置(即多个位置的网关)的实例可能需要更长的时间。 仔细执行对 API 管理的滚动更改,以保留容量和可用性。

当服务正在更新时,无法进行其他服务基础结构更改。 但是,可以配置 API、产品、策略和用户设置。 该服务 不会 经历网关停机,API 管理 将继续 服务 API 请求,而不会中断(开发人员层除外)。

先决条件

  • API 管理实例。 有关详细信息,请参阅创建 Azure API 管理实例。

  • 由你或你的组织拥有的自定义域名。 本文不提供有关如何购买自定义域名的说明。

  • 可选的,一个包含公钥和私钥的有效证书 (.PFX)。 主题或主题备用名称 (SAN) 必须与域名匹配,从而使 API 管理实例能够通过 TLS 安全地公开 URL。

    查看域证书选项。

  • 托管在 DNS 服务器上的 DNS 记录,该记录将自定义域名映射到 API 管理实例的默认域名。 本主题不提供有关如何托管 DNS 记录的说明。

    有关所需记录的详细信息,请参阅本文后面的 DNS 配置。

自定义域的端点

可以向多个 API 管理终结点分配自定义域名。 当前有以下终结点可用:

端点 违约
网关 默认值为:<apim-service-name>.azure-api.cn。 网关是“消费层”中唯一可配置的终结点。

添加自定义网关域后,默认网关终结点配置仍可用。
开发人员门户(除“消耗”之外的所有层) 默认值为:<apim-service-name>.developer.azure-api.cn
管理 (仅限经典层) 默认值为:<apim-service-name>.management.azure-api.cn
自承载网关配置 API (v2) 默认值为:<apim-service-name>.configuration.azure-api.cn
SCM (仅限经典层) 默认值为:<apim-service-name>.scm.azure-api.cn

注意事项

  • 您可以更新服务层级中支持的任何终结点。 通常,客户会更新“网关”(此 URL 用于调用通过 API 管理公开的 API)和“开发人员门户”(开发人员门户 URL)。
  • 配置自定义网关域名后,默认网关终结点仍然可用,并且无法删除。 对于使用自定义域名配置的其他 API 管理终结点(如开发者门户),默认终结点不再可用。
  • 只有经典层级的 API 管理实例所有者才能在内部使用 Management 和 SCM 终结点。 很少会为这些终结点分配自定义域名。
  • 开发和高级版层支持为网关终结点设置多个自定义主机名。
  • 通配符域名(如 *.contoso.com)在以下层级中受支持:开发、基本、标准、高级。 例如,对于至 api.contoso.com 的请求,特定子域证书(例如,api.contoso.com)优先于通配符证书 (*.contoso.com)。
  • 为 开发人员门户配置自定义域时,可以为新域名 启用 CORS 。 这是开发人员门户访问者使能使用 API 参考页中的交互式控制台所必要的。

域证书选项

API 管理支持从 Azure 密钥保管库导入的自定义 TLS 证书或证书。 还可以启用免费的托管证书。

警告

如果需要证书固定,请使用自定义域名和自定义证书或密钥保管库证书,而不是默认证书或免费托管证书。 我们不建议对一个你不管理的证书产生硬性依赖。

如果已有第三方提供商提供的私有证书,则可以上传它到 API 管理实例。 必须满足以下要求。 (如果启用由 API 管理托管的免费证书,则该证书已经满足这些要求。)

  • 导出为 PFX 文件,使用三重 DES 加密并且还可以选择用密码进行保护。
  • 包含长度至少为 2048 位的私钥
  • 包含证书链中的所有中间证书和根证书。

重要

如果证书链使用交叉签名证书,API 管理可能会返回任何有效链,而你无法保证或控制返回哪一条。 确保客户端配置为信任所有可能的有效链,而不是依赖特定链。

配置自定义域名(门户)

根据想要使用的域证书选择步骤。

  1. 在 Azure 门户中导航到自己的 API 管理实例。
  2. 在左侧导航栏中选择“自定义域”。
  3. 选择+添加,或选择要更新的现有终结点。
  4. 在右侧窗口中,选择自定义域终结点的类型。
  5. 在“主机名”字段中,指定要使用的名称。 例如,api.contoso.com。
  6. 在“证书”下,选择“自定义”
  7. 选择“证书文件”以选择并上传证书。
  8. 上传有效的 .PFX 文件并提供其密码(如果该证书受密码保护)。
  9. 配置网关终结点时,请根据需要选择或取消选择其他选项,包括“协商客户端证书”或“默认 SSL 绑定”。 使用自定义证书配置网关域
  10. 选择“添加”或为现有终结点选择“更新”。
  11. 选择“保存”。

DNS 配置

将 DNS 提供程序配置为将自定义域名映射到 API 管理实例的默认域名。

CNAME 记录

配置从自定义域名(例如,api.contoso.com)指向 API 管理服务主机名(例如 yourapim-service-name.azure-api.net)的 CNAME 记录。 如果 IP 地址发生更改,CNAME 记录比 A 记录更稳定。 有关详细信息,请参阅 Azure API 管理的 IP 地址和 API 管理常见问题解答。

注释

某些域注册机构只允许在使用 CNAME 记录(例如 www.contoso.com),而非根名称(例如 contoso.com)时映射子域。 有关 CNAME 记录的详细信息,请参阅注册机构提供的文档或 IETF 域名 - 实现和规范。

Azure 密钥保管库支持的证书的证书同步和故障排除

API 管理提供控件和诊断来帮助保持证书同步并快速解决访问问题。

例如,由于配置更改或连接问题,API 管理实例在更新或轮换证书后,可能无法从Azure 密钥保管库提取主机名证书。 发生这种情况时,API 管理实例将继续使用缓存的证书,直到它收到更新的证书。 如果缓存的证书过期,通往网关的运行时流量将被阻止。 使用过期的缓存证书时,任何使用主机名证书配置的上游服务(例如应用程序网关)也可以阻止到网关的运行时流量。

使用以下控件和诊断使证书保持同步,并防止或最小化停机时间。

同步证书

在命令栏上选择 “同步证书 ”,以在证书指纹发生更改时手动启动证书同步。 使用此选项可以避免等待自动同步作业,这可能需要几个小时或更长时间。

在门户中使用 Azure 密钥保管库 同步主机名证书的命令的屏幕截图。

查看同步日志

选择命令栏上的 “查看同步日志 ”,以在证书同步失败时打开包含详细根本原因信息的面板。 这些日志可帮助你更快地诊断和解决同步问题。

还原对密钥保管库的访问权限

当 API 管理实例和自定义域使用的密钥保管库之间检测到访问问题时,API 管理会显示主动警告。 这些访问问题通常会导致证书同步失败。

如果出现警告,请选择“ 还原 ”以基于密钥保管库授权模型自动修复访问权限。 根据模型,API 管理执行以下操作之一来还原访问权限:

  • 为基于 Azure RBAC 的密钥保管库分配 密钥保管库机密用户角色。
  • 授予密钥保管库的基于访问策略的 GET 权限。

有关Azure 密钥保管库失败证书轮换的其他故障排除提示

  • 确认用于访问密钥保管库的托管标识存在。

  • 如果 API 管理实例部署在虚拟网络中,请确认与 AzureKeyVault 服务标记的出站连接。

API 管理代理服务器在 TLS 握手中如何通过 SSL 证书进行响应

为网关终结点配置自定义域时,可以设置其他属性,这些属性决定 API 管理如何使用服务器证书做出响应,具体取决于客户端请求。

调用时使用服务器名称指示 (SNI) 标头的客户端

如果为网关终结点配置了一个或多个自定义域,则 API 管理可以响应来自以下两者的 HTTPS 请求:

  • 自定义域(例如 contoso.com)
  • 默认域(例如 apim-service-name.azure-api.cn)。

根据 SNI 标头中的信息,API 管理会使用相应的服务器证书进行响应。

调用时不使用 SNI 标头的客户端

如果使用不发送 SNI 标头的客户端,则 API 管理会根据以下逻辑创建响应:

  • 如果服务仅为网关配置了一个自定义域 - 则默认证书是颁发给网关自定义域的证书。

  • ** 如果服务为网关配置了多个自定义域(支持的层级包括 "开发者" 和 "高级版"),可以通过将 defaultSslBinding 属性设置为 "true" 指定默认证书 ()。 在门户中,选择“默认 SSL 绑定”复选框。

    如果未设置该属性,则默认证书是颁发给在 *.azure-api.cn 上托管的默认网关域的证书。

对包含大型有效负载的 PUT/POST 请求的支持

当在 HTTPS 中使用客户端证书时,API 管理代理服务器支持包含大型有效负载 (> 40 KB) 的请求。 为了防止服务器的请求被冻结,可以在网关主机名上将 negotiateClientCertificate 属性设置为 true("negotiateClientCertificate": "true")。 在门户中,选中“协商客户端证书”复选框。

如果该属性设置为 true,则将在交换任何 HTTP 请求之前于 SSL/TLS 连接时请求客户端证书。 由于该设置应用于“网关主机名”级别,因此所有连接请求都会要求客户端证书。 可以避开此限制并为网关配置最多 20 个自定义域(仅在高级层才受支持)。