SuperAPI AI 工具集

azure-identity-rust

安全与审计

查看项目

更新于 10-16 02:13

技能介绍

用途

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 以官方文档为准。)