受控 HSM 災害復原

如果您的原始 HSM 遺失或因以下任何原因而無法使用,您可以建立完整的 HSM 複本:

  • 遭到刪除,繼而清除。
  • 所在區域發生嚴重失敗,導致所有成員分割區遭到終結。

如果您具有下列項目,您可以在相同或不同的區域中重新建立 HSM 執行個體:

  • 來源 HSM 的安全性網域
  • 將安全性網域加密的私密金鑰 (至少達仲裁數目)。
  • 來源 HSM 最新的完整 HSM 備份

以下是災害復原程序的步驟:

  1. 建立新的 HSM 執行個體。
  2. 啟動「安全性原則復原」。 系統會為安全性網域傳輸產生新的 RSA 金鑰組 (安全性網域交換金鑰),並以回應傳送,進而以 SecurityDomainExchangeKey (公開金鑰) 的形式供使用者下載。
  3. 建立並上傳「安全性網域傳輸檔案」。 您將需要為安全性網域加密的私密金鑰。 私密金鑰會在本機使用,且絕不會在此程序中傳輸至任何位置。
  4. 建立新 HSM 的備份。 您必須先備份才能進行還原,即使 HSM 是空的。 備份可讓您輕鬆地復原。
  5. 從來源 HSM 還原最新的 HSM 備份。

這些步驟可讓您手動將 HSM 的內容複寫至另一個區域。 HSM 名稱 (和服務端點 URI) 會有所不同,因此您可能必須變更應用程式設定,才能從不同的位置使用這些金鑰。

建立新的受控 HSM

使用 az keyvault create 命令建立受控 HSM。 此指令碼包含三個必要參數:資源群組名稱、HSM 名稱和地理位置。

您必須提供下列輸入,才能建立受控 HSM 資源:

  • HSM 的名稱。
  • 要放置在訂用帳戶中的資源群組。
  • Azure 位置。
  • 初始管理員的清單。

下列範例會在位於美國西部 3 位置的資源群組 ContosoResourceGroup 中,建立名為 ContosoMHSM2 的硬體安全模組 (HSM),並將目前登入的使用者設為唯一管理員。

oid=$(az ad signed-in-user show --query objectId -o tsv)
az keyvault create --hsm-name "ContosoMHSM2" --resource-group "ContosoResourceGroup" --location "westus3" --administrators $oid

注意

執行 create 命令可能需要幾分鐘的時間。 成功傳回之後,您即可啟動 HSM。

警告

受控 HSM 執行個體視為永遠使用中。 如果您選擇使用 --enable-purge-protection 旗標啟用清除保護,則需要支付整個保留期間的費用。

此命令的輸出會顯示您所建立之受控 HSM 的屬性。 兩個最重要屬性是:

  • 名稱:在此範例中,此名稱為 ContosoMHSM。 您將在其他 Key Vault 命令中使用此名稱。
  • hsmUri:在此範例中,URI 為 'https://contosomhsm2.managedhsm.azure.net.' 透過其 REST API 使用 HSM 的應用程式必須使用此 URI。

您的 Azure 帳戶現已取得在此受控 HSM 上執行任何作業的授權。 而且,沒有其他人已獲授權。

啟動安全性網域復原模式

在一般的建立程序中,我們會在此時初始化並下載新的 HSM 安全性網域。 不過,由於要執行災害復原程序,我們會要求 HSM 進入安全性網域復原模式,並改為下載安全性網域交換金鑰。 安全性網域交換金鑰是一個 RSA 公開金鑰,用來在安全性網域上傳至 HSM 之前予以加密。 對應的私密金鑰會在 HSM 內受到保護,以確保您的安全性網域內容在傳輸期間安全無虞。

az keyvault security-domain init-recovery --hsm-name ContosoMHSM2 --sd-exchange-key ContosoMHSM2-SDE.cer

建立來源 HSM 的安全性網域上傳 Blob

針對此步驟,您將需要:

  • 您在上一個步驟中下載的安全性網域交換金鑰。
  • 來源 HSM 的安全性網域。
  • 用來加密安全性網域的私密金鑰 (至少達仲裁數目)。

