SuperAPI AI 工具集

azure-security-keyvault-keys-dotnet

安全与审计

查看项目

更新于 10-16 02:03

技能介绍

用途

Azure.Security.KeyVault.Keys 是面向 .NET 的客户端库,用于在 Azure Key Vault 和 Managed HSM 中管理加密密钥。它把密钥管理与密码学操作分成两个客户端:KeyClient 负责密钥生命周期管理,CryptographyClient 负责实际的加密、解密、签名、验签、包装与解包等操作。

安装

dotnet add package Azure.Security.KeyVault.Keys
dotnet add package Azure.Identity

当前版本:4.7.0(stable)。

环境变量

KEY_VAULT_NAME=<your-key-vault-name>
# 或完整 URI
AZURE_KEYVAULT_URL=https://<vault-name>.vault.azure.net

客户端层级

KeyClient(密钥管理)

  • CreateKey / CreateRsaKey / CreateEcKey
  • GetKey / GetKeys
  • UpdateKeyProperties
  • DeleteKey / PurgeDeletedKey
  • BackupKey / RestoreKey
  • GetCryptographyClient() → CryptographyClient

CryptographyClient(密码学操作)

  • Encrypt / Decrypt
  • WrapKey / UnwrapKey
  • Sign / Verify
  • SignData / VerifyData

KeyResolver(密钥解析)

  • Resolve(keyId) → CryptographyClient

身份验证

推荐使用 DefaultAzureCredential:

using Azure.Identity;
using Azure.Security.KeyVault.Keys;

var keyVaultName = Environment.GetEnvironmentVariable("KEY_VAULT_NAME");
var kvUri = $"https://{keyVaultName}.vault.azure.net";

var client = new KeyClient(new Uri(kvUri), new DefaultAzureCredential());

也可使用服务主体:

var credential = new ClientSecretCredential(
    tenantId: "<tenant-id>",
    clientId: "<client-id>",
    clientSecret: "<client-secret>");

var client = new KeyClient(new Uri(kvUri), credential);

密钥管理

创建密钥:可创建 RSA、EC、Oct(对称)密钥,并设置密钥大小、曲线、是否 HSM 保护、过期时间、生效时间、启用状态与允许的密钥操作。

获取密钥:可获取指定密钥的最新版本或指定版本,可列出所有密钥及某个密钥的所有版本。

更新密钥属性:可修改过期时间、标签等属性。

删除与清除:支持启动删除操作、等待完成、立即清除(软删除启用时)、恢复已删除密钥。

备份与还原:可将密钥备份为字节数组并写入文件,也可从备份数据还原密钥。

密码学操作

可从 KeyClient 获取 CryptographyClient,也可直接用密钥 ID 创建。支持:

  • 加密与解密(如 RsaOaep256)
  • 密钥包装与解包(如 RsaOaep256)
  • 签名与验签(SignData/VerifyData 内部计算哈希,Sign/Verify 针对预计算哈希)

密钥解析

KeyResolver 可按密钥 ID 解析出 CryptographyClient,便于在只知道密钥 URI 时执行密码学操作。

密钥轮换

支持 RotateKeyAsync 创建新版本,并可获取与更新密钥轮换策略,例如设置有效期与在到期前轮换的生命周期动作。

密钥类型参考

KeyClient(密钥管理操作)、CryptographyClient(密码学操作)、KeyResolver(解析密钥 ID)、KeyVaultKey(含密钥材料的密钥)、KeyProperties(密钥元数据)、CreateRsaKeyOptions、CreateEcKeyOptions、CreateOctKeyOptions、EncryptResult、DecryptResult、SignResult、VerifyResult、WrapResult、UnwrapResult。

算法参考

加密算法:RsaOaep、RsaOaep256、Rsa15(旧版)、A128Gcm、A256Gcm。

签名算法:RS256、RS384、RS512、PS256、ES256、ES384、ES512。

密钥包装算法:RsaOaep、RsaOaep256、A128KW、A256KW。

最佳实践

  • 使用托管标识,优先 DefaultAzureCredential 而非密钥
  • 启用软删除,防止误删
  • 敏感密钥使用 HSM 保护(HardwareProtected = true)
  • 实施密钥轮换,使用自动轮换策略
  • 限制密钥操作,仅启用所需的 KeyOperations
  • 始终设置过期时间
  • 生产环境固定使用特定版本
  • 缓存 CryptographyClient 以复用

错误处理

可通过捕获 RequestFailedException 并按状态码处理,例如 404 表示密钥未找到,403 表示访问被拒绝(检查 RBAC 权限)。

所需 RBAC 角色

  • Key Vault Crypto Officer:完整密钥管理
  • Key Vault Crypto User:使用密钥执行密码学操作
  • Key Vault Reader:读取密钥元数据

相关 SDK

  • Azure.Security.KeyVault.Keys(本 SDK)
  • Azure.Security.KeyVault.Secrets
  • Azure.Security.KeyVault.Certificates
  • Azure.Identity

参考链接

  • NuGet 包:https://www.nuget.org/packages/Azure.Security.KeyVault.Keys
  • API 参考:https://learn.microsoft.com/dotnet/api/azure.security.keyvault.keys
  • 快速入门:https://learn.microsoft.com/azure/key-vault/keys/quick-create-net
  • GitHub 源码:https://github.com/Azure/azure-sdk-for-net/tree/main/sdk/keyvault/Azure.Security.KeyVault.Keys

适用场景

当任务明确涉及在 .NET 中管理 Azure Key Vault 或 Managed HSM 的加密密钥,或执行加密、解密、签名、验签、密钥包装与解包等操作时适用。

限制

仅在任务与上述范围明确匹配时使用。不应将输出视为环境特定验证、测试或专家评审的替代。若缺少必要输入、权限、安全边界或成功标准,应停止并请求澄清。