你当前正在访问 Microsoft Azure Global Edition 技术文档网站。 如果需要访问由世纪互联运营的 Microsoft Azure 中国技术文档网站,请访问 https://docs.azure.cn

如何使用服务主体在 Azure Quantum 工作区中进行身份验证

有时,使用交互式身份验证或使用用户帐户进行身份验证并不合适。 当你希望从 Web 服务、其他辅助角色或自动系统提交作业时,可能会出现这种情况。 一个选项是配置托管标识,另一个选项是使用服务主体,本文将对此进行介绍。

先决条件:创建服务主体和应用程序机密

若要使用服务主体进行身份验证,必须先创建服务主体

若要创建服务主体,请分配访问权限并生成凭据:

  1. 创建 Azure AD 应用程序

    注意

    无需设置重定向 URI。

    1. 创建后,记下应用程序(客户端)ID 和目录(租户)ID。
  2. 创建凭据以登录到应用程序:

    1. 在应用程序的设置中,选择“证书和机密”。
    2. 在“客户端机密”下,选择“创建新机密”。
    3. 提供说明和持续时间,然后选择“添加”。
    4. 立即将机密的值复制到安全位置,你将无法再次看到它!
  3. 向服务主体授予访问工作区的权限:

    1. 打开 Azure 门户。
    2. 在搜索栏中,输入你在其中创建了工作区的资源组的名称。 选择出现在结果中的资源组。
    3. 在资源组概述中,选择“访问控制 (IAM)”。
    4. 选择“添加角色分配”
    5. 搜索并选择服务主体。
    6. 分配“参与者”或“所有者”角色。

注意

若要在资源组或工作区上创建角色分配,你需要是角色分配范围内的所有者或用户访问管理员。 如果无权在订阅中创建服务主体,则需要向 Azure 订阅的所有者或管理员请求权限。

如果仅在资源组或工作区级别具有权限,可使用以下方法在参与者角色下创建服务主体:

az ad sp create-for-rbac --role Contributor --scopes /subscriptions/<SUBSCRIPTION-ID>

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

选项 1:使用环境变量 - 创建 Workspace 对象时使用的默认凭据是 DefaultAzureCredential,它将尝试几种类型的身份验证。 第一种是 EnvironmentCredential,使用该方法可通过以下环境变量传递服务主体凭据:

  • AZURE_TENANT_ID:服务主体的租户的 ID。 也称为其“目录”ID。
  • AZURE_CLIENT_ID:服务主体的客户端 ID
  • AZURE_CLIENT_SECRET:服务主体的客户端密码之一

选项 2:使用 ClientSecretCredential:在实例化 Workspace 对象期间传递 ClientSecretCredential,或设置其 credentials 属性

from azure.identity import ClientSecretCredential

tenant_id = os.environ["AZURE_TENANT_ID"]
client_id = os.environ["AZURE_CLIENT_ID"]
client_secret = os.environ["AZURE_CLIENT_SECRET"]
credential = ClientSecretCredential(tenant_id=tenant_id, client_id=client_id, client_secret=client_secret)

workspace.credentials = credential

注意

workspace.login() 方法已弃用,因此不再需要。 第一次调用服务时,将使用在 Workspace 构造函数中传递的凭据或其 credentials 属性尝试进行身份验证。 如果未传递任何凭据,则 DefaultAzureCredential 将尝试使用多种身份验证方法。