你当前正在访问 Microsoft Azure Global Edition 技术文档网站。 如果需要访问由世纪互联运营的 Microsoft Azure 中国技术文档网站,请访问 https://docs.azure.cn

完整备份和还原以及选择性密钥还原

注意

此功能仅适用于资源类型托管 HSM。

托管 HSM 支持创建 HSM 全部内容(包括所有密钥、版本、属性、标记和角色分配)的完整备份。 备份使用与 HSM 的安全域关联的加密密钥进行加密。

备份是一种数据平面操作。 启动备份操作的调用方必须具有执行 dataAction“Microsoft.KeyVault/managedHsm/backup/start/action”的权限。

只有以下内置角色具有执行完整备份的权限:

  • 托管 HSM 管理员
  • 托管 HSM 备份

可通过两种方法执行完整备份/还原:

  1. 将用户分配的托管标识 (UAMI) 分配给托管 HSM 服务。 可以使用用户指定的托管标识备份和还原 MHSM,无论存储帐户是否启用了公用网络访问或专用网络访问。 如果存储帐户位于专用终结点后面,则 UAMI 方法适用于受信任的服务旁路,以允许备份和还原。
  2. 具有权限“crdw”的存储容器 SAS 令牌。 使用存储容器 SAS 令牌进行备份和恢复需要存储帐户启用公用网络访问。

必须提供以下信息才能执行完整备份:

  • HSM 名称或 URL
  • 存储帐户名称
  • 存储帐户 blob 存储容器
  • 用户分配的托管标识或具有权限 'crdw' 的存储容器 SAS 令牌

Azure Cloud Shell

Azure 托管 Azure Cloud Shell(一个可通过浏览器使用的交互式 shell 环境)。 可以将 Bash 或 PowerShell 与 Cloud Shell 配合使用来使用 Azure 服务。 可以使用 Cloud Shell 预安装的命令来运行本文中的代码,而不必在本地环境中安装任何内容。

若要启动 Azure Cloud Shell,请执行以下操作:

选项 示例/链接
选择代码或命令块右上角的“试用”。 选择“试用”不会自动将代码或命令复制到 Cloud Shell。 显示 Azure Cloud Shell 的“试用”示例的屏幕截图。
转到 https://shell.azure.com 或选择“启动 Cloud Shell”按钮可在浏览器中打开 Cloud Shell。 用于启动 Azure Cloud Shell 的按钮。
选择 Azure 门户右上角菜单栏上的 Cloud Shell 按钮。 显示 Azure 门户中的 Cloud Shell 按钮的屏幕截图

若要使用 Azure Cloud Shell,请执行以下操作:

  1. 启动 Cloud Shell。

  2. 选择代码块(或命令块)上的“复制”按钮以复制代码或命令。

  3. 在 Windows 和 Linux 上选择 Ctrl+Shift+V,或在 macOS 上选择 Cmd+Shift+V 将代码或命令粘贴到 Cloud Shell 会话中。

  4. 选择“Enter”运行代码或命令。

使用用户分配的托管标识进行备份和还原的先决条件:

  1. 确保已有 Azure CLI 2.56.0 或更高版本。 运行 az --version 即可查找版本。 如需进行安装或升级,请参阅安装 Azure CLI
  2. 创建用户分配的托管标识。
  3. 创建存储帐户(或使用现有存储帐户)。
  4. 如果存储帐户上的公用网络访问遭禁用,请在“网络”选项卡的“异常”下对存储帐户启用受信任的服务跳过。
  5. 通过转到门户上的“访问控制”选项卡 ->“添加角色分配”,为在步骤 2 中创建的用户分配的托管标识提供“存储 Blob 数据参与者”角色访问权限。 然后选择“托管标识”,并选择在步骤 2 中创建的托管标识 -> 查看 + 分配
  6. 创建托管 HSM 并将托管标识与以下命令相关联。
    az keyvault create --hsm-name mhsmdemo2 –l mhsmlocation -- retention-days 7 --administrators "initialadmin" --mi-user-assigned "/subscriptions/subid/resourcegroups/mhsmrgname/providers/Microsoft.ManagedIdentity/userAssignedIdentities/userassignedidentitynamefromstep2" 
    

如果具有现有的托管 HSM,请通过更新 MHSM 将托管标识与以下命令关联。

 az keyvault update-hsm --hsm-name mhsmdemo2 --mi-user-assigned "/subscriptions/subid/resourcegroups/mhsmrgname/providers/Microsoft.ManagedIdentity/userAssignedIdentities/userassignedidentitynamefromstep2" 

完整备份

