Leer en inglés

Compartir a través de

在 Azure API 管理中使用客户端证书身份验证保护后端服务

适用于:所有 API 管理层级

API 管理允许使用客户端证书和相互 TLS 身份验证来保护对 API 后端服务的访问。 本文介绍如何使用 Azure 门户在 API 管理中管理证书。 它还说明了如何配置 API 以使用证书来访问后端服务。

还可以使用 API 管理 REST API 来管理 API 管理证书。

证书选项

API 管理提供两个选项用于管理用于保护对后端服务的访问的证书:

  • 引用在 Azure Key Vault 中管理的证书。
  • 直接在 API 管理中添加证书文件。

建议使用密钥保管库证书,因为这样做可以提高 API 管理安全性:

  • 可以在服务之间重复使用存储在密钥保管库中的证书。
  • 精细 访问策略 可以应用于密钥保管库中存储的证书。
  • 密钥保管库中更新的证书会在 API 管理中自动轮换。 密钥保管库中的更新后,API 管理中的证书在四小时内更新。 还可以使用 Azure 门户或通过管理 REST API 手动刷新证书。

先决条件

Nota

建议使用 Azure Az PowerShell 模块与 Azure 交互。 请参阅安装 Azure PowerShell 以开始使用。 若要了解如何迁移到 Az PowerShell 模块,请参阅 将 Azure PowerShell 从 AzureRM 迁移到 Az

  • 如果尚未创建 API 管理实例,请参阅 “创建 API 管理服务实例”。

  • 配置后端服务客户端证书身份验证。 有关在 Azure 应用服务中配置证书身份验证的信息,请参阅 在应用服务中配置 TLS 相互身份验证

  • 确保您能够访问 Azure 密钥保管库中的管理证书和管理密码,或者可以上传证书到 API 管理服务。 证书必须采用 PFX 格式。 允许使用自签名证书。

    如果使用自签名证书:

密钥保管库集成的先决条件

  1. 如果还没有密钥保管库,请创建一个。 有关创建密钥保管库的步骤,请参阅快速入门:使用 Azure 门户创建密钥保管库

    若要创建证书或将证书导入密钥保管库,请参阅快速入门:使用 Azure 门户从 Azure 密钥保管库设置和检索证书

  2. 在 API 管理实例中启用系统分配的或用户分配的托管标识

配置对密钥保管库的访问权限

  1. 在门户中导航到你的密钥保管库。

  2. 在左侧菜单中,选择“访问配置”,并记下配置的权限模型

  3. 根据权限模型,为 API 管理托管标识配置密钥保管库访问策略Azure RBAC 访问

    添加密钥保管库访问策略:

    1. 在左侧菜单中,选择“访问策略”。
    2. 在“访问策略”页上,选择“+ 创建”。
    3. 在“权限”选项卡上的“机密权限”下,选中“获取”和“列出”,然后选择“下一步”。
    4. 在“主体”选项卡上的“选择主体”中,搜索托管标识的资源名称,然后选择“下一步”。 如果你使用系统分配的标识,则主体为你的 API 管理实例的名称。
    5. 再次选择“下一步”。 在“查看 + 创建”选项卡上,选择“创建”。

    配置 Azure RBAC 访问:

    1. 在左侧菜单中,选择“访问控制(IAM)”。
    2. 在“访问控制(IAM)”页上,选择“添加角色分配”。
    3. 在“角色”选项卡上,选择“密钥保管库机密用户”。
    4. 在“成员”选项卡上,选择“托管标识”>“+ 选择成员”。
    5. 在“选择托管标识”页上,选择系统分配的托管标识或与 API 管理实例关联的用户分配的托管标识,然后选择“选择”。
    6. 选择“查看 + 分配”。

Key Vault 防火墙要求

如果在密钥保管库上启用了 Key Vault 防火墙,则具有以下附加要求:

  • 必须使用 API 管理实例的“系统分配的”托管标识来访问密钥保管库。

  • 在 Key Vault 防火墙中,启用“允许受信任的 Microsoft 服务绕过此防火墙”选项。

  • 在选择要添加到 Azure API 管理的证书或机密时,请确保允许本地客户端 IP 地址临时访问密钥保管库。 有关详细信息,请参阅配置 Azure Key Vault 网络设置

    完成配置后,可以在密钥保管库防火墙中阻止客户端地址。

