使用 Azure 金鑰保存庫 為現有的 Azure Cosmos DB 帳戶設定客戶管理的密鑰

適用於:NoSQL MongoDB Gremlin Table

現在,在建立新的 Azure Cosmos DB 帳戶時,使用客戶自控金鑰為待用資料啟用第二層加密,已正式推出一段時間。 很自然地,下一步就是能夠在現有的 Azure Cosmos DB 帳戶上啟用 CMK。

這項功能不需要將資料遷移至新帳戶來啟用 CMK。 這有助於改善客戶的安全性和合規性狀態。

啟用 CMK 會啟動背景的非同步程序,將帳戶中的所有現有資料加密,同時先加密新的傳入資料,然後再加以保存。 不需要等候非同步作業成功。 啟用程序會取用未使用的/備用 RU,使其不會影響您的讀取/寫入工作負載。 一旦您的帳戶加密後,您就可以參考此連結來進行容量規劃。

在現有的帳戶上啟用 CMK 以開始使用

重要

徹底完成必要條件一節。 這些都是重要的考慮。

必要條件

為新帳戶設定客戶自控金鑰時所需的所有必要步驟都適用於在現有帳戶上啟用 CMK。 請參閱這裡的步驟

請務必注意,在 Azure Cosmos DB 帳戶上啟用加密會增加文件識別碼的小型額外負荷,將文件識別碼的大小上限限製為 990 位元組,而不是 1024 個字節。 如果您的帳戶有任何標識符大於990位元組的檔,加密程式將會失敗,直到刪除這些文件為止。

若要確認您的帳戶是否符合規範,您可以使用這裡裝載的控制台應用程式來掃描您的帳戶。 請確定您使用的是 『sqlEndpoint』 帳戶屬性中的端點,不論已選取 API 為何。

如果您想要在移轉期間停用此服務的伺服器端驗證,請連絡支持人員。

在現有帳戶上啟用 CMK 的步驟

若要在現有帳戶上啟用 CMK,請使用 ARM 範本在 keyVaultKeyUri 屬性中設定 Key Vault 金鑰識別碼來更新帳戶,就像在新帳戶上啟用 CMK 一樣。 您可以透過發出具有下列承載的 PATCH 呼叫來完成此步驟:

    {
        "properties": {
        "keyVaultKeyUri": "<key-vault-key-uri>"
        }
    }

啟用 CMK 的此 CLI 命令輸出會等候資料加密完成。

    az cosmosdb update --name "testaccount" --resource-group "testrg" --key-uri "https://keyvaultname.vault.azure.net/keys/key1"

在具有連續備份的現有 Azure Cosmos DB 帳戶或分析存放區帳戶上啟用 CMK 的步驟

若要在已啟用連續備份和時間點還原的現有帳戶上啟用 CMK,我們必須遵循一些額外的步驟。 遵循步驟 1 到步驟 5,然後依照指示在現有帳戶上啟用 CMK。

注意

系統指派的身分識別和連續備份模式目前處於公開預覽狀態,未來可能會變更。 目前,在連續備份帳戶上啟用 CMK 僅支援使用者指派的受控識別。

  1. 設定 Cosmos 帳戶的受控識別:使用 Microsoft Entra ID 為 Azure Cosmos DB 帳戶的設定受控識別

  2. 更新 Cosmos 帳戶,將預設身分識別設定為指向上一個步驟中新增的受控識別

    若是系統受控識別:

    az cosmosdb update --resource-group $resourceGroupName  --name $accountName  --default-identity "SystemAssignedIdentity=subscriptions/00000000-0000-0000-0000-00000000/resourcegroups/MyRG/providers/Microsoft.ManagedIdentity/ systemAssignedIdentities/MyID"
    

    若是使用者受控識別:

    az cosmosdb update -n $sourceAccountName -g $resourceGroupName --default-identity "UserAssignedIdentity=subscriptions/00000000-0000-0000-0000-00000000/resourcegroups/MyRG/providers/Microsoft.ManagedIdentity/userAssignedIdentities/MyID"
    
  3. 將 Keyvault 設定為此處文件中提供的內容

  4. 針對在上一個步驟中設定的預設身分識別,在 keyvault 中新增存取原則

  5. 更新 Cosmos 帳戶以設定 keyvault URI,此更新會觸發在帳戶上啟用 CMK

    az cosmosdb update --name $accountName --resource-group $resourceGroupName --key-uri $keyVaultKeyURI  
    

