Azure Key Vault Secrets SDK for Rust 是 Azure Key Vault Secrets 的客户端库,用途是把密码、API 密钥等机密安全地存储与读取。以下示例要求使用经过审核的兼容 crate 组合,并替换所有资源占位符;不要用生产数据做演示写入。
安装 cargo add azure_security_keyvault_secrets@=1.0.1 azure_identity@=1.0.0 azure_core@=1.1.0
环境变量 export AZURE_KEYVAULT_URL="https://<vault-name>.vault.azure.net/"
认证 use azure_identity::DeveloperToolsCredential; use azure_security_keyvault_secrets::SecretClient;
let credential = DeveloperToolsCredential::new(None)?; let client = SecretClient::new( "https://<vault-name>.vault.azure.net/", credential.clone(), None, )?;
核心操作
获取机密: let secret = client .get_secret("secret-name", None) .await? .into_model()?;
let secret_value = secret.value.ok_or("Secret has no value")?; // 直接传给已授权的使用方;绝不要打印该值。
设置机密: use azure_security_keyvault_secrets::models::SetSecretParameters;
let params = SetSecretParameters { value: Some("secret-value".into()), ..Default::default() };
let secret = client .set_secret("secret-name", params.try_into()?, None) .await? .into_model()?;
更新机密属性: use azure_security_keyvault_secrets::models::UpdateSecretPropertiesParameters; use std::collections::HashMap;
let params = UpdateSecretPropertiesParameters { content_type: Some("text/plain".into()), tags: Some(HashMap::from([("env".into(), "prod".into())])), ..Default::default() };
client .update_secret_properties("secret-name", params.try_into()?, None) .await?;
删除机密: client.delete_secret("secret-name", None).await?;
列出机密: use azure_security_keyvault_secrets::ResourceExt; use futures::TryStreamExt;
let mut pager = client.list_secret_properties(None)?; while let Some(secret) = pager.try_next().await? { let name = secret.resource_id()?.name; println!("Secret: {}", name); }
获取特定版本: use azure_security_keyvault_secrets::models::SecretClientGetSecretOptions;
let options = SecretClientGetSecretOptions { secret_version: Some("version-id".into()), ..Default::default() };
let secret = client .get_secret("secret-name", Some(options)) .await? .into_model()?;
最佳实践
- 使用 Entra ID 认证:开发用 DeveloperToolsCredential,生产用 ManagedIdentityCredential。
- 使用 into_model()? 反序列化响应。
- 使用 ResourceExt trait 从 ID 提取名称。
- 处理软删除:被删除的机密可在保留期内恢复。
- 设置内容类型:有助于识别机密格式。
- 使用标签:便于组织和筛选机密。
- 机密版本化:新值会自动创建新版本。
RBAC 权限:需分配 Key Vault Secrets User(获取与列出)或 Key Vault Secrets Officer(完整增删改查)角色。
经审核的示例集使用 azure_security_keyvault_secrets 1.0.1 及兼容的 Azure 核心/凭据 crate。记录并提交 Cargo.lock;源码/API 审核不等同于编译器或真实服务测试。
参考链接 API 参考:https://docs.rs/azure_security_keyvault_secrets 源代码:https://github.com/Azure/azure-sdk-for-rust/tree/main/sdk/keyvault/azure_security_keyvault_secrets crates.io:https://crates.io/crates/azure_security_keyvault_secrets
适用场景:当 Rust 应用需要从指定的 Key Vault 获取某机密/版本,或执行已授权的机密创建、元数据更新、列出或删除时使用。
限制:示例是异步应用代码中的片段,需兼容的固定版本 Azure crate 以及必需的 Tokio/Serde/Futures 依赖;使用前请核对所选版本的 API。这些示例是依据官方源码/参考审核的,此处并未编译或在云账户上运行。
请使用已授权的租户、资源和最小权限身份。写入、覆盖、删除、备份获取和账户更改需要相应范围;清理只能移除明确标识的一次性资源。限制请求、重试和下载字节数,不要记录载荷、凭据或机密值。
不要把输出当作环境特定验证、测试或专家审查的替代品。
如缺少必要输入、权限、安全边界或成功标准,请停下来请求澄清。