Azure Key Vault #

什么是 Azure Key Vault? #

Azure Key Vault 是用于安全存储和管理机密、密钥和证书的云服务。

text
┌─────────────────────────────────────────────────────────────┐
│                    Key Vault 概览                            │
├─────────────────────────────────────────────────────────────┤
│                                                             │
│  核心功能                                                    │
│  ├── 机密管理:存储密码、连接字符串                         │
│  ├── 密钥管理:加密密钥                                     │
│  ├── 证书管理:SSL/TLS 证书                                 │
│  └── 机密存储:安全存储敏感信息                             │
│                                                             │
│  安全特性                                                    │
│  ├── 硬件安全模块 (HSM)                                     │
│  ├── 访问控制策略                                           │
│  ├── 审计日志                                               │
│  └── 软删除和清除保护                                       │
│                                                             │
│  适用场景                                                    │
│  ├── 存储数据库连接字符串                                   │
│  ├── 管理 SSL 证书                                          │
│  ├── 加密密钥管理                                           │
│  └── 应用机密管理                                           │
│                                                             │
└─────────────────────────────────────────────────────────────┘

创建 Key Vault #

使用 Azure CLI #

bash
# 创建资源组
az group create --name myResourceGroup --location eastus

# 创建 Key Vault
az keyvault create \
  --name myKeyVault \
  --resource-group myResourceGroup \
  --location eastus

# 查看 Key Vault
az keyvault show --name myKeyVault

定价层 #

text
┌─────────────────────────────────────────────────────────────┐
│                    定价层                                    │
├─────────────────────────────────────────────────────────────┤
│                                                             │
│  标准                                                        │
│  ├── 软件保护的密钥                                         │
│  ├── 适合大多数场景                                         │
│  └── 成本较低                                               │
│                                                             │
│  高级                                                        │
│  ├── HSM 保护的密钥                                         │
│  ├── FIPS 140-2 Level 3                                    │
│  ├── 最高安全级别                                           │
│  └── 适合高安全要求                                         │
│                                                             │
└─────────────────────────────────────────────────────────────┘

机密管理 #

存储机密 #

bash
# 添加机密
az keyvault secret set \
  --vault-name myKeyVault \
  --name DatabasePassword \
  --value "P@ssw0rd123!"

# 添加带属性的机密
az keyvault secret set \
  --vault-name myKeyVault \
  --name ConnectionString \
  --value "Server=tcp:myserver.database.windows.net,1433;Database=mydb;User ID=user;Password=pass;" \
  --expires "2026-12-31T23:59:59Z" \
  --not-before "2026-01-01T00:00:00Z"

# 查看机密
az keyvault secret show \
  --vault-name myKeyVault \
  --name DatabasePassword

# 列出所有机密
az keyvault secret list --vault-name myKeyVault

获取机密 #

bash
# 获取机密值
az keyvault secret show \
  --vault-name myKeyVault \
  --name DatabasePassword \
  --query value -o tsv

# 获取特定版本
az keyvault secret show \
  --vault-name myKeyVault \
  --name DatabasePassword \
  --version <version-id>

应用程序访问 #

csharp
// C# 使用 Azure.Identity
using Azure.Identity;
using Azure.Security.KeyVault.Secrets;

var client = new SecretClient(
    new Uri("https://myKeyVault.vault.azure.net/"),
    new DefaultAzureCredential());

KeyVaultSecret secret = client.GetSecret("DatabasePassword");
string password = secret.Value;
javascript
// Node.js 使用 @azure/keyvault-secrets
const { DefaultAzureCredential } = require('@azure/identity');
const { SecretClient } = require('@azure/keyvault-secrets');

const credential = new DefaultAzureCredential();
const client = new SecretClient(
  'https://myKeyVault.vault.azure.net/',
  credential
);

const secret = await client.getSecret('DatabasePassword');
console.log(secret.value);

密钥管理 #

创建密钥 #

bash
# 创建 RSA 密钥
az keyvault key create \
  --vault-name myKeyVault \
  --name MyEncryptionKey \
  --kty RSA \
  --size 2048

# 创建 EC 密钥
az keyvault key create \
  --vault-name myKeyVault \
  --name MySigningKey \
  --kty EC \
  --curve P-256

# 创建 HSM 保护的密钥(高级层)
az keyvault key create \
  --vault-name myKeyVault \
  --name MyHSMKey \
  --kty RSA-HSM \
  --size 4096

使用密钥加密 #

bash
# 加密数据
az keyvault key encrypt \
  --vault-name myKeyVault \
  --name MyEncryptionKey \
  --algorithm RSA-OAEP-256 \
  --value $(echo "Hello World" | base64)

