Skip to content

如何在 Python 中使用 Azure Identity 实现统一身份认证

解决云端开发中凭据管理混乱的问题:通过 azure-identity 库,让同一套代码在本地开发环境(使用 CLI 登录)和生产环境(使用托管身份)之间自动切换认证方式,无需硬编码密钥。

为什么需要这个技能

在开发 Azure 应用时,最头疼的是处理不同环境的认证凭据。本地开发时你可能使用 az login 登录,而部署到 Azure VM 或 App Service 后则需要使用托管身份(Managed Identity),在 CI/CD 流水线中则需要服务主体(Service Principal)。

如果为每个环境编写不同的认证逻辑,代码会变得臃肿且难以维护。azure-identity 提供的 DefaultAzureCredential 可以自动尝试一系列预定义的认证链,从而实现“一次编写,到处运行”。

适用场景

  • 需要在本地机器、GitHub Actions、Azure Kubernetes Service (AKS) 或 Azure Functions 之间共享同一套代码。
  • 想要消除代码中硬编码的 Client Secret,提升安全性。
  • 需要为 Azure 资源(如 Blob Storage, Key Vault)快速构建安全访问客户端。

核心工作流

1. 环境准备

安装 SDK 并配置必要的环境变量(如果是服务主体认证):

bash
pip install azure-identity
bash
# 生产环境/CI 凭据
export AZURE_TENANT_ID=<your-tenant-id>
export AZURE_CLIENT_ID=<your-client-id>
export AZURE_CLIENT_SECRET=<your-client-secret>

2. 使用 DefaultAzureCredential(推荐)

这是最通用的方式,它会按顺序尝试环境变量、托管身份、VS Code 插件、Azure CLI 等认证方式。

python
from azure.identity import DefaultAzureCredential
from azure.storage.blob import BlobServiceClient

# 自动检测环境并选择合适的凭据
credential = DefaultAzureCredential()

client = BlobServiceClient(
    account_url="https://<account>.blob.core.windows.net",
    credential=credential
)

3. 针对特定场景的凭据选择

如果 DefaultAzureCredential 无法满足需求,可以使用更具体的类:

  • 托管身份:适用于 Azure 托管资源。
  • 客户端密钥:适用于标准的 Service Principal。
  • Azure CLI 凭据:强制使用本地 az login 的账户。
python
from azure.identity import ClientSecretCredential, ManagedIdentityCredential

# 显式使用服务主体密钥
credential = ClientSecretCredential(
    tenant_id="<tenant-id>",
    client_id="<client-id>",
    client_secret="<client-secret>"
)

下载和安装

下载 azure-identity-py 中文版 Skill ZIP

解压后将目录放入你的 AI 工具 skills 文件夹,重启工具后即可使用。具体路径参考内附的 USAGE.zh.md

你可能还需要

暂无推荐