Azure Key Vault Keys SDK for Rust 是面向 Azure Key Vault Keys 的客户端库,用于加密密钥的安全存储与管理。
用途
该 SDK 适用于 Rust 应用获取公钥元数据,或在获得授权后执行 Key Vault 密钥的创建、版本管理、备份、恢复及密码学操作。
安装
cargo add azure_security_keyvault_keys@=1.0.1 azure_identity@=1.0.0 azure_core@=1.1.0
文档说明,示例需要一组经过审阅且相互兼容的 crate,并替换掉所有资源占位符;不要使用生产数据进行写入演示。
环境变量
export AZURE_KEYVAULT_URL="https://<vault-name>.vault.azure.net/"
身份验证
use azure_identity::DeveloperToolsCredential; use azure_security_keyvault_keys::KeyClient;
let credential = DeveloperToolsCredential::new(None)?; let client = KeyClient::new( "https://<vault-name>.vault.azure.net/", credential.clone(), None, )?;
密钥类型
- RSA:RSA 密钥(2048、3072、4096 位)
- EC:椭圆曲线密钥(P-256、P-384、P-521)
- RSA-HSM:受 HSM 保护的 RSA 密钥
- EC-HSM:受 HSM 保护的 EC 密钥
核心操作
获取密钥:
let key = client .get_key("key-name", None) .await? .into_model()?;
println!("Key ID: {:?}", key.key.as_ref().map(|k| &k.kid));
创建 RSA 密钥:
use azure_security_keyvault_keys::models::{CreateKeyParameters, KeyType};
let params = CreateKeyParameters { kty: Some(KeyType::Rsa), key_size: Some(2048), ..Default::default() };
let key = client .create_key("key-name", params.try_into()?, None) .await? .into_model()?;
创建 EC 密钥:
use azure_security_keyvault_keys::models::{CreateKeyParameters, KeyType, CurveName};
let params = CreateKeyParameters { kty: Some(KeyType::Ec), curve: Some(CurveName::P256), ..Default::default() };
let key = client .create_key("ec-key", params.try_into()?, None) .await? .into_model()?;
删除密钥:
client.delete_key("key-name", None).await?;
列出密钥:
use azure_security_keyvault_keys::ResourceExt; use futures::TryStreamExt;
let mut pager = client.list_key_properties(None)?; while let Some(key) = pager.try_next().await? { let name = key.resource_id()?.name; println!("Key: {}", name); }
备份密钥:
let backup = client.backup_key("key-name", None).await?; // Store backup.value safely
恢复密钥:
use azure_security_keyvault_keys::models::RestoreKeyParameters;
let params = RestoreKeyParameters { key_bundle_backup: backup_bytes, };
client.restore_key(params.try_into()?, None).await?;
密码学操作
Key Vault 可以在不暴露私钥的情况下执行密码学操作。可用操作取决于密钥类型与权限:
- encrypt/decrypt(RSA)
- sign/verify(RSA、EC)
- wrapKey/unwrapKey(RSA)
最佳实践
- 使用 Entra ID 身份验证:开发环境用 DeveloperToolsCredential,生产环境用 ManagedIdentityCredential
- 敏感工作负载使用 HSM 密钥(硬件保护密钥)
- 签名使用 EC,比 RSA 更高效
- 使用信封加密:RSA 可用于包装对称数据密钥,不要直接用 RSA 加密任意批量数据
- 备份密钥以用于灾难恢复
- 启用软删除,生产保管库所必需
- 使用密钥轮换,定期创建新版本
RBAC 权限
需要分配以下 Key Vault 角色:
- Key Vault Crypto User:用于密钥的密码学操作
- Key Vault Crypto Officer:对密钥拥有完整 CRUD 权限
已审阅的示例使用 azure_security_keyvault_keys 1.0.1 及兼容的 Azure core/credential crate。应记录并提交 Cargo.lock;源码/API 审阅并非编译器测试或实际服务测试。
参考链接
- API 参考:https://docs.rs/azure_security_keyvault_keys
- 源代码:https://github.com/Azure/azure-sdk-for-rust/tree/main/sdk/keyvault/azure_security_keyvault_keys
- crates.io:https://crates.io/crates/azure_security_keyvault_keys
适用场景
当 Rust 应用需要获取公钥元数据,或执行经授权的 Key Vault 密钥创建、版本管理、备份、恢复或密码学操作时使用。
限制
示例是 async 应用代码中的片段,需要兼容且固定版本的 Azure crate,以及所需的 Tokio/Serde/Futures 依赖;使用前应核对所选版本的 API。示例依据官方源码/参考进行审阅,但未在此处编译或针对云账户运行。
需使用已授权的租户、资源和具备最小权限的身份。写入、覆盖、删除、备份获取和账户变更需要相应作用域;清理时只能移除明确标识的一次性资源。应限制请求、重试和下载字节数,且不要记录载荷、凭据或机密值。
不应将输出视为针对具体环境的验证、测试或专家评审的替代。如果缺少必要输入、权限、安全边界或成功标准,应停止并请求澄清。