# 解密数据
az keyvault key decrypt \
  --vault-name myKeyVault \
  --name MyEncryptionKey \
  --algorithm RSA-OAEP-256 \
  --value <encrypted-value>

证书管理 #

创建证书 #

bash
# 创建自签名证书
az keyvault certificate create \
  --vault-name myKeyVault \
  --name MyCertificate \
  --policy "$(az keyvault certificate get-default-policy -o json)"

# 创建证书签名请求 (CSR)
az keyvault certificate pending create \
  --vault-name myKeyVault \
  --name MyCertificate \
  --policy @policy.json

导入证书 #

bash
# 导入 PFX 证书
az keyvault certificate import \
  --vault-name myKeyVault \
  --name MySSLCertificate \
  --file ./certificate.pfx \
  --password <password>

导出证书 #

bash
# 导出证书
az keyvault certificate download \
  --vault-name myKeyVault \
  --name MyCertificate \
  --file ./certificate.pem

访问控制 #

访问策略 #

text
┌─────────────────────────────────────────────────────────────┐
│                    访问策略权限                              │
├─────────────────────────────────────────────────────────────┤
│                                                             │
│  密钥权限                                                    │
│  ├── 加密/解密                                              │
│  ├── 包装/解包密钥                                          │
│  ├── 签名/验证                                              │
│  ├── 获取/列出/创建/更新/删除                               │
│  └── 备份/还原/导入                                         │
│                                                             │
│  机密权限                                                    │
│  ├── 获取                                                   │
│  ├── 列出                                                   │
│  ├── 设置                                                   │
│  └── 删除                                                   │
│                                                             │
│  证书权限                                                    │
│  ├── 获取                                                   │
│  ├── 列出                                                   │
│  ├── 创建                                                   │
│  ├── 导入                                                   │
│  └── 删除                                                   │
│                                                             │
└─────────────────────────────────────────────────────────────┘

配置访问策略 #

bash
# 为服务主体添加访问策略
az keyvault set-policy \
  --name myKeyVault \
  --spn <service-principal-id> \
  --secret-permissions get list \
  --key-permissions encrypt decrypt

# 为用户添加访问策略
az keyvault set-policy \
  --name myKeyVault \
  --upn user@example.com \
  --secret-permissions get set list delete \
  --certificate-permissions get list create import

RBAC 权限模型 #

bash
# 启用 RBAC 权限模型
az keyvault update \
  --name myKeyVault \
  --enable-rbac-authorization true

# 分配角色
az role assignment create \
  --role "Key Vault Secrets User" \
  --assignee <user-object-id> \
  --scope /subscriptions/<subscription-id>/resourceGroups/myResourceGroup/providers/Microsoft.KeyVault/vaults/myKeyVault

软删除和清除保护 #

启用软删除 #

bash
# 启用软删除和清除保护
az keyvault update \
  --name myKeyVault \
  --enable-soft-delete true \
  --enable-purge-protection true

# 查看软删除配置
az keyvault show \
  --name myKeyVault \
  --query "properties.enableSoftDelete"

恢复已删除的机密 #

bash
# 列出已删除的机密
az keyvault secret list-deleted --vault-name myKeyVault

# 恢复已删除的机密
az keyvault secret recover \
  --vault-name myKeyVault \
  --name DatabasePassword

# 清除已删除的机密
az keyvault secret purge \
  --vault-name myKeyVault \
  --name DatabasePassword

最佳实践 #

安全建议 #

text
┌─────────────────────────────────────────────────────────────┐
│                    安全最佳实践                              │
├─────────────────────────────────────────────────────────────┤
│                                                             │
│  1. 启用软删除和清除保护                                     │
│     └── 防止意外删除                                        │
│                                                             │
│  2. 使用托管身份访问                                         │
│     └── 避免在代码中存储凭据                                │
│                                                             │
│  3. 最小权限原则                                             │
│     └── 只授予必要的权限                                    │
│                                                             │
│  4. 启用防火墙                                               │
│     └── 限制网络访问                                        │
│                                                             │
│  5. 使用私有端点                                             │
│     └── 私有网络访问                                        │
│                                                             │
│  6. 定期轮换密钥                                             │
│     └── 自动轮换策略                                        │
│                                                             │
│  7. 监控审计日志                                             │
│     └── 检测异常访问                                        │
│                                                             │
└─────────────────────────────────────────────────────────────┘

下一步 #

现在你已经掌握了 Key Vault 的使用,接下来学习 DevOps 服务 了解 Azure DevOps 解决方案!

最后更新:2026-03-29