使用客户管理的密钥加密备份数据
可以使用 Azure 备份通过客户管理的密钥 (CMK)(而不是默认启用的平台管理的密钥 (PMK))加密备份数据。 用于加密备份数据的密钥必须存储在 Azure 密钥保管库中。
用于加密备份的加密密钥可能与用于源的加密密钥不同。 基于 AES 256 的数据加密密钥 (DEK) 有助于保护数据。 密钥加密密钥 (KEK) 又有助于保护 DEK。 你可以完全控制数据和密钥。
若要允许加密,必须向备份保管库授予对密钥保管库中加密密钥的访问权限。 你可以在需要时更改密钥。
在本文中,学习如何:
- 创建恢复服务保管库。
- 配置恢复服务保管库以使用 CMK 加密备份数据。
- 将数据备份到通过 CMK 加密的保管库。
- 从备份还原数据。
注意事项
可以使用此功能(使用 Azure 备份通过 CMK 加密备份数据)仅加密新的恢复服务保管库。 不支持任何包含已注册或已尝试注册的现有项的保管库。
对恢复服务保管库启用通过 CMK 加密后,无法改回使用 PMK(默认)。 可以更改加密密钥以满足要求。
此功能当前不支持通过 Microsoft Azure 恢复服务 (MARS) 代理进行备份,因此你可能无法使用 CMK 加密的保管库通过 MARS 代理进行备份。 MARS 代理使用基于密码的加密。 此功能也不支持备份在经典部署模型中创建的虚拟机 (VM)。
此功能与 Azure 磁盘加密无关,后者通过 BitLocker(适用于 Windows)和 DM-Crypt(适用于 Linux)对 VM 磁盘使用基于来宾的加密。
只能使用存储在 Azure Key Vault 中且位于同一区域的密钥加密恢复服务保管库。 此外,密钥必须是受支持的 RSA 密钥,并且必须处于启用状态。
当前不支持跨资源组和订阅移动 CMK 加密的恢复服务保管库。
将已通过 CMK 加密的恢复服务保管库移到新租户时,需要更新恢复服务保管库,以重新创建并重新配置保管库的托管标识和 CMK(应位于新租户中)。 如果不更新保管库,备份和还原操作将会失败。 此外,需要重新配置在订阅中设置的任何 Azure 基于角色的访问控制 (RBAC) 权限。
可通过 Azure 门户和 PowerShell 配置此功能。 使用 Az 模块 5.3.0 或更高版本,在恢复服务保管库中使用 CMK 进行备份。
警告
如果是使用 PowerShell 来管理用于备份的加密密钥,我们不建议从门户更新密钥。 如果从门户更新密钥,则在支持新模型的 PowerShell 更新可用之前,将无法使用 PowerShell 进一步更新密钥。 但是,你可以继续从 Azure 门户更新密钥。
如果尚未创建和配置恢复服务保管库,请参阅本文。
若要配置保管库,请按顺序执行以下操作:
为恢复服务保管库启用托管标识。
为恢复服务保管库分配访问 Azure Key Vault 中加密密钥的权限。
在 Azure Key Vault 中启用软删除和清除保护。
将加密密钥分配给恢复服务保管库。
以下各部分详细讨论了每一项操作。
为恢复服务保管库启用托管标识
Azure 备份使用系统分配的托管标识和用户分配的托管标识对恢复服务保管库进行身份验证,以访问 Azure 密钥保管库中存储的加密密钥。 可以选择要使用的托管标识。
注意
启用托管标识后,不得将其禁用(即使是暂时禁用)。 禁用托管标识可能会导致行为不一致。
为保管库启用系统分配的托管标识
选择客户端:
转到“恢复服务保管库”>“标识”。
选择“系统分配”选项卡。
将“状态”更改为“打开”。
选择“保存”,为保管库启用标识。
之前的步骤会生成一个对象 ID,这是系统分配的保管库托管标识。
使用 Update-AzRecoveryServicesVault 命令启用恢复服务保管库的系统分配托管标识。
示例:
$vault=Get-AzRecoveryServicesVault -ResourceGroupName "testrg" -Name "testvault"
Update-AzRecoveryServicesVault -IdentityType SystemAssigned -ResourceGroupName TestRG -Name TestVault
$vault.Identity | fl
输出:
PrincipalId : xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx
TenantId : xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx
Type : SystemAssigned
使用 az backup vault identity assign 命令启用恢复服务保管库的系统分配托管标识。
示例:
az backup vault identity assign --system-assigned --resource-group MyResourceGroup --name MyVault
输出:
PrincipalId : xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx
TenantId : xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx
Type : SystemAssigned
将用户分配的托管标识分配给保管库(预览版)
注意
使用用户分配的托管标识进行 CMK 加密的保管库不支持使用专用终结点进行备份。
尚不支持将限制对特定网络访问的密钥保管库与用户分配的托管标识一起用于 CMK 加密。
若要为恢复服务保管库分配用户分配的托管标识,请选择客户端:
转到“恢复服务保管库”>“标识”。
选择“用户分配(预览版)”选项卡。
选择“+ 添加”以添加用户分配的托管标识。
在“添加用户分配的托管标识”窗格中,选择标识所对应的订阅。
从列表中选择相应标识。 你还可以按标识或资源组的名称进行筛选。
选择“添加”以完成标识分配。
使用 Update-AzRecoveryServicesVault 命令启用恢复服务保管库的用户分配托管标识。
示例:
$vault = Get-AzRecoveryServicesVault -Name "vaultName" -ResourceGroupName "resourceGroupName"
$identity1 = Get-AzUserAssignedIdentity -ResourceGroupName "resourceGroupName" -Name "UserIdentity1"
$identity2 = Get-AzUserAssignedIdentity -ResourceGroupName "resourceGroupName" -Name "UserIdentity2"
$updatedVault = Update-AzRecoveryServicesVault -ResourceGroupName $vault.ResourceGroupName -Name $vault.Name -IdentityType UserAssigned -IdentityId $identity1.Id, $identity2.Id
$updatedVault.Identity | fl
输出:
PrincipalId : xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx
TenantId : xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx
Type : UserAssigned
UserAssignedIdentities : {[/subscriptions/xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx/resourceGroups/resourceGroupName/providers/Microsoft.ManagedIdentity/userAssignedIdentities/UserIdentity1, Microsoft.Azure.Management.RecoveryServices.Models.UserIdentity],[/subscriptions/xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx/resourceGroups/resourceGroupName/providers/Microsoft.ManagedIdentity/userAssignedIdentities/UserIdentity2,Microsoft.Azure.Management.RecoveryServices.Models.UserIdentity]}
使用 az backup vault identity assign 命令启用恢复服务保管库的系统分配托管标识。
示例:
az backup vault identity assign --user-assigned MyIdentityId1 --resource-group MyResourceGroup --name MyVault
输出:
PrincipalId : xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx
TenantId : xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx
Type : UserAssigned
UserAssignedIdentities : {[/subscriptions/xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx/resourceGroups/resourceGroupName/providers/Microsoft.ManagedIdentity/userAssignedIdentities/MyIdentityId1,Microsoft.Azure.Management.RecoveryServices.Models.UserIdentity]}
为恢复服务保管库分配访问 Azure Key Vault 中加密密钥的权限
现在,需要允许恢复服务保管库的托管标识访问包含加密密钥的密钥保管库。
如果使用用户分配的标识,则必须向其分配相同的权限。
选择客户端:
转到你的密钥保管库 >“访问策略”。 选择“+添加访问策略”。
指定要允许对密钥执行的操作。 对于“密钥权限”,选择“获取”、“列表”、“解包密钥”和“包装密钥”操作。
转到“选择主体”,然后在搜索框中使用其名称或托管标识搜索保管库。 保管库出现后,选择它,然后在窗格底部选择“选择”。
选择“添加”以添加新的访问策略。
选择“保存”,以保存对密钥保管库的访问策略所做的更改。
你还可向包含之前所述权限的恢复服务保管库分配 RBAC 角色,例如密钥保管库加密主管角色。 此角色可能包含其他权限。
使用 Get-AzADServicePrincipal 命令获取恢复服务保管库的主体 ID。 然后,在 Set-AzKeyVaultAccessPolicy 命令中使用此 ID 为密钥保管库设置访问策略。
示例:
$sp = Get-AzADServicePrincipal -DisplayName MyVault
$Set-AzKeyVaultAccessPolicy -VaultName myKeyVault -ObjectId $sp.Id -PermissionsToKeys get,list,unwrapkey,wrapkey
使用 az ad sp list 命令获取恢复服务保管库的主体 ID。 然后,在 az keyvault set-policy 命令中使用此 ID 为密钥保管库设置访问策略。
示例:
az ad sp list --display-name MyVault
az keyvault set-policy --name myKeyVault --object-id <object-id> --key-permissions get,list,unwrapkey,wrapkey
在 Azure Key Vault 中启用软删除和清除保护
需要在存储加密密钥的密钥保管库中启用软删除和清除保护。
选择客户端:
可以从 Azure Key Vault 界面启用软删除和清除保护,如以下屏幕截图中所示。 或者,可以在创建密钥保管库时设置这些属性。 详细了解这些密钥保管库属性。
请登录到 Azure 帐户:
Login-AzAccount
选择包含你的保管库的订阅:
Set-AzContext -SubscriptionId SubscriptionId
启用软删除:
($resource = Get-AzResource -ResourceId (Get-AzKeyVault -VaultName "AzureKeyVaultName").ResourceId).Properties | Add-Member -MemberType "NoteProperty" -Name "enableSoftDelete" -Value "true"
Set-AzResource -resourceid $resource.ResourceId -Properties $resource.Properties
启用“清除保护”:
($resource = Get-AzResource -ResourceId (Get-AzKeyVault -VaultName "AzureKeyVaultName").ResourceId).Properties | Add-Member -MemberType "NoteProperty" -Name "enablePurgeProtection" -Value "true"
Set-AzResource -resourceid $resource.ResourceId -Properties $resource.Properties
请登录到 Azure 帐户:
az cloud set -n AzureChinaCloud
az login
选择包含你的保管库的订阅:
az account set --subscription "Subscription1"
启用软删除:
az keyvault update --subscription {SUBSCRIPTION ID} -g {RESOURCE GROUP} -n {VAULT NAME} --enable-soft-delete true
启用“清除保护”:
az keyvault update --subscription {SUBSCRIPTION ID} -g {RESOURCE GROUP} -n {VAULT NAME} --enable-purge-protection true
将加密密钥分配给恢复服务保管库
在选择保管库的加密密钥之前,请确保已成功执行以下操作:
- 启用恢复服务保管库的托管标识,并为其分配所需的权限。
- 为密钥保管库启用软删除和清除保护。
- 不在要为其启用 CMK 加密的恢复服务保管库中包含任何受保护或已注册项。
若要分配密钥并按照步骤操作,请选择客户端:
转到你的恢复服务保管库 >“属性”。
在“加密设置”下,选择“更新”。
在“加密设置”窗格中,选择“使用自己的密钥”,然后使用以下选项之一指定密钥。 请务必使用处于启用状态的 RSA 密钥。
选择“输入密钥 URI”。 在“密钥 URI”中,输入对此恢复服务保管库中的数据加密想要使用的密钥的 URI。 你还可以从密钥保管库中的相应密钥获取此密钥 URI。 在“订阅”框中,指定包含此密钥的密钥保管库的订阅。
请务必正确复制密钥 URI。 建议使用提供的带密钥标识符的“复制到剪贴板”按钮。
使用包含版本部分的完整密钥 URI 指定加密密钥时,密钥不会自动轮换。 需要手动更新密钥,方法是在需要时指定新密钥或版本。 或者,删除密钥 URI 的版本部分即可自动轮换密钥。
选择“从密钥保管库中选择”。 在“密钥选取器”窗格上,浏览并从密钥保管库中选择密钥。
如果使用“密钥选取器”窗格指定加密密钥,则每当启用密钥的新版本时,都将自动轮换密钥。 详细了解如何启用加密密钥的自动轮换。
选择“保存”。
使用左侧菜单上的“备份作业”视图跟踪加密密钥分配的进度和状态。 状态将很快更改为“已完成”。 现在,保管库将使用指定的密钥作为 KEK 加密所有数据。
加密密钥更新也会记录在保管库的活动日志中。
使用 Set-AzRecoveryServicesVaultProperty 命令启用 CMK 加密,并分配或更新加密密钥。
示例:
$keyVault = Get-AzKeyVault -VaultName "testkeyvault" -ResourceGroupName "testrg"
$key = Get-AzKeyVaultKey -VaultName $keyVault -Name "testkey"
Set-AzRecoveryServicesVaultProperty -EncryptionKeyId $key.ID -KeyVaultSubscriptionId "xxxx-yyyy-zzzz" -VaultId $vault.ID
$enc=Get-AzRecoveryServicesVaultProperty -VaultId $vault.ID
$enc.encryptionProperties | fl
输出:
EncryptionAtRestType : CustomerManaged
KeyUri : testkey
SubscriptionId : xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx
LastUpdateStatus : Succeeded
InfrastructureEncryptionState : Disabled
使用 az backup vault encryption update 命令启用 CMK 加密,并分配或更新加密密钥。
示例:
az backup vault encryption update --encryption-key-id MyEncryptionKeyId --mi-system-assigned --resource-group MyResourceGroup --name MyVault
输出:
EncryptionAtRestType : CustomerManaged
KeyUri : testkey
SubscriptionId : xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx
LastUpdateStatus : Succeeded
InfrastructureEncryptionState : Disabled
想要更新或更改加密密钥时,此过程完全相同。 如果要更新和使用其他密钥保管库(不同于当前使用的密钥保管库)中的密钥,请确保:
- 密钥保管库与恢复服务保管库位于同一区域。
- 已对密钥保管库启用软删除和清除保护。
- 恢复服务保管库具有访问密钥保管库所需的权限。
备份到通过客户管理的密钥加密的保管库
在配置备份保护之前,请确认已成功执行以下操作:
- 创建恢复服务保管库。
- 启用恢复服务保管库的系统分配的托管标识,或为保管库分配用户分配的托管标识。
- 向恢复服务保管库(或用户分配的托管标识)分配权限,以便从密钥保管库访问加密密钥。
- 为密钥保管库启用软删除和清除保护。
- 为恢复服务保管库分配有效的加密密钥。
此清单很重要,因为在将项配置(或试图配置)为备份到非 CMK 加密的保管库,则无法对其启用 CMK 加密。 它将继续使用 PMK。
配置通过 CMK 加密的恢复服务保管库并对其执行备份的过程,与配置使用 PMK 的保管库并对其执行备份的过程相同。 体验不变。 对于 Azure VM 备份以及 VM 内的工作负载(例如 SAP HANA 或 SQL Server 数据库)备份,情况同样如此。
从备份还原数据
从 VM 备份还原数据
可以按照本文所述的步骤还原恢复服务保管库中存储的数据。 从通过 CMK 加密的恢复服务保管库还原时,可以选择使用磁盘加密集 (DES) 对还原的数据加密。
本部分所述的体验仅适用于从 CMK 加密的保管库还原数据的情况。 从不使用 CMK 加密的保管库还原数据时,将通过 PMK 对还原的数据进行加密。 如果从即时恢复快照进行还原,则会通过用于加密源磁盘的机制来加密还原的数据。
还原磁盘或 VM
从“快照”恢复点恢复磁盘或 VM 时,将使用用于加密源 VM 磁盘的 DES 对还原的数据进行加密。
从“恢复类型”为“保管库”的恢复点还原磁盘或 VM 时,可以选择使用指定的 DES 对还原的数据加密。 或者,可以在不指定 DES 的情况下继续还原数据。 在这种情况下,将应用 VM 上的加密设置。
在跨区域还原期间,将启用了 CMK 的 Azure VM(这些虚拟机未在启用了 CMK 的恢复服务保管库中备份)还原为次要区域中未启用 CMK 的 VM。
可以不考虑启动还原时所做的选择,在还原完成后再对还原的磁盘或 VM 加密。
从保管库恢复点还原时选择磁盘加密集
选择客户端:
若要在还原窗格的“加密设置”下指定 DES,请执行以下步骤:
对于“使用密钥加密磁盘?”,请选择“是”。
在“加密集”下拉列表中,选择要用于还原的磁盘的 DES。 确保有权访问 DES。
注意
如果你正在进行跨区域还原,则支持在还原时选择 DES。 但是,如果要还原使用 Azure 磁盘加密的 VM,目前不支持此操作。
将 Get-AzRecoveryServicesBackupItem 命令与参数 -DiskEncryptionSetId <string>
结合使用,指定 DES 用于对还原的磁盘进行加密。 有关从 VM 备份还原磁盘的详细信息,请参阅本文。
示例:
$namedContainer = Get-AzRecoveryServicesBackupContainer -ContainerType "AzureVM" -Status "Registered" -FriendlyName "V2VM" -VaultId $vault.ID
$backupitem = Get-AzRecoveryServicesBackupItem -Container $namedContainer -WorkloadType "AzureVM" -VaultId $vault.ID
$startDate = (Get-Date).AddDays(-7)
$endDate = Get-Date
$rp = Get-AzRecoveryServicesBackupRecoveryPoint -Item $backupitem -StartDate $startdate.ToUniversalTime() -EndDate $enddate.ToUniversalTime() -VaultId $vault.ID
$restorejob = Restore-AzRecoveryServicesBackupItem -RecoveryPoint $rp[0] -StorageAccountName "DestAccount" -StorageAccountResourceGroupName "DestRG" -TargetResourceGroupName "DestRGforManagedDisks" -DiskEncryptionSetId "testdes1" -VaultId $vault.ID
将 az backup restore restore-disks 命令与参数 -DiskEncryptionSetId <string>
结合使用,指定 DES 用于对还原的磁盘进行加密。
示例:
az backup recoverypoint list --container-name MyContainer --item-name MyItem --resource-group MyResourceGroup --vault-name MyVault
az backup restore restore-disks --container-name MyContainer --disk-encryption-set-id testdes1 --item-name MyItem --resource-group MyResourceGroup --rp-name MyRp --storage-account mystorageaccount --vault-name MyVault
还原文件
执行文件还原时,将使用用于加密目标位置的密钥对还原的数据进行加密。
还原 Azure VM 中的 SAP HANA/SQL 数据库
从 Azure VM 中运行的备份 SAP HANA 或 SQL Server 数据库还原时,将通过目标存储位置使用的加密密钥对还原的数据进行加密。 它可以是用于加密 VM 磁盘的 CMK 或 PMK。
其他主题
创建保管库时使用客户管理的密钥进行加密(预览版)
创建保管库时使用 CMK 进行加密目前为受限公共预览版功能,要求将订阅加入允许列表。 若要注册预览版,请填写表单并发送邮件到 AskAzureBackupTeam@microsoft.com 与我们联系。
如果订阅位于允许列表中,则将显示“备份加密”选项卡。 使用此选项卡可以在创建新的恢复服务保管库期间使用 CMK 对备份进行加密。
若要启用加密,请执行以下步骤:
在“备份加密”选项卡上,指定要用于加密的加密密钥和标识。 这些设置仅应用于 Azure 备份,并且是可选的。
对于“加密类型”,请选择“使用客户管理的密钥”。
若要指定用于加密的密钥,请选择“加密密钥”的相应选项。 你可以提供加密密钥的 URI,也可以浏览并选择密钥。
在使用“从密钥保管库中选择”选项指定密钥时,将自动启用加密密钥的自动轮换。 详细了解自动轮换。
对于“标识”,请指定用户分配的托管标识,以管理使用 CMK 进行的加密。 选择“选择”以浏览并选择所需标识。
添加标记(可选)并继续创建保管库。
启用加密密钥的自动轮换
若要指定用于加密备份的 CMK,请使用下列选项之一:
使用“从密钥保管库中选择”选项可启用所选密钥的自动轮换。 此选项免除了更新到下一版本的手动操作。 但是,使用此选项时:
- 密钥版本更新可能最多需要一小时才能生效。
- 密钥更新生效后,旧版本也应在至少一个后续备份作业中保持可用(处于已启用状态)。
使用完整密钥 URI 指定加密密钥时,密钥不会自动轮换。 需要手动执行密钥更新,方法是在需要时指定新密钥。 若要启用自动轮换,请移除密钥 URI 的版本组件。
使用 Azure Policy 来审核和强制通过客户管理的密钥进行加密(预览版)
借助 Azure 备份,可以使用 Azure Policy 来审核和强制通过 CMK 对恢复服务保管库中的数据进行加密。 可以使用审核策略来审核通过 CMK(在 2021 年 4 月 1 日之后启用)加密的保管库。
对于在 2021 年 4 月 1 日之前启用 CMK 加密的保管库,可能不会应用策略,或者可能显示误报结果。 也就是说,尽管启用了 CMK 加密,也可能将这些保管库报告为不合规。
若要使用此审核策略对 2021 年 4 月 1 日之前启用 CMK 加密的保管库进行审核,请使用 Azure 门户更新加密密钥。 此方法有助于升级到新模型。 如果你不想要更改加密密钥,请通过密钥 URI 或密钥选择选项再次提供相同的密钥。
警告
如果是使用 PowerShell 来管理用于备份的加密密钥,我们不建议从门户更新加密密钥。 如果从门户更新密钥,则在支持新模型的 PowerShell 更新可用之前,将无法使用 PowerShell 更新加密密钥。 但是,你可以继续从门户更新密钥。
常见问题
是否可以使用客户管理的密钥加密现有的备份保管库?
不是。 只能对新保管库启用 CMK 加密。 保管库不能包含任何受保护的项。 事实上,在启用通过 CMK 加密之前,不得尝试保护保管库中的任何项。
我尝试过向保管库中保护某一项,但失败了,保管库中仍不会包含任何受保护项。 能否为此保管库启用 CMK 加密?
不是。 保管库在过去不得尝试保护任何项。
我有一个使用 CMK 加密的保管库。 以后是否可以改回 PMK 加密,即使保管库中已有受保护的备份项?
不是。 启用 CMK 加密后,无法改回使用 PMK。 可以根据需要更改密钥。
Azure 备份的 CMK 加密是否也适用于 Azure Site Recovery?
不是。 本文仅讨论备份数据的加密。 对于 Azure Site Recovery,需要在服务中可用后单独设置属性。
我漏掉了本文中的一个步骤,并继续对数据源进行了保护。 是否仍然可以使用 CMK 加密?
如果未遵循本文的步骤操作并继续保护项,则保管库可能无法使用 CMK 加密。 建议在保护项之前使用此清单。
使用 CMK 加密会增加备份成本吗?
使用 CMK 进行备份加密不会产生任何额外费用。 但是,使用存储密钥的密钥保管库可能会继续产生费用。
后续步骤
Azure 备份中的安全功能概述