你当前正在访问 Microsoft Azure Global Edition 技术文档网站。 如果需要访问由世纪互联运营的 Microsoft Azure 中国技术文档网站,请访问 https://docs.azure.cn。
如何使用服务主体在 Azure Quantum 工作区中进行身份验证
有时,使用交互式身份验证或使用用户帐户进行身份验证并不合适。 当你希望从 Web 服务、其他辅助角色或自动系统提交作业时,可能会出现这种情况。 一个选项是配置托管标识,另一个选项是使用服务主体,本文将对此进行介绍。
先决条件:创建服务主体和应用程序机密
若要使用服务主体进行身份验证,必须先创建服务主体。
若要创建服务主体,请分配访问权限并生成凭据:
-
注意
无需设置重定向 URI。
- 创建后,记下应用程序(客户端)ID 和目录(租户)ID。
创建凭据以登录到应用程序:
- 在应用程序的设置中,选择“证书和机密”。
- 在“客户端机密”下,选择“创建新机密”。
- 提供说明和持续时间,然后选择“添加”。
- 立即将机密的值复制到安全位置,你将无法再次看到它!
向服务主体授予访问工作区的权限:
- 打开 Azure 门户。
- 在搜索栏中,输入你在其中创建了工作区的资源组的名称。 选择出现在结果中的资源组。
- 在资源组概述中,选择“访问控制 (IAM)”。
- 选择“添加角色分配”。
- 搜索并选择服务主体。
- 分配“参与者”或“所有者”角色。
注意
若要在资源组或工作区上创建角色分配,你需要是角色分配范围内的所有者或用户访问管理员。 如果无权在订阅中创建服务主体,则需要向 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 将尝试使用多种身份验证方法。