已知的限制

  • 我們不支援在現有的 Azure Cosmos DB for Apache Cassandra 帳戶上啟用 CMK。
  • 啟用 CMK 僅適用於 Cosmos DB 帳戶層級,不適用於集合。
  • 我們不支援在適用具體化檢視及所有版本和刪除變更摘要模式的現有帳戶上啟用 CMK。
  • 在啟用 CMK 之前,請確定帳戶的文件沒有大於 990 個位元組的大型識別碼。 若非如此,您將會收到錯誤,因為加密後可支援的上限為 1024 個字元組。
  • 加密現有資料時會封鎖控制平面動作,例如「新增區域」。 加密完成之後,這些動作就會解除封鎖,而且可以立即使用。

監視所產生加密的進度

在現有帳戶上啟用 CMK 是非同步作業,其啟動背景工作來加密所有現有資料。 因此,啟用 CMK 的 REST API 要求會在其回應中提供 "Azure-AsyncOperation" URL。 使用 GET 要求輪詢此 URL 會傳回整體作業 (最終會成功) 的狀態。 本文有此機制的完整說明。

Cosmos DB 帳戶可以繼續使用,而且資料可以繼續寫入,而不需要等待非同步作業成功。 啟用 CMK 的 CLI 命令會等候資料加密完成。

如果您有進一步的問題,請連絡 Microsoft 支援服務。

常見問題集

決定加密時間長短的因素為何?

啟用 CMK 是非同步作業,取決於是否有足夠的未使用 RU。 建議您在離峰時段啟用 CMK,如果恰當的話,您可以事先增加 RU 來加速加密。 這也是資料大小的直接函式。

我們需要為停機做好準備嗎?

啟用 CMK 會啟動背景非同步程序來加密所有資料。 不需要等候非同步作業成功。 Azure Cosmos DB 帳戶可用於讀取和寫入,不需要停機。

觸發 CMK 後,您就可以提高 RU 嗎?

建議您在觸發 CMK 之前先提高 RU。 觸發 CMK 會封鎖某些控制平面作業,直到加密完成為止。 此封鎖可能會阻止使用者在觸發 CMK 後增加 RU。

觸發 CMK 之後,是否有辦法反轉加密或停用加密?

一旦觸發使用 CMK 的資料加密程序後,就無法還原。

在現有帳戶上使用 CMK 啟用加密是否會對資料大小和讀取/寫入造成影響?

如您所預期,啟用 CMK 會使資料大小和 RU 稍微增加,以因應額外的加密/解密處理。

您應該在啟用 CMK 之前先備份資料嗎?

啟用 CMK 不會有任何資料遺失威脅。

舊備份是否會成為定期備份加密的一部分?

否。 舊的定期備份不會加密。 啟用 CMK 之後新產生的備份才會加密。

適用連續備份的現有帳戶上會發生什麼事?

開啟 CMK 時,也會開啟連續備份的加密。 一旦開啟 CMK,未來還原的所有帳戶都會啟用 CMK。

如果在已啟用 PITR 的帳戶上啟用 CMK,且將帳戶還原至停用 CMK 的時間,會發生什麼事?

在此情況下,CMK 會在還原的目標帳戶上明確啟用,原因如下:

  • 在帳戶上啟用 CMK 之後,就沒有選項可停用 CMK。
  • 此行為與目前使用定期備份還原已啟用 CMK 的設計一致

如果使用者在 CMK 移轉進行時撤銷金鑰,會發生什麼事?

觸發 CMK 加密時會檢查金鑰的狀態。 如果 Azure Key Vault 中的金鑰處於良好狀態,就會啟動加密,且程序會完成而沒有進一步的檢查。 即使金鑰遭到撤銷,或 Azure Key Vault 遭到刪除或無法使用,加密程序仍會成功。

我們可以在現有的生產帳戶上啟用 CMK 加密嗎?

是。 徹底完成必要條件一節。 建議您先在非生產帳戶上測試所有案例,一旦熟悉,您就可以考慮生產帳戶。

下一步