az keyvault security-domain restore-blob 命令會執行下列作業:

  • 使用您提供的私密金鑰將來源 HSM 的安全性網域解密。
  • 使用我們在上一個步驟中下載的安全性網域 Exchange 金鑰,建立以加密的安全性網域上傳 Blob

此步驟可以離線執行。

在下列範例中,我們使用 ContosoMHSM 的安全性網域、對應的私鑰的 3 個,以及安全性網域 Exchange 密鑰來建立和下載加密的 Blob,我們將用來上傳至 ContosoMHSM2,該 Blob 正在等候接收安全性網域。

az keyvault security-domain restore-blob --sd-exchange-key ContosoMHSM2-SDE.cer --sd-file ContosoMHSM-SD.json --sd-wrapping-keys cert_0.key cert_1.key cert_2.key --sd-file-restore-blob restore_blob.json 

將安全性網域上傳 Blob 至目的地 HSM

我們現在使用在上一個步驟中建立的安全性網域上傳 Blob,並將它上傳至目的地 HSM,以完成安全性網域復原。 旗 --restore-blob 標可用來防止在在線環境中公開金鑰。

az keyvault security-domain upload --hsm-name ContosoMHSM2 --sd-file restore_blob.json --restore-blob

現在,來源 HSM (ContosoMHSM) 和目的地 HSM (ContosoMHSM2) 具有相同的安全性網域。 我們現在可以將來源 HSM 的完整備份還原至目的地 HSM。

備份和還原

在執行完整的 HSM 還原之前,最好先進行完整備份,如此,萬一還原發生問題時,您將有還原點可供使用。 您可以使用下列兩種方法之一來執行此動作:使用者指派的受控識別或 SAS 令牌。

建立新 HSM 的備份 (作為還原點)

若要建立 HSM 備份,您需要以下項目:

  • 將用來儲存備份的儲存體帳戶
  • 此儲存體帳戶中的 Blob 儲存體容器;備份程序會在其中建立新資料夾來儲存加密備份
  • 使用者指派的受控識別,在記憶體帳戶或具有許可權為 『crdw』 的記憶體帳戶或記憶體容器 SAS 令牌上具有 儲存體 Blob 數據參與者角色

我們將 az keyvault backup 命令用於記憶體容器 mhsmbackupcontainer 中的 HSM 備份,其位於下列範例中的記憶體帳戶 mhsmdemobackup 中。

如果使用使用者指派的受控識別方法,我們會使用 參數指定使用者指派的受控識別 --mi-user-assigned ,並在下列範例中撰寫備份之前,將該識別與受控 HSM 產生關聯。

az keyvault update-hsm --hsm-name ContosoMHSM2 --mi-user-assigned "/subscriptions/subid/resourcegroups/mhsmrgname/providers/Microsoft.ManagedIdentity/userAssignedIdentities/userassignedidentityname"
az keyvault backup start --use-managed-identity true --hsm-name ContosoMHSM2 --storage-account-name mhsmdemobackup --blob-container-name mhsmbackupcontainer

從來源 HSM 還原備份

在此步驟中,您需要以下項目:

  • 來源 HSM 的備份儲存所在的儲存體帳戶和 Blob 容器。
  • 您要從中還原備份的資料夾名稱。 如果您建立定期備份,此容器內將會有許多資料夾。

我們會使用 az keyvault restore 命令至新的 HSM ContosoMHSM2,使用我們嘗試還原的來源 MHSM 備份,其位於下列範例中記憶體帳戶 ContosoBackup 的記憶體容器 mhsmdemobackupcontainer 資料夾中的 mhsm-ContosoMHSM-2020083120161860

如果使用使用者指派的受控識別方法,我們會將 --use-managed-identity pramater 設定為 「true」。。

az keyvault restore start --hsm-name ContosoMHSM2 --storage-account-name ContosoBackup --blob-container-name mhsmdemobackupcontainer --backup-folder mhsm-ContosoMHSM-2020083120161860 --use-managed-identity true

現在,您已完成完整的災害復原程序。 取得備份時的來源 HSM 內容會複製到目的地 HSM,包括所有的金鑰、版本、屬性、標籤和角色指派。

下一步