Azure Key Vault 备份与恢复全流程(含密钥、机密、证书及RBAC权限) #一、备份操作 #1. 密钥(Keys)备份 #单个密钥备份使用Azure CLI执行以下命令,将指定密钥备份到本地文件:
az keyvault key backup --vault-name <你的Vault名称> --name <密钥名称> --file <备份文件路径,如./key-backup.bin>
批量备份所有密钥先列出Vault内所有密钥,再循环备份:
# 列出所有密钥名称并保存到临时文件
az keyvault key list --vault-name <你的Vault名称> --query "[].name" -o tsv > key-names.txt
# 循环备份每个密钥(提前创建./backups/keys目录)
while read -r key_name; do
az keyvault key backup --vault-name <你的Vault名称> --name "$key_name" --file "./backups/keys/$key_name-backup.bin"
done < key-names.txt
2. 机密(Secrets)备份 #单个机密备份az keyvault secret backup --vault-name <你的Vault名称> --name <机密名称> --file <备份文件路径,如./secret-backup.bin>
批量备份所有机密# 列出所有机密名称
az keyvault secret list --vault-name <你的Vault名称> --query "[].name" -o tsv > secret-names.txt
# 循环备份(提前创建./backups/secrets目录)
while read -r secret_name; do
az keyvault secret backup --vault-name <你的Vault名称> --name "$secret_name" --file "./backups/secrets/$secret_name-backup.bin"
done < secret-names.txt
3. 证书(Certificates)备份 #证书备份会包含证书本身、私钥(若为可导出类型)及关联的密钥/机密:
单个证书备份az keyvault certificate backup --vault-name <你的Vault名称> --name <证书名称> --file <备份文件路径,如./cert-backup.bin>
批量备份所有证书# 列出所有证书名称
az keyvault certificate list --vault-name <你的Vault名称> --query "[].name" -o tsv > cert-names.txt
# 循环备份(提前创建./backups/certs目录)
while read -r cert_name; do
az keyvault certificate backup --vault-name <你的Vault名称> --name "$cert_name" --file "./backups/certs/$cert_name-backup.bin"
done < cert-names.txt
4. RBAC权限备份 #Key Vault的RBAC权限属于Azure RBAC体系,需单独导出角色分配:
az role assignment list --scope "/subscriptions/<订阅ID>/resourceGroups/<资源组名称>/providers/Microsoft.KeyVault/vaults/<你的Vault名称>" --output json > rbac-backup.json
替换<订阅ID>、<资源组名称>和<你的Vault名称>为实际值,备份文件会保存所有针对该Vault的角色分配信息。
二、恢复操作 #1. 密钥(Keys)恢复 #单个密钥恢复az keyvault key restore --vault-name <目标Vault名称> --file <备份文件路径>
批量恢复所有密钥# 遍历密钥备份目录下的所有文件
for backup_file in ./backups/keys/*.bin; do
az keyvault key restore --vault-name <目标Vault名称> --file "$backup_file"
done
2. 机密(Secrets)恢复 #单个机密恢复az keyvault secret restore --vault-name <目标Vault名称> --file <备份文件路径>
批量恢复所有机密for backup_file in ./backups/secrets/*.bin; do
az keyvault secret restore --vault-name <目标Vault名称> --file "$backup_file"
done
3. 证书(Certificates)恢复 #单个证书恢复az keyvault certificate restore --vault-name <目标Vault名称> --file <备份文件路径>
批量恢复所有证书for backup_file in ./backups/certs/*.bin; do
az keyvault certificate restore --vault-name <目标Vault名称> --file "$backup_file"
done
注意:若目标Vault已存在同名证书,恢复操作会失败,需先删除同名证书或重命名后再恢复。
4. RBAC权限恢复 #需借助jq工具解析备份的JSON文件(提前安装jq:sudo apt install jq或brew install jq):
# 遍历备份的角色分配并逐一创建
cat rbac-backup.json | jq -c '.[]' | while read -r assignment; do
role_name=$(echo "$assignment" | jq -r '.roleDefinitionName')
principal_id=$(echo "$assignment" | jq -r '.principalId')
scope=$(echo "$assignment" | jq -r '.scope')
az role assignment create --role "$role_name" --assignee "$principal_id" --scope "$scope"
done
注意:执行恢复的账号需拥有目标Vault所在资源的Owner或User Access Administrator权限;若备份中的主体(用户/组/服务主体)在目标租户中不存在,该条角色分配会恢复失败。
关键注意事项 #备份文件加密绑定源租户,仅能在同一Azure租户内的Vault中恢复。恢复前确保目标Vault已开启软删除和清除保护(与源Vault配置一致可避免意外数据丢失)。批量操作前建议先测试单个备份/恢复流程,确认无问题后再执行批量操作。内容的提问来源于stack exchange,提问作者One Developer