备份是长期操作,但会立即返回作业 ID。 可使用此作业 ID 检查备份过程的状态。 备份过程会在指定容器中创建一个文件夹,该文件夹具有以下命名模式 mhsm-{HSM_NAME}-{YYYY}{MM}{DD}{HH}{mm}{SS},其中 HSM_NAME 是要备份的托管 HSM 的名称,而 YYYY、MM、DD、HH、MM、mm 和 SS 是收到备份命令时 UTC 日期/时间的年、月、日、时、分和秒。

在备份过程中,HSM 可能不会以完整的吞吐量运行,因为某些 HSM 分区将忙于执行备份操作。

使用用户分配的托管标识备份 HSM

az keyvault backup start --use-managed-identity true --hsm-name mhsmdemo2 --storage-account-name mhsmdemobackup --blob-container-name mhsmdemobackupcontainer

使用 SAS 令牌备份 HSM

# time for 500 minutes later for SAS token expiry

end=$(date -u -d "500 minutes" '+%Y-%m-%dT%H:%MZ')

# Get storage account key

skey=$(az storage account keys list --query '[0].value' -o tsv --account-name mhsmdemobackup --subscription {subscription-id})

# Create a container

az storage container create --account-name  mhsmdemobackup --name mhsmdemobackupcontainer  --account-key $skey

# Generate a container sas token

sas=$(az storage container generate-sas -n mhsmdemobackupcontainer --account-name mhsmdemobackup --permissions crdw --expiry $end --account-key $skey -o tsv --subscription {subscription-id})

# Backup HSM

az keyvault backup start --hsm-name mhsmdemo2 --storage-account-name mhsmdemobackup --blob-container-name mhsmdemobackupcontainer --storage-container-SAS-token $sas --subscription {subscription-id}

完整还原

完整还原支持使用以前的备份完整还原 HSM 的内容,包括所有密钥、版本、属性、标记和角色分配。 当前存储在 HSM 中的所有内容都将被擦除,HSM 将返回到创建源备份时所处的状态。

重要

完整还原是一种破坏性很强的操作。 因此,必须在执行 restore 操作前至少 30 分钟已对要恢还原的 HSM 完成完整备份。

还原是一种数据平面操作。 启动还原操作的调用方必须具有执行 dataAction“Microsoft.KeyVault/managedHsm/restore/start/action”的权限。 在其中创建备份的源 HSM 以及将在其中执行还原的目标 HSM 必须具有相同的安全域。 详细了解托管 HSM 安全域

有 2 种方法可以执行完全还原。 若要执行完整还原,必须提供以下信息:

  • HSM 名称或 URL
  • 存储帐户名称
  • 存储帐户 blob 容器
  • 用户分配的托管标识或具有权限 rl 的存储容器 SAS 令牌
  • 存储源备份所在的存储容器文件夹名称

还原是长期操作,但会立即返回作业 ID。 可使用此作业 ID 检查还原过程的状态。 在还原过程中,HSM 将进入还原模式,所有数据平面命令(除检查还原状态之外)都将禁用。

使用用户分配的托管标识还原 HSM

az keyvault restore start --hsm-name mhsmdemo2 --storage-account-name mhsmdemobackup --blob-container-name mhsmdemobackupcontainer --backup-folder mhsm-backup-foldername --use-managed-identity true

使用 SAS 令牌还原 HSM

# time for 500 minutes later for SAS token expiry

end=$(date -u -d "500 minutes" '+%Y-%m-%dT%H:%MZ')

# Get storage account key

skey=$(az storage account keys list --query '[0].value' -o tsv --account-name mhsmdemobackup --subscription {subscription-id})

# Generate a container sas token

sas=$(az storage container generate-sas -n mhsmdemobackupcontainer --account-name mhsmdemobackup --permissions rl --expiry $end --account-key $skey -o tsv --subscription {subscription-id})

# Restore HSM

az keyvault restore start --hsm-name mhsmdemo2 --storage-account-name mhsmdemobackup --blob-container-name mhsmdemobackupcontainer --storage-container-SAS-token $sas --backup-folder mhsm-mhsmdemo-2020083120161860

选择性密钥还原

通过选择性密钥还原,可以将单个密钥及其所有密钥版本从以前的备份还原到 HSM。 必须清除密钥才能使选择性密钥还原正常工作。 如果尝试恢复软删除的密钥,请使用密钥恢复。 详细了解密钥恢复

使用用户分配的托管标识选择性密钥还原

az keyvault restore start --hsm-name mhsmdemo2 --storage-account-name mhsmdemobackup --blob-container-name mhsmdemobackupcontainer --backup-folder mhsm-backup-foldername --use-managed-identity true --key-name rsa-key2

使用 SAS 令牌的选择性密钥还原

az keyvault restore start --hsm-name mhsmdemo2 --storage-account-name mhsmdemobackup --blob-container-name mhsmdemobackupcontainer --storage-container-SAS-token $sas --backup-folder mhsm-mhsmdemo-2020083120161860 -–key-name rsa-key2

后续步骤