分享方式:


使用 Azure Key Vault 和受控識別,為您的 Azure Batch 帳戶設定客戶自控金鑰

根據預設,Azure Batch 會使用平台代控金鑰來加密 Azure Batch 服務中儲存的所有客戶資料,例如憑證、作業/工作中繼資料。 您可以選擇性地使用自己的金鑰 (也就是客戶自控金鑰) 來加密 Azure Batch 中儲存的資料。

您提供的金鑰必須在 Azure Key Vault 中產生,而且必須使用 Azure 資源的受控識別加以存取。

有兩種類型的受控識別:系統指派和使用者指派

您可以使用系統指派的受控識別來建立 Batch 帳戶,或建立個別使用者指派的受控識別,其可以存取客戶自控金鑰。 檢閱比較表以了解差異,並考慮哪一個選項最適合您的解決方案。 例如,如果您想要使用相同的受控識別來存取多個 Azure 資源,則需要使用者指派的受控識別。 如果不是,與 Batch 帳戶相關聯的系統指派受控識別可能就已足夠。 使用一個使用者指派的受控識別,也可讓您選擇在建立 Batch 帳戶時強制執行客戶自控金鑰,如下所示。

使用系統指派的受控識別建立 Batch 帳戶

如果不需要個別使用者指派的受控識別,您可以在建立 Batch 帳戶時啟用系統指派的受控識別。

重要

為 Batch 帳戶建立系統指派的受控識別以用於客戶資料加密,如本文所述,無法作為 Batch 集區上使用者指派的受控識別。 如果您想要在 Batch 帳戶和 Batch 集區上使用相同的受控識別,請改用一般使用者指派的受控識別。

Azure 入口網站

Azure 入口網站中,當您建立 Batch 帳戶時,請在 [進階] 索引標籤下的身分識別類型中挑選 [系統指派]

具有系統指派身分識別類型之新 Batch 帳戶的螢幕快照。

建立帳戶之後,您可以在 [屬性] 區段下的 [身分識別主體識別碼] 欄位中找到唯一的 GUID。 [身分識別類型] 將顯示 System assigned

顯示 [身分識別主體標識符] 字段中唯一 GUID 的螢幕快照。

您需要此值,才能將 Key Vault 的存取權授與此 Batch 帳戶。

Azure CLI

建立新的 Batch 帳戶時,請為 --identity 參數指定 SystemAssigned

resourceGroupName='myResourceGroup'
accountName='mybatchaccount'

az batch account create \
    --name $accountName \
    --resource-group $resourceGroupName \
    --locations regionName='West US 2' \
    --identity 'SystemAssigned'

建立帳戶之後,您可以驗證是否已在此帳戶上啟用系統指派的受控識別。 請務必記下 PrincipalId,因為需要此值,才能將 Key Vault 的存取權授與此 Batch 帳戶。

az batch account show \
    --name $accountName \
    --resource-group $resourceGroupName \
    --query identity

注意

在 Batch 帳戶中建立的系統指派受控識別,僅用於從 Key Vault 擷取客戶自控金鑰。 此身分識別不適用於 Batch 集區。 若要在集區中使用一個使用者指派的受控識別,請參閱在 Batch 集區中設定受控識別

建立使用者指派的受控識別

如果您喜歡,則可以建立使用者指派的受控識別,以用來存取您的客戶自控金鑰。

您需要此身分識別的用戶端識別碼值,才能存取 Key Vault。

設定您的 Azure Key Vault 執行個體

將在其中產生金鑰的 Azure Key Vault 必須在與 Batch 帳戶相同的租用戶中建立。 它不需位於相同的資源群組,甚至無需位於相同的訂用帳戶。

建立 Azure Key Vault

使用客戶自控金鑰為 Azure Batch 建立 Azure Key Vault 執行個體,請確定同時已啟用 [虛刪除] 和 [清除保護]

金鑰保存庫 建立畫面的螢幕快照。

將存取原則新增至您的 Azure Key Vault 執行個體

