Nota:
El acceso a esta página requiere autorización. Puede intentar iniciar sesión o cambiar directorios.
El acceso a esta página requiere autorización. Puede intentar cambiar los directorios.
如果由于以下任何原因导致原始 HSM 丢失或不可用,你可能希望创建精确的 HSM 副本:
- 它被删除后又彻底清除。
- 该区域的灾难性故障已导致所有成员分区遭到破坏。
如果具备以下条件,你可以在相同或不同区域中重新创建 HSM 实例:
以下是灾难恢复过程的步骤:
- 新建 HSM 实例。
- 激活“安全域恢复”。 为安全域传输生成新的 RSA 密钥对(Security Domain Exchange Key),并在响应中发送,该密钥作为 SecurityDomainExchangeKey(公钥)下载。
- 创建并上传“安全域传输文件”。 需要加密安全域的私钥。 私钥在本地使用,在此过程中绝不会转移到任何位置。
- 获取新 HSM 的备份。 进行任何还原之前都需要备份(即使 HSM 为空)。 使用备份能够轻松地实现回滚。
- 从源 HSM 恢复最近的 HSM 备份。
这些步骤使你能够将 HSM 的内容手动复制到另一个区域。 HSM 名称(和服务终结点 URI)不同,因此必须更改应用程序配置,以便从不同的位置使用这些密钥。
新建托管 HSM
使用 az keyvault create 命令创建托管 HSM。 此脚本包含 3 个必需参数:资源组名称、HSM 名称和地理位置。
必须提供以下输入才能创建托管 HSM 资源:
- HSM 的名称。
- 放置在您订阅中的资源组。
- Azure 的位置。
- 初始管理员的列表。
以下示例在资源组<destination-hsm-name>中创建一个名为 <resource-group>HSM 的 HSM,该 HSM 驻留在指定位置,而当前已登录的用户是唯一的管理员。
oid=$(az ad signed-in-user show --query id -o tsv)
az keyvault create --hsm-name "<destination-hsm-name>" --resource-group "<resource-group>" --location "<location>" --administrators $oid
注意
运行 create 命令可能需要几分钟的时间。 一旦成功返回,您就可以激活您的硬件安全模块 (HSM)。
警告
托管的 HSM 实例被视为始终处于使用状态。 如果选择使用 --enable-purge-protection 标志启用清除保护,则会针对整个保留期计费。
此命令的输出会显示创建的托管 HSM 的属性。 两个最重要的属性是:
- 名称:指定的 HSM 名称。 你将使用此名称用于一些其他密钥保管库命令。
-
hsmUri:HSM 的 URI(例如
https://<hsm-name>.managedhsm.chinacloudapi.cn)。 通过其 REST API 使用 HSM 的应用程序必须使用此 URI。
您的 Azure 帐户现在有权执行此托管 HSM 上的任何操作。 到目前为止,尚未授权其他任何人。
激活“安全域恢复”模式
此时,在正常的创建过程中,需要进行初始化并下载 HSM 的新安全域。 但是,由于我们正在执行灾难恢复过程,因此我们请求 HSM 进入安全域恢复模式并改为下载安全域Exchange密钥。 安全域Exchange密钥是一个 RSA 公钥,用于在将安全域上传到 HSM 之前对其进行加密。 相应的私钥在 HSM 中受到保护,以确保安全域内容在传输过程中是安全的。
az keyvault security-domain init-recovery --hsm-name <destination-hsm-name> --sd-exchange-key <destination-hsm-name>-SDE.cer
创建源 HSM 的安全域上传数据块
在本步骤中,需要具备以下项:
- 在上一步中下载的安全域交换密钥。
- 源 HSM 的安全域。
- 至少达到法定人数的私钥被用于加密安全域。
az keyvault security-domain restore-blob 命令执行以下操作:
- 使用你提供的私钥解密源 HSM 的安全域。
- 创建使用我们在上一步中下载的安全域Exchange密钥加密的安全域上传 blob
该步骤可以离线执行。
在以下示例中,我们使用源 HSM 中的安全域、对应的 3 个私钥以及安全域交换密钥来创建加密 blob 并下载。我们将把该加密 blob 上传到正在等待接收安全域的目标 HSM。
az keyvault security-domain restore-blob --sd-exchange-key <destination-hsm-name>-SDE.cer --sd-file <source-hsm-name>-SD.json --sd-wrapping-keys cert_0.key cert_1.key cert_2.key --sd-file-restore-blob restore_blob.json
将数据块上传至安全域,并传输至目标 HSM
现在,我们使用在上一步中创建的安全域上传 blob,并将其上传到目标 HSM 以完成安全域恢复。
--restore-blob 标志用于防止在联机环境中公开密钥。
az keyvault security-domain upload --hsm-name <destination-hsm-name> --sd-file restore_blob.json --restore-blob
现在,源 HSM 和目标 HSM 具有相同的安全域。 我们可以立即将完整备份从源 HSM 还原到目标 HSM。
备份和还原
建议在执行完整的 HSM 还原之前,始终进行完整备份,以确保在还原过程中出现问题时有一个可靠的还原点。 可以使用以下两种方法之一执行此操作:用户分配的托管标识或 SAS 令牌。
创建新 HSM 的备份(用作还原点)
若要创建 HSM 备份,需要具备以下项:
- 用于存储备份的存储帐户
- 此存储帐户中的 Blob 存储容器,备份过程将在其中新建文件夹,用于存储加密备份
- 在存储帐户上具有存储 Blob 数据参与者角色的用户分配的托管标识或具有“crdw”权限的存储容器 SAS 令牌
我们将 az keyvault backup 命令用于存储容器 <container-name>中的 HSM 备份,该命令位于以下示例中的存储帐户 <storage-account-name> 中。
在以下示例中,如果使用用户分配的托管标识方法,我们会使用 --mi-user-assigned 参数指定用户分配的托管标识,并将其关联到托管 HSM,然后再写入备份。
az keyvault update-hsm --hsm-name <destination-hsm-name> --mi-user-assigned "/subscriptions/<subscription-id>/resourcegroups/<resource-group>/providers/Microsoft.ManagedIdentity/userAssignedIdentities/<managed-identity-name>"
az keyvault backup start --use-managed-identity true --hsm-name <destination-hsm-name> --storage-account-name <storage-account-name> --blob-container-name <container-name>
从源 HSM 恢复备份
对于此步骤,需要以下项:
- 用于存储源 HSM 备份的存储帐户和 Blob 容器。
- 要从其中还原备份的文件夹的名称。 如果创建常规备份,此容器中将产生许多文件夹。
我们使用 az keyvault restore 命令将源 MHSM 的备份恢复到目标 HSM,如下面的示例中所示,该备份在存储帐户<backup-folder>的存储容器<container-name>中,文件夹名称为<storage-account-name>。
如果使用用户分配的托管标识方法,我们将参数设置为 --use-managed-identity “true”。
az keyvault restore start --hsm-name <destination-hsm-name> --storage-account-name <storage-account-name> --blob-container-name <container-name> --backup-folder <backup-folder> --use-managed-identity true
现在,你已完成了完整的灾难恢复过程。 进行备份时,源 HSM 的内容将复制到目标 HSM,包括所有密钥、版本、属性、标记和角色分配。
后续步骤
- 若要详细了解安全域,请参阅关于托管 HSM 安全域
- 按照确保安全的Azure托管HSM部署