虚拟网络要求

如果 API 管理实例部署在虚拟网络中,则还应配置下列网络设置:

  • 在 API 管理子网上,启用 Azure Key Vault 的服务终结点
  • 配置一个网络安全组 (NSG) 规则,以允许指向 AzureKeyVault 和 AzureActiveDirectory 服务标记的出站流量。

有关详细信息,请参阅在 VNET 中设置 Azure API 管理时使用的网络配置

添加密钥保管库证书

请参阅密钥保管库集成的先决条件

Importante

将密钥保管库证书添加到 API 管理实例时,必须有权列出密钥保管库中的机密。

Precaución

在 API 管理中使用密钥保管库证书时,请注意不要删除证书、密钥保管库或用于访问密钥保管库的托管标识。

将密钥保管库证书添加到 API 管理:

  1. Azure 门户,导航到 API 管理实例。

  2. 在“安全性”下,选择“证书”。

  3. 选择“证书”>“+ 添加”。

  4. 在“Id”中,输入所选的名称。

  5. 在“证书”下,选择“密钥保管库”。

  6. 输入密钥保管库证书的标识符,或选择“选择”来选择密钥保管库中的证书。

    Importante

    如果你自己输入密钥保管库证书标识符,请确保它不包含版本信息。 否则,在密钥保管库中更新后,证书不会在 API 管理中自动轮换。

  7. 在“客户端标识”中,选择一个系统分配的托管标识,或一个现有的用户分配的托管标识。 了解如何在 API 管理服务中添加或修改托管标识

    Nota

    标识需要从密钥保管库获取和列出证书的权限。 如果你尚未配置对密钥保管库的访问权限,则 API 管理会提示你,你可以让其自动为标识配置必要的权限。

  8. 选择 添加

    屏幕截图显示在门户中将密钥保管库证书添加到 API 管理。

  9. 选择“保存”。

上传证书

将客户端证书上传到 API 管理:

  1. Azure 门户,导航到 API 管理实例。

  2. 在“安全性”下,选择“证书”。

  3. 选择“证书”>“+ 添加”。

  4. 在“Id”中,输入所选的名称。

  5. 在“证书”下,选择“自定义”。

  6. 浏览以选择证书 .pfx 文件并输入其密码。

  7. 选择 添加

    屏幕截图显示在门户中将客户端证书上传到 API 管理。

  8. 选择“保存”。

证书上传后,会显示在“证书”窗口中。 如果有多个证书,请注意刚刚上传的证书的指纹。 需要配置 API 才能将客户端证书用于 网关身份验证

将 API 配置为使用客户端证书进行网关身份验证

  1. Azure 门户中,转到 API 管理实例。

  2. 在“API”下选择“API” 。

  3. 从列表中选择 API。

  4. 在“ 设计 ”选项卡上,选择 “后端 ”部分中的铅笔图标。

  5. 网关凭据中,选择 “客户端证书 ”,然后在 “客户端证书 ”列表中选择证书。

  6. 选择“保存”。

    使用客户端证书进行网关身份验证

Precaución

此更改将立即生效。 对 API作的调用将使用证书在后端服务器上进行身份验证。

Sugerencia

为 API 后端服务的网关身份验证指定证书时,该证书将成为该 API 的策略的一部分,可在策略编辑器中查看。

禁用自签名证书的证书链验证

如果使用自签名证书,则需要禁用证书链验证,使 API 管理能够与后端系统通信。 否则,你将获得 500 错误代码。 若要禁用此验证,可以使用New-AzApiManagementBackend(用于新后端)或Set-AzApiManagementBackend(对于现有后端)PowerShell cmdlet 并将参数设置为-SkipCertificateChainValidationTrue

$context = New-AzApiManagementContext -ResourceGroupName 'ContosoResourceGroup' -ServiceName 'ContosoAPIMService'
New-AzApiManagementBackend -Context  $context -Url 'https://contoso.com/myapi' -Protocol http -SkipCertificateChainValidation $true

还可以使用后端 REST API 禁用证书链验证。

删除客户端证书

若要删除证书,请在省略号 (...) 菜单上选择“删除”:

删除证书

Importante

如果证书由任何策略引用,将显示警告屏幕。 若要删除证书,必须先将其从配置为使用它的任何策略中删除。