考虑身份验证

已完成

默认情况下,对 Azure AI 服务资源的访问是通过使用订阅密钥来限制的。 对这些密钥的访问管理是安全性的主要考虑因素。

重新生成密钥

应定期重新生成密钥,以防未经授权的用户共享或访问密钥的风险。 可以通过使用 Azure 门户或使用 az cognitiveservices account keys regenerate Azure 命令行接口 (CLI) 命令来重新生成密钥。

每个 AI 服务都提供有两个密钥,使你能够在服务不中断的情况下重新生成密钥。 为实现这一点:

  1. 如果在生产环境中使用这两个密钥,请更改代码,以便仅使用一个密钥。 例如,将所有生产应用程序配置为使用密钥 1。
  2. 重新生成密钥 2.
  3. 切换所有生产应用程序以使用新生成的密钥 2。
  4. 重新生成密钥 1
  5. 最后,更新生产代码以使用新的密钥 1。

例如,若要在 Azure 门户中重新生成密钥,可以执行以下操作:

  1. 在 Azure 门户中,转到资源的“密钥和终结点”窗格。
  2. 然后选择“重新生成密钥 1”或“重新生成密钥 2”,具体取决于当时要重新生成哪个密钥。

使用 Azure Key Vault 保护密钥

Azure Key Vault 是一项 Azure 服务,你可以在其中安全地存储机密(例如密码和密钥)。 已向安全主体授予了对密钥保管库的访问权限,你可以考虑使用 Microsoft Entra ID 进行身份验证的用户标识。 管理员可以将安全主体分配给应用程序(在这种情况下,它称为服务主体),为应用程序定义一个托管标识。 然后,应用程序可以使用此标识来访问密钥保管库,并检索它有权访问的机密。 通过以这种方式控制对机密的访问,可以最大限度地减少它被硬编码到应用程序或保存在配置文件中而被破坏的风险。

可以在 Azure Key Vault 中存储 AI 服务资源的订阅密钥,并将托管标识分配给需要使用该服务的客户端应用程序。 然后,应用程序可以根据需要从密钥保管库检索密钥,而不会有将其公开给未授权用户的风险。

Diagram showing Azure AI services credentials retrieved from Azure Key Vault.

基于令牌的身份验证

在使用 REST 接口时,一些 AI 服务支持(甚至要求支持)基于令牌的身份验证。 在这些情况下,在初始请求中提供订阅密钥以获取身份验证令牌,它的有效期为 10 分钟。 后续请求必须提供令牌,以验证调用方是否已经过身份验证。

提示

在使用 SDK 时,SDK 会为你处理获取和提供令牌的调用。

Microsoft Entra ID 身份验证

一些 Azure AI 服务支持 Microsoft Entra ID 身份验证,这使你能够向 Azure 中运行的应用和服务授予对特定服务主体或托管标识的访问权限。

注意

若要详细了解 AI 服务的身份验证选项,请参阅 AI 服务文档

使用 Microsoft Entra ID 对 Azure AI 服务进行身份验证时有多种不同的方式,包括:

使用服务主体进行身份验证

使用服务主体对 Azure AI 服务进行身份验证的整个过程如下所示:

创建自定义子域

可以通过不同的方式创建自定义子域,包括通过 Azure 门户、Azure CLI 或 PowerShell。

例如,可以在 Azure Cloud Shell 中使用 PowerShell 创建子域。 要实现这个操作,请使用以下命令选择订阅:

Set-AzContext -SubscriptionName <Your-Subscription-Name>

然后,通过运行以下命令创建指定自定义子域的 Azure AI 服务资源:

$account = New-AzCognitiveServicesAccount -ResourceGroupName <your-resource-group-name> -name <your-account-name> -Type <your-account-type> -SkuName <your-sku-type> -Location <your-region> -CustomSubdomainName <your-unique-subdomain-name>

创建后,会在响应中返回子域名称。

向服务主体分配角色

现已创建一个与自定义子域链接的 Azure AI 资源。 接下来,将一个角色分配给一个服务主体。

首先,需要注册一个应用程序。 为此,请运行以下命令:

$SecureStringPassword = ConvertTo-SecureString -String <your-password> -AsPlainText -Force

$app = New-AzureADApplication -DisplayName <your-app-display-name> -IdentifierUris <your-app-uris> -PasswordCredentials $SecureStringPassword

这会创建应用程序资源。

然后使用 New-AzADServicePrincipal 命令创建服务主体并提供应用程序的 ID:

New-AzADServicePrincipal -ApplicationId <app-id>

最后,通过运行以下命令将“认知服务用户”角色分配给服务主体:

New-AzRoleAssignment -ObjectId <your-service-principal-object-id> -Scope <account-id> -RoleDefinitionName "Cognitive Services User"

使用托管标识进行身份验证

托管标识分为两种类型:

  • 系统分配的托管标识:会创建一个托管标识并将其链接到特定资源,例如需要访问 Azure AI 服务的虚拟机。 删除资源时,会同时删除标识。
  • 用户分配的托管标识:会创建一个托管标识供多个资源使用,而不是绑定到一个资源。 它独立于任何单个资源存在。

可以在资源创建期间或创建后将各类型的托管标识分配给相应资源。

例如,假设 Azure 中有一个虚拟机,你打算使用它每日访问 Azure AI 服务。 若要为此虚拟机启用系统分配的标识,请先确保 Azure 帐户具有“虚拟机参与者”角色。 然后,可以在 Azure Cloud Shell 终端中使用 Azure CLI 运行以下命令:

az vm identity assign -g <my-resource-group> -n <my-vm>

然后,可以使用以下命令授予对 Azure 门户中 Azure AI 服务的访问权限:

  1. 转到要向虚拟机托管标识授予访问权限的 Azure AI 服务资源。

  2. 在“概述”窗格中,选择“访问控制(IAM)”

  3. 依次选择“添加”、“添加角色分配”。

  4. 在“角色”选项卡中,选择“认知服务参与者”。

    A screenshot showing the Add role assignment tab.

  5. 在“成员”选项卡中,对于“分配访问权限给”,请选择“托管标识”。 然后选择“+ 选择成员”。

    A screenshot showing the Select managed identities pane.

  6. 确保在“订阅”下拉列表中选择了所需订阅。 对于“托管标识”,请选择“虚拟机”。

  7. 在列表中选择虚拟机,然后选择“选择”。

  8. 最后,选择“审阅 + 分配”进行审阅,然后再次选择“审阅 + 分配”完成操作。

注意

有关如何配置托管标识(包括用户托管标识)的更多详细信息,请参阅使用 Azure CLI 为 Azure VM 上的 Azure 资源配置托管标识