用途
azure-identity-rust 是面向 Rust 的 Azure Identity SDK 认证库,用于为 Azure SDK 客户端提供基于 Microsoft Entra ID(原 Azure AD)的身份验证。它适用于在 Rust Azure SDK 客户端中选择或配置 Entra ID 凭据,包括本地开发工具、托管/工作负载标识,或经过审查的服务主体。
主要能力
该库提供多种凭据类型,覆盖不同运行环境:
- DeveloperToolsCredential:推荐的本地开发凭据,按顺序尝试开发工具(Azure CLI、Azure Developer CLI)。凭据链顺序为第 1 位 AzureCliCredential(az login),第 2 位 AzureDeveloperCliCredential(azd auth login)。
- ManagedIdentityCredential:用于 Azure 托管的资源,如 Azure VM、App Service、Functions、AKS,支持系统分配和用户分配托管标识。
- WorkloadIdentityCredential:用于 Kubernetes 工作负载标识。
- ClientSecretCredential:服务主体配合密钥。
- ClientCertificateCredential:服务主体配合证书。
- AzureCliCredential:直接使用 Azure CLI 认证。
- AzureDeveloperCliCredential:直接使用 azd CLI 认证。
- AzurePipelinesCredential:Azure Pipelines 服务连接。
- ClientAssertionCredential:自定义断言(联合标识)。
使用方式
安装命令:
cargo add azure_identity@=1.0.0 azure_core@=1.1.0
环境变量(服务主体,用于生产/CI):
export AZURE_TENANT_ID="<your-tenant-id>"
export AZURE_CLIENT_ID="<your-client-id>"
: "${AZURE_CLIENT_SECRET:?Inject through the approved host or CI secret manager}"
export AZURE_CLIENT_SECRET
用户分配托管标识(可选):
export AZURE_CLIENT_ID="<managed-identity-client-id>"
DeveloperToolsCredential 示例:
use azure_identity::DeveloperToolsCredential;
use azure_security_keyvault_secrets::SecretClient;
let credential = DeveloperToolsCredential::new(None)?;
let client = SecretClient::new(
"https://my-vault.vault.azure.net/",
credential.clone(),
None,
)?;
ManagedIdentityCredential 示例:
use azure_identity::{ManagedIdentityCredential, ManagedIdentityCredentialOptions, UserAssignedId};
// System-assigned managed identity
let credential = ManagedIdentityCredential::new(None)?;
// User-assigned managed identity
let options = ManagedIdentityCredentialOptions {
user_assigned_id: Some(UserAssignedId::ClientId("<user-assigned-mi-client-id>".into())),
..Default::default()
};
let credential = ManagedIdentityCredential::new(Some(options))?;
ClientSecretCredential 示例:
use azure_identity::ClientSecretCredential;
let credential = ClientSecretCredential::new(
"<tenant-id>".into(),
"<client-id>".into(),
"<client-secret>".into(),
None,
)?;
最佳实践
- 本地开发使用 DeveloperToolsCredential,可自动获取 Azure CLI 凭据。
- 生产环境使用 ManagedIdentityCredential,无需管理密钥。
- 凭据通过 Arc 包装,克隆开销低,可放心克隆。
- 复用凭据实例,同一凭据可用于多个客户端。
- 提供异步运行时:按应用需求添加 Tokio 及其所需特性,不要假设存在某个 crate 特有的 tokio 特性。
- 审查过的示例集使用 azure_identity 1.0.0 及兼容的 Azure core/credential crates,应记录并提交 Cargo.lock。
适用场景
适用于为 Rust Azure SDK 客户端选择或配置 Entra ID 凭据:本地开发工具、托管/工作负载标识,或经过审查的服务主体。
限制
- 示例是异步应用代码中的片段,需搭配兼容且固定版本的 Azure crates,以及所需的 Tokio/Serde/Futures 依赖;使用前请验证所选版本的 API。
- 示例已对照官方源码/参考进行审查,但未在此处编译或对云账户运行。
- 请使用经授权的租户、资源和具有最小权限的标识。写入、覆盖、删除、备份检索和账户变更需要相应作用域;清理只能移除明确标识的一次性资源。
- 应限制请求、重试和下载字节数,不要记录负载、凭据或密钥值。
- 不要把输出当作针对特定环境验证、测试或专家评审的替代。
- 如果缺少必需的输入、权限、安全边界或成功标准,应停止并请求澄清。
参考链接
- API Reference:https://docs.rs/azure_identity
- Source Code:https://github.com/Azure/azure-sdk-for-rust/tree/main/sdk/identity/azure_identity
- crates.io:https://crates.io/crates/azure_identity
(安装与配置项的具体版本、环境变量及 API 以官方文档为准。)