在 Azure 入口網站中,於建立 Key Vault 之後,請在 [設定] 底下的 [存取原則] 中,使用受控識別新增 Batch 帳戶存取權。 在 [金鑰權限] 底下,選取 [取得]、[包裝金鑰] 和 [將金鑰解除包裝]

顯示 [新增存取原則] 畫面的螢幕快照。

在 [主體] 下的 [選取] 欄位中,填入下列其中一項:

  • 若為系統指派的受控識別:輸入您先前擷取的 principalId 或 Batch 帳戶的名稱。
  • 若為使用者指派的受控識別:輸入您先前擷取的用戶端識別碼或使用者指派的受控識別名稱。

主體畫面的螢幕快照。

在 Azure Key Vault 中產生金鑰

在 Azure 入口網站中,移至 [金鑰] 區段中的 Key Vault 執行個體鑰,選取 [產生/匯入]。 將 [金鑰類型] 選為 RSA,並選取至少為 2048 位元的 [RSA 金鑰大小]。 目前不支援 EC 金鑰類型作為 Batch 帳戶上的客戶自控金鑰。

建立金鑰

建立金鑰之後,按一下新建立的金鑰和目前版本、複製 [屬性] 區段下的 [金鑰識別碼]。 確定在 [允許的作業] 底下,已同時核取 [包裝金鑰][解除包裝金鑰]

在 Batch 帳戶上啟用客戶自控金鑰

一旦必要條件已就緒,您就可以在 Batch 帳戶上啟用客戶自控金鑰。

Azure 入口網站

Azure 入口網站中,移至 [Batch 帳戶] 頁面。 在 [加密] 區段底下,啟用 [客戶自控金鑰]。 您可以直接使用金鑰識別碼,也可以選取金鑰保存庫,然後按一下 [選取金鑰保存庫和金鑰]

顯示 [加密] 區段和啟用客戶管理金鑰選項的螢幕快照

Azure CLI

在使用系統指派的受控識別建立 Batch 帳戶,並授與 Key Vault 的存取權之後,請使用 keyVaultProperties 參數下的 {Key Identifier} URL 更新 Batch 帳戶。 也請將 --encryption-key-source 設定為 Microsoft.KeyVault

az batch account set \
    --name $accountName \
    --resource-group $resourceGroupName \
    --encryption-key-source Microsoft.KeyVault \
    --encryption-key-identifier {YourKeyIdentifier}

利用使用者指派的受控識別和客戶自控金鑰建立 Batch 帳戶

例如,使用 Batch 管理 .NET 用戶端,您可以建立 Batch 帳戶,該帳戶將具有使用者指派的受控識別和客戶自控金鑰。

string subscriptionId = "Your SubscriptionID";
string resourceGroupName = "Your ResourceGroup name";
         
var credential = new DefaultAzureCredential();
ArmClient _armClient = new ArmClient(credential);

ResourceIdentifier resourceGroupResourceId = ResourceGroupResource.CreateResourceIdentifier(subscriptionId, resourceGroupName);
ResourceGroupResource resourceGroupResource = _armClient.GetResourceGroupResource(resourceGroupResourceId);

var data = new BatchAccountCreateOrUpdateContent(AzureLocation.EastUS)
{
    Encryption = new BatchAccountEncryptionConfiguration()
    {
        KeySource = BatchAccountKeySource.MicrosoftKeyVault,
        KeyIdentifier = new Uri("Your Key Azure Resource Manager Resource ID"),
    },

    Identity = new ManagedServiceIdentity(ManagedServiceIdentityType.UserAssigned)
    {
        UserAssignedIdentities = {
            [new ResourceIdentifier("Your Identity Azure Resource Manager ResourceId")] = new UserAssignedIdentity(),
        },
    }
};

var lro = resourceGroupResource.GetBatchAccounts().CreateOrUpdate(WaitUntil.Completed, "Your BatchAccount name", data);
BatchAccountResource batchAccount = lro.Value;

更新客戶自控金鑰版本

建立新版本的金鑰時,請更新 Batch 帳戶以使用新的版本。 執行下列步驟:

  1. 在 Azure 入口網站中瀏覽至您的 Batch 帳戶,並顯示 [加密] 設定。
  2. 輸入新金鑰版本的 URI。 或者,您可以再次選取 Key Vault 和金鑰,以更新版本。
  3. 儲存您的變更。

