
本文介绍如何不依赖 Azure CLI,直接通过 azure-identity SDK 在 Python 中以服务主体(Service Principal)方式完成 Azure 身份验证与资源访问,适用于自动化脚本、CI/CD 及云原生应用开发。
本文介绍如何不依赖 azure cli,直接通过 `azure-identity` sdk 在 python 中以服务主体(service principal)方式完成 azure 身份验证与资源访问,适用于自动化脚本、ci/cd 及云原生应用开发。
在生产环境或容器化部署中,强制依赖 Azure CLI 往往带来额外运维负担——需预装、版本兼容、权限配置复杂,且难以纳入标准 Python 依赖管理流程。幸运的是,Azure 官方推荐的现代身份验证方式已完全支持纯 SDK 驱动的程序化登录,核心即 azure-identity 库。
✅ 推荐方案:使用 ClientSecretCredential
ClientSecretCredential 是专为服务主体设计的轻量级凭据类,它基于 OAuth 2.0 Client Credentials 流,直接向 Azure AD 发起令牌请求,无需交互式登录或本地 CLI 进程。你只需提供三个关键参数:
Python 3.14.2是Python编程语言在2025年12月5日发布的稳定版本,属于3.14系列的第二个维护更新。该版本包含了18项修复,重点解决了多进程、数据类及正则表达式等模块的回归问题,并修复了CVE-2025-12084等安全漏洞。此版本标志着自由线程模式(移除GIL)正式获得官方支持,是Python发展的重要里程碑。
- tenant_id:Azure AD 租户 ID(如 xxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx)
- client_id:服务主体的应用(客户端)ID(即注册应用的 Application ID)
- client_secret:服务主体的密钥(Client Secret),务必通过安全方式管理(如环境变量或密钥保管库)
? 示例代码(完整可运行)
import os
from azure.identity import ClientSecretCredential
from azure.mgmt.resource import ResourceManagementClient
# 安全建议:从环境变量读取敏感信息
credential = ClientSecretCredential(
tenant_id=os.getenv("AZURE_TENANT_ID"),
client_id=os.getenv("AZURE_CLIENT_ID"),
client_secret=os.getenv("AZURE_CLIENT_SECRET")
)
# 使用凭证初始化任意 Azure SDK 客户端(例如资源管理器)
subscription_id = os.getenv("AZURE_SUBSCRIPTION_ID")
resource_client = ResourceManagementClient(credential, subscription_id)
# 列出当前订阅下的资源组
for rg in resource_client.resource_groups.list():
print(f"Resource Group: {rg.name}")
⚠️ 注意事项:
- 确保服务主体已在 Azure AD 中注册,并已分配所需 RBAC 角色(如 Contributor)到目标订阅或资源范围;
- azure-identity>=1.10.0 推荐用于最新功能与安全修复,安装命令:pip install azure-identity azure-mgmt-resource;
- 切勿硬编码密钥 —— 生产环境中应使用 os.getenv()、Azure Key Vault 或托管标识(Managed Identity)替代明文 secret;
- 若需跨租户访问或使用证书认证,可选用 CertificateCredential 或 UsernamePasswordCredential(后者不推荐用于生产)。
该方式不仅消除了对 Azure CLI 的依赖,还实现了与 Azure SDK 生态的原生集成,所有后续 SDK 调用(Storage、Key Vault、Cosmos DB 等)均可复用同一 credential 实例,统一管理认证生命周期与令牌自动刷新。
Python免费学习笔记(深入):立即使用
在学习笔记中,你将探索 Python 的核心概念和高级技巧!










