Azure Key Vault 机密 Rust 实现

azure-keyvault-secrets-rust
分类编程
作者Agentic Awesome Skills 社区
许可MIT
评分4.40/5
使用12.0K

Azure Key Vault Secrets Rust SDK

Azure Key Vault Secrets 的客户端库 —— 用于安全存储密码、API 密钥和其他机密。

安装

sh
cargo add azure_security_keyvault_secrets azure_identity

环境变量

bash
AZURE_KEYVAULT_URL=https://<vault-name>.vault.azure.net/

身份验证

rust
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,
)?;

核心操作

获取机密 (Get Secret)

rust
let secret = client
    .get_secret("secret-name", None)
    .await?
    .into_model()?;

println!("Secret value: {:?}", secret.value);

设置机密 (Set Secret)

rust
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()?;

更新机密属性 (Update Secret Properties)

rust
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?;

删除机密 (Delete Secret)

rust
client.delete_secret("secret-name", None).await?;

列出机密 (List Secrets)

rust
use azure_security_keyvault_secrets::ResourceExt;
use futures::TryStreamExt;

let mut pager = client.list_secret_properties(None)?.into_stream();
while let Some(secret) = pager.try_next().await? {
let name = secret.resource_id()?.name;
println!("Secret: {}", name);
}

获取特定版本 (Get Specific Version)

rust
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()?;

最佳实践

1. 使用 Entra ID 认证 —— 开发环境使用 DeveloperToolsCredential,生产环境使用 ManagedIdentityCredential
2. 使用 into_model()? —— 用于反序列化响应结果。
3. 使用 ResourceExt trait —— 用于从 ID 中提取名称。
4. 处理软删除 —— 已删除的机密可在保留期内恢复。
5. 设置内容类型 (Content Type) —— 有助于识别机密格式。
6. 使用标签 (Tags) —— 用于组织和过滤机密。
7. 机密版本管理 —— 新值会自动创建新版本。

RBAC 权限

分配以下 Key Vault 角色:

  • Key Vault Secrets User —— 获取和列出

  • Key Vault Secrets Officer —— 完整的 CRUD 权限

参考链接

| 资源 | 链接 |
|----------|------|
| 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://cr
ates.io/crates/azure_security_keyvault_secrets |

使用场景

本技能适用于执行概览中所描述的工作流或操作。

局限性

  • 仅在任务明确符合上述范围时使用此技能。
  • 不要将输出结果视为针对特定环境的验证、测试或专家评审的替代方案。
  • 如果缺少必要的输入、权限、安全边界或成功标准,请停止操作并请求澄清。