Azure Machine Learning 工作区身份验证机制详解

Azure Machine Learning 工作区身份验证机制详解

MachineLearningNotebooks Python notebooks with ML and deep learning examples with Azure Machine Learning Python SDK | Microsoft MachineLearningNotebooks 项目地址: https://gitcode.com/gh_mirrors/ma/MachineLearningNotebooks

前言

在 Azure Machine Learning 服务中,身份验证是访问和管理工作区的第一步。本文将全面解析 Azure ML 提供的五种身份验证方式,帮助开发者根据不同的使用场景选择最合适的认证方案。

身份验证方式概览

Azure ML 提供了五种主要的身份验证方式:

  1. 交互式登录认证 - 适合本地开发和实验
  2. Azure CLI 认证 - 适合已使用 Azure CLI 的用户
  3. 托管服务身份(MSI)认证 - 适合 Azure 虚拟机上的自动化流程
  4. 服务主体认证 - 适合自动化工作流和 CI/CD 场景
  5. 令牌认证 - 提供更细粒度的令牌控制

1. 交互式登录认证

交互式认证是 Azure ML SDK 的默认认证方式,适合个人开发者在本地计算机上进行实验。

基本用法

from azureml.core import Workspace

# 从配置文件获取工作区
ws = Workspace.from_config()

# 或直接指定参数
ws = Workspace(subscription_id="订阅ID",
               resource_group="资源组名称",
               workspace_name="工作区名称")

常见问题解决

问题1:访问权限错误
错误信息示例:

AuthenticationException: You don't have access to xxxx subscription...

解决方案

  • 确认登录账户正确
  • 检查订阅ID是否输入正确
  • 确保账户有访问该订阅和资源组的权限

问题2:租户相关问题
错误信息示例:

All the subscriptions that you have access to = []

解决方案:明确指定租户ID

from azureml.core.authentication import InteractiveLoginAuthentication

interactive_auth = InteractiveLoginAuthentication(tenant_id="租户ID")
ws = Workspace(subscription_id="订阅ID",
               resource_group="资源组",
               workspace_name="工作区名称",
               auth=interactive_auth)

问题3:权限更新不及时
当您刚被授予访问权限但认证失败时,可以强制刷新认证:

forced_interactive_auth = InteractiveLoginAuthentication(tenant_id="租户ID", force=True)
ws = Workspace(subscription_id="订阅ID",
               resource_group="资源组",
               workspace_name="工作区名称",
               auth=forced_interactive_auth)

2. Azure CLI 认证

如果您已经使用 Azure CLI 管理 Azure 资源,可以使用 CLI 认证方式避免重复登录。

使用方法

from azureml.core.authentication import AzureCliAuthentication

cli_auth = AzureCliAuthentication()
ws = Workspace(subscription_id="订阅ID",
               resource_group="资源组",
               workspace_name="工作区名称",
               auth=cli_auth)

注意:交互式认证不会自动使用已有的 Azure CLI 认证令牌。

3. 托管服务身份(MSI)认证

MSI 认证适用于 Azure 虚拟机上的自动化流程,无需在代码中存储凭据。

前提条件

  1. 为 VM 启用系统分配的托管身份
  2. 授予 VM 对工作区的访问权限

使用方法

from azureml.core.authentication import MsiAuthentication

msi_auth = MsiAuthentication()
ws = Workspace(subscription_id="订阅ID",
               resource_group="资源组",
               workspace_name="工作区名称",
               auth=msi_auth)

重要:MSI 认证只能在 Azure 虚拟机上使用,本地计算机会失败。

4. 服务主体认证

服务主体认证是自动化工作流(如 Azure DevOps 构建)的推荐方式。

创建服务主体步骤

  1. 在 Azure 门户中创建应用注册
  2. 记录应用程序ID和租户ID
  3. 创建客户端密钥
  4. 授予服务主体对工作区的访问权限

使用方法

import os
from azureml.core.authentication import ServicePrincipalAuthentication

# 从环境变量获取密码(推荐)
svc_pr_password = os.environ.get("AZUREML_PASSWORD")

svc_pr = ServicePrincipalAuthentication(
    tenant_id="租户ID",
    service_principal_id="应用程序ID",
    service_principal_password=svc_pr_password)

ws = Workspace(
    subscription_id="订阅ID",
    resource_group="资源组",
    workspace_name="工作区名称",
    auth=svc_pr)

安全建议:永远不要在代码中硬编码密码,使用环境变量或Azure Key Vault存储密码。

5. 令牌认证

令牌认证提供了更细粒度的控制,适用于需要在 AML SDK 外部管理令牌生成和刷新的场景。

使用方法

from azureml.core.authentication import TokenAuthentication, Audience

def get_token_for_audience(audience):
    # 实现获取令牌的逻辑
    return token

token_auth = TokenAuthentication(get_token_for_audience=get_token_for_audience)

ws = Workspace(
    subscription_id="订阅ID",
    resource_group="资源组",
    workspace_name="工作区名称",
    auth=token_auth)

# 获取AML和ARM令牌
token_aml = token_auth.get_token(Audience.aml)
token_arm = token_auth.get_token(Audience.arm)

远程运行中的密钥管理

在远程运行中使用密钥(如数据库密码)时,可以通过工作区关联的Key Vault安全传递。

设置密钥

import os
import uuid

local_secret = os.environ.get("LOCAL_SECRET", default=str(uuid.uuid4()))
keyvault = ws.get_default_keyvault()
keyvault.set_secret(name="密钥名称", value=local_secret)

注意azureml.core.keyvault.Keyvault是专门为工作区密钥设计的简化包装器,不同于通用的azure.keyvault库。

总结

选择哪种认证方式取决于您的使用场景:

  • 个人开发:交互式认证或Azure CLI认证
  • 自动化流程:服务主体认证或MSI认证
  • 高级令牌控制:令牌认证
  • 密钥管理:使用工作区的Key Vault

理解这些认证机制将帮助您构建更安全、更高效的Azure ML工作流。

MachineLearningNotebooks Python notebooks with ML and deep learning examples with Azure Machine Learning Python SDK | Microsoft MachineLearningNotebooks 项目地址: https://gitcode.com/gh_mirrors/ma/MachineLearningNotebooks

创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

段琳惟

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值