Azure Identity Python 鉴权
将以下提示词粘贴到你的 AI 对话框中:
请根据 https://skillhub.cn/install/skillhub.md,安装 @org-02qudk26/azure-identity-py-zh。
技能介绍
要解决什么问题
用 Python 调用 Azure 存储、Key Vault、OpenAI 等 SDK 时,客户端必须拿到有效的 Microsoft Entra ID 访问令牌。硬编码连接字符串或 API 密钥会绕过租户审计与密钥轮换;本地笔记本、CI 流水线、App Service、AKS 又各自有不同的登录方式,如果每种环境写一套鉴权逻辑,部署和排障成本都会很高。
技能如何帮你落地
本技能围绕官方 azure-identity 库,把「选哪种凭据、怎么拿 token、怎么接非 Azure SDK」串成可执行的决策路径:
- 默认路径:优先
DefaultAzureCredential,在本地可走 Azure CLI / VS Code / Developer CLI,在 Azure 上可走托管标识与工作负载标识;生产环境可用AZURE_TOKEN_CREDENTIALS收紧凭据链。 - 生命周期:凭据与令牌缓存建议放在
with/async with(同步与azure.identity.aio异步分开,勿混用)。 - 场景化凭据:托管资源用
ManagedIdentityCredential/WorkloadIdentityCredential;服务主体用ClientSecretCredential、CertificateCredential(注意类名不是 ClientCertificateCredential);流水线可用EnvironmentCredential或AzurePipelinesCredential;无头环境用DeviceCodeCredential;中间层委托用户身份用OnBehalfOfCredential。 - 非 Azure SDK:用
get_bearer_token_provider把凭据包装成可复用的 bearer 提供方(如 OpenAI SDK)。 - 排障与治理:凭据链失败时可对照排除参数表缩小尝试范围;主权云通过
AzureAuthorityHosts/AZURE_AUTHORITY_HOST切换;长时间运行服务可配置TokenCachePersistenceOptions减少重复换票。
技能内还提供 凭据选择矩阵 与多条生产向最佳实践(复用凭据实例、为用户分配托管标识设置 AZURE_CLIENT_ID 等)。
适用边界与注意点
- 需要 Python 3.9+;VS Code / broker 桌面鉴权有单独安装说明,但核心仍是凭据选型与
get_token()用法。 DefaultAzureCredential会按固定顺序尝试多种来源;不用的来源应exclude_*,否则会拖慢启动并产生误导性失败日志。- 证书服务主体务必使用
CertificateCredential;文档中强调该错误类名在库里不存在。 - 更完整的非核心能力与生产检查清单见技能附带的
references/参考文件,本介绍不展开安装命令细节。
使用场景
- 本地用 Python 调用 Azure SDK 访问存储或 Key Vault,希望沿用 Azure CLI 登录态,避免在仓库里提交 client secret。
- 运行在 Azure App Service / Functions 上的 Python 服务,需要用托管标识读取配置或访问其他 Azure 资源。
- AKS 已启用 Microsoft Entra Workload ID 的 Pod,要在应用内用 Python SDK 换取访问下游 Azure API 的令牌。
- Azure DevOps Pipeline 中的 Python 部署或集成步骤,需通过工作负载标识联合或服务主体环境变量完成 Entra 鉴权。
适合人员
- 负责 Azure 上 Python 服务交付、要在生产去掉连接字符串并改用托管标识或 Entra 凭据的后端开发工程师
- 编写本地 Python 数据或运维自动化脚本、希望与 az login / VS Code 开发体验一致的 DefaultAzureCredential 行为的数据与平台工程师
- 为 AKS、App Service 或 VM 配置 Entra 身份与 RBAC,并需要指导业务代码选用 ManagedIdentity 或 Workload Identity 的云原生平台工程师
- 在 CI/CD 流水线中运行 Python 发布与集成任务、需落地 EnvironmentCredential 或 AzurePipelinesCredential 的 DevOps / 发布工程师