SuperAPI AI 工具集

azure-keyvault-keys-rust

安全与审计

查看项目

更新于 10-16 01:57

技能介绍

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。示例依据官方源码/参考进行审阅,但未在此处编译或针对云账户运行。

需使用已授权的租户、资源和具备最小权限的身份。写入、覆盖、删除、备份获取和账户变更需要相应作用域;清理时只能移除明确标识的一次性资源。应限制请求、重试和下载字节数,且不要记录载荷、凭据或机密值。

不应将输出视为针对具体环境的验证、测试或专家评审的替代。如果缺少必要输入、权限、安全边界或成功标准,应停止并请求澄清。