您也可以使用 Azure CLI 更新版本。

az batch account set \
    --name $accountName \
    --resource-group $resourceGroupName \
    --encryption-key-identifier {YourKeyIdentifierWithNewVersion}

提示

您可以在 Key Vault 內建立金鑰輪替原則,讓金鑰自動輪替。 指定 Batch 帳戶的金鑰識別碼時,請使用無版本金鑰識別碼,以有效的輪替原則啟用自動輪替。 如需詳細資訊,請參閱在 Key Vault 中 如何設定金鑰自動輪替

使用不同的金鑰進行 Batch 加密

若要變更用於 Batch 加密的金鑰,請遵循下列步驟:

  1. 瀏覽至您的 Batch 帳戶並顯示 [加密] 設定。
  2. 輸入新金鑰的 URI。 或者,您可以選取 Key Vault,然後選擇新的金鑰。
  3. 儲存您的變更。

您也可以使用 Azure CLI 來使用不同的金鑰。

az batch account set \
    --name $accountName \
    --resource-group $resourceGroupName \
    --encryption-key-identifier {YourNewKeyIdentifier}

常見問題集

  • 現有的 Batch 帳戶是否支援客戶自控金鑰? 否。 只有新的 Batch 帳戶才支援客戶自控金鑰。
  • 我是否可以選取大於 2048 位元的 RSA 金鑰大小? 是,也支援 30724096 位元的 RSA 金鑰大小。
  • 客戶管理的金鑰撤銷後,可以執行哪些作業? 如果 Batch 失去客戶自控金鑰的存取權,唯一允許的作業是刪除帳戶。
  • 如果我不小心刪除 Key Vault 金鑰,應該如何將存取權還原至 Batch 帳戶? 由於已啟用清除保護和虛刪除,因此您可以還原現有的金鑰。 如需詳細資訊,請參閱復原 Azure Key Vault
  • 可以停用客戶自控金鑰嗎? 您可以隨時將 Batch 帳戶的加密類型設回「Microsoft 受控金鑰」。 您之後可以隨意刪除或變更金鑰。
  • 如何輪替我的金鑰? 除非 除非金鑰是無版本的,並且在 Key Vault 中設定適當的金鑰輪替原則,否則不會自動輪替客戶自控金鑰。 若要手動輪替金鑰,請更新帳戶與其相關聯的金鑰識別碼。
  • 還原存取權之後,Batch 帳戶需要多久時間才能再次運作? 一旦還原了存取權,帳戶最多可能需要 10 分鐘的時間才能再次存取。
  • 當 Batch 帳戶無法使用時,我的資源會發生什麼情況? 在 Batch 失去客戶自控金鑰的存取權時正在執行的任何集區,將會繼續執行。 不過,這些集區中的節點會轉換成無法使用狀態,而工作將會停止執行 (並重新排入佇列)。 一旦還原了存取權,節點就會再次變成可用,而工作也會重新啟動。
  • 此加密機制是否適用於 Batch 集區中的 VM 磁碟? 否。 針對雲端服務設定集區 (已取代),沒有加密適用於作業系統和暫存磁碟。 針對虛擬機器設定集區,作業系統和任何指定的資料磁碟預設會以 Microsoft 平台受控金鑰進行加密。 目前,您無法為這些磁碟指定自己的金鑰。 若要使用 Microsoft 平台受控金鑰加密 Batch 集區的 VM 暫存磁碟,您必須在虛擬機器設定集區中啟用 diskEncryptionConfiguration 屬性。 對於高度敏感性環境,建議啟用暫存磁碟加密,並避免將敏感性資料儲存在作業系統和資料磁碟上。 如需詳細資訊,請參閱在啟用加密的情況下建立集區
  • Batch 帳戶上系統指派的受控識別是否可在計算節點上使用? 否。 系統指派的受控識別目前僅用於存取 Azure Key Vault,以取得客戶自控金鑰。 若要在計算節點上使用一個使用者指派的受控識別,請參閱在 Batch 集區中設定受控識別

下一步