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