使用跨租用戶的客戶自控金鑰加密受控磁碟
本文說明如何運用儲存在不同 Microsoft Entra 租用戶中的 Azure Key Vault,建置使用客戶自控金鑰加密受控磁碟的解決方案。 此設定適用於數個案例,其中一個範例是針對想要為服務提供者提供自備加密金鑰給其客戶的服務提供者 Azure 支援,其中服務提供者租用戶的資源會使用其客戶的租用戶金鑰來加密。
跨租用戶 CMK 工作流程中具有同盟身分識別的磁碟加密集會跨越服務提供者/ISV 租用戶資源 (磁碟加密集、受控識別和應用程式註冊) 和客戶租用戶資源 (企業應用程式、使用者角色指派和金鑰保存庫)。 在此情況下,來源 Azure 資源是服務提供者的磁碟加密集。
如果您對跨租用戶客戶自控金鑰與受控磁碟有任何問題,請傳送電子郵件至 crosstenantcmkvteam@service.microsoft.com。
限制
- 受控磁碟和客戶的 Key Vault 必須位於相同 Azure 區域,但可位於不同的訂用帳戶。
- 此功能不支援 Ultra 磁碟或 Azure 進階 SSD v2 受控磁碟。
- 由 21Vianet 或政府雲端操作的 Microsoft Azure 無法使用這項功能。
關於跨租用戶的客戶自控金鑰
許多在 Azure 上建置軟體即服務 (SaaS ) 供應項目的服務提供者都想要為客戶提供用以管理自有加密金鑰的選項。 客戶自控金鑰可讓服務提供者使用服務提供者的客戶所管理的加密金鑰來加密客戶的資料,而且服務提供者無法存取。 在 Azure 中,服務提供者的客戶可以使用 Azure Key Vault,在自己的 Microsoft Entra 租用戶和訂用帳戶中管理其加密金鑰。
服務提供者所擁有的 Azure 平台服務和資源,以及位於服務提供者租用戶的 Azure 平台服務和資源,都需要從客戶的租用戶存取金鑰,才能執行加密/解密作業。
下圖顯示在跨租用戶 CMK 工作流程中,範圍涵蓋服務提供者與客戶的待用資料加密與同盟身分識別。
在上述範例中,有兩個 Microsoft Entra 租用戶:獨立服務提供者的租用戶 (Tenant1),以及客戶的租用戶 (Tenant2)。 Tenant1 裝載 Azure 平台服務,而 Tenant2 裝載客戶的金鑰保存庫。
多租用戶應用程式註冊是由 Tenant1 中的服務提供者建立。 在此應用程式上建立同盟身分識別認證時,所使用的是使用者指派的受控識別。 然後,應用程式的名稱和應用程式識別碼會與客戶共用。
具有適當權限的使用者會在客戶租用戶 Tenant2 中安裝服務提供者的應用程式。 接著,使用者會將與已安裝應用程式存取權相關聯的服務主體授與客戶的金鑰保存庫。 客戶也會將加密金鑰或客戶自控金鑰儲存在金鑰保存庫中。 客戶會與服務提供者共用金鑰位置 (金鑰的 URL)。
服務提供者現在具有:
- 安裝在客戶租用戶中的多租用戶應用程式的應用程式識別碼,其已獲得客戶自控金鑰的存取權。
- 在多租用戶應用程式上設定為認證的受控識別。
- 客戶金鑰保存庫中的金鑰位置。
使用這三個參數,服務提供者會在 Tenant1 中佈建 Azure 資源,其可使用 Tenant2 中的客戶自控金鑰進行加密。
請將上述端對端解決方案分成三個階段:
- 服務提供者設定身分識別。
- 客戶將服務提供者的多租用戶應用程式存取權授與 Azure Key Vault 中的加密金鑰。
- 服務提供者使用 CMK 來加密 Azure 資源中的資料。
階段 1 中的作業是大部分服務提供者應用程式的一次性設定。 階段 2 和 3 中的作業會針對每個客戶重複。
階段 1 - 服務提供者設定 Microsoft Entra 應用程式
步驟 | 描述 | Azure RBAC 中的最低角色 | Microsoft Entra RBAC 中的最小角色 |
---|---|---|---|
1. | 建立新的多租用戶 Microsoft Entra 應用程式註冊,或從現有的應用程式註冊開始。 請記下使用 Azure 入口網站、Microsoft Graph API、Azure PowerShell 或 Azure CLI 註冊的應用程式識別碼 (用戶端識別碼) | 無 | 應用程式開發人員 |
2. | 建立使用者指派的受控識別 (以作為同盟身分識別認證)。 Azure 入口網站 / Azure CLI / Azure PowerShell/ Azure Resource Manager 範本 |
受控身分識別參與者 | 無 |
3. | 在應用程式上將使用者指派的受控識別設定為「同盟身分識別認證」,以便模擬應用程式的身分識別。 圖形 API參考/ Azure 入口網站/ Azure CLI/ Azure PowerShell |
無 | 應用程式的擁有者 |
4. | 與客戶共用應用程式名稱和應用程式識別碼,讓他們可以安裝和授權應用程式。 | 無 | 無 |
服務提供者的考量
- 不建議使用 Azure Resource Manager (ARM) 範本來建立 Microsoft Entra 應用程式。
- 相同的多租用戶應用程式可以用來存取任意數目之租用戶中的金鑰,例如 Tenant2、Tenant3、Tenant4 等等。 在每個租用戶中,會建立應用程式的獨立執行個體,該執行個體具有相同的應用程式識別碼,但不同的物件識別碼。 因此,此應用程式的每個執行個體都會獨立獲得授權。 請考慮如何使用此功能的應用程式物件將應用程式分割給所有客戶。
- 應用程式最多可以有 20 個同盟身分識別認證,而這需要服務提供者在其客戶之間共用同盟身分識別。 如需同盟身分識別設計考量和限制的詳細資訊,請參閱設定應用程式以信任外部身分識別提供者
- 在罕見的情況下,服務提供者可能會根據其客戶使用單一 Application 物件,但這需要大量維護成本,才能跨所有客戶大規模管理應用程式。
- 在服務提供者租用戶中,無法自動進行發行者驗證 (機器翻譯)。
階段 2 - 客戶授權存取金鑰保存庫
步驟 | 描述 | 最低特殊權限的 Azure RBAC 角色 | 具有最低權限的 Microsoft Entra 角色 |
---|---|---|---|
1. | 無 | 具有安裝應用程式權限的使用者 | |
2. | 建立 Azure Key Vault,以及作為客戶自控金鑰的金鑰。 | 使用者必須獲指派金鑰保存庫參與者角色,才能建立金鑰保存庫 使用者必須獲指派金鑰保存庫密碼編譯人員角色,才能將金鑰新增至金鑰保存庫 |
無 |
3. | 指派金鑰保存庫密碼編譯服務加密使用者角色,以將同意的應用程式身分識別存取權授與 Azure 金鑰保存庫。 | 若要將 [金鑰保存庫密碼編譯服務加密使用者]角色指派給應用程式,您必須已獲指派使用者存取管理員角色。 | 無 |
4. | 將金鑰保存庫 URL 和金鑰名稱複製至 SaaS 供應項目的客戶自控金鑰設定中。 | 無 | 無 |
注意
若要使用 CMK 授權存取受控 HSM 以進行加密,請參閱此處的儲存體帳戶範例。 如需使用受控 HSM 管理金鑰的詳細資訊,請參閱使用 Azure CLI 管理受控 HSM
服務提供者的客戶考量
- 在客戶租用戶 Tenant2 中,管理員可以設定原則來封鎖非管理使用者安裝應用程式。 這些原則可防止非管理使用者建立服務主體。 如果已設定這類原則,則必須涉及具有建立服務主體權限的使用者。
- 使用 Azure RBAC 或存取原則可以授權存取 Azure Key Vault。 授與金鑰保存庫的存取權時,請務必使用金鑰保存庫的作用中機制。
- Microsoft Entra 應用程式註冊具有應用程式識別碼 (用戶端識別碼)。 在您的租用戶中安裝應用程式時,會建立服務主體。 服務主體會共用與應用程式註冊相同的應用程式識別碼,但會產生自己的物件識別碼。 當您授權應用程式能夠存取資源時,可能需要使用服務主體
Name
或ObjectID
屬性。
階段 3 - 服務提供者使用客戶自控金鑰來加密 Azure 資源中的資料
在階段 1 和 2 完成之後,服務提供者可以使用客戶租用戶中的金鑰和金鑰保存庫,以及 ISV 租用戶中的 Azure 資源,在 Azure 資源上設定加密。 服務提供者可以使用該 Azure 資源支援的用戶端工具、ARM 範本或 REST API,設定跨租用戶客戶自控金鑰。
設定跨租用戶的客戶自控金鑰
本節說明如何設定跨租用戶的客戶自控金鑰 (CMK) 以及加密客戶資料。 您將了解如何使用 Tenant2 的金鑰保存庫中所儲存的 CMK,來加密 Tenant1 的資源中的客戶資料。 您可以使用 Azure 入口網站、Azure PowerShell 或 Azure CLI。
登入 Azure 入口網站並遵循下列步驟。
服務提供者設定身分識別
下列步驟是由服務提供者在其租用戶 Tenant1 中執行。
服務提供者建立新的多租用戶應用程式註冊
您可以建立新的多租用戶 Microsoft Entra 應用程式註冊,或從現有的多租用戶應用程式註冊開始。 如果從現有的應用程式註冊開始,請記下應用程式的應用程式識別碼 (用戶端識別碼)。
若要建立新的註冊:
在搜尋方塊中,搜尋 Microsoft Entra ID。 找出並選取 Microsoft Entra ID 延伸模組。
從左窗格中,選取 [管理] > [應用程式註冊]。
選取 + 新增註冊。
提供應用程式註冊的名稱,然後選取 [任何組織目錄中的帳戶 (任何 Microsoft Entra 目錄 – 多租用戶)]。
選取註冊。
請記下應用程式的 ApplicationId/ClientId。
服務提供者建立使用者指派的受控識別
建立使用者指派的受控識別,以作為同盟身分識別認證。
在搜尋方塊中,搜尋「受控識別」。 找出並選取 [受控識別] 延伸模組。
選取 + 建立。
提供受控識別的資源群組、區域和名稱。
選取 [檢閱 + 建立]。
成功部署時,請記下使用者指派受控識別的 Azure ResourceId,其可在 [屬性] 下取得。 例如:
/subscriptions/tttttttt-0000-tttt-0000-tttt0000tttt/resourcegroups/XTCMKDemo/providers/Microsoft.ManagedIdentity/userAssignedIdentities/ConsotoCMKDemoUA
服務提供者將使用者指派的受控識別設定為應用程式上的同盟認證
將使用者指派的受控識別設定為應用程式的同盟身分識別認證,以模擬應用程式的身分識別。
服務提供者與客戶共用應用程式識別碼
尋找多租用戶應用程式的應用程式識別碼 (用戶端識別碼),並與客戶共用。
客戶將服務提供者的應用程式存取權授與金鑰保存庫中金鑰
下列步驟是由客戶在其租用戶 Tenant2 中執行。 客戶可以使用 Azure 入口網站、Azure PowerShell 或 Azure CLI。
執行這些步驟的使用者必須是具有特殊權限角色的管理員,例如應用程式管理員、雲端應用程式管理員或全域管理員。
登入 Azure 入口網站並遵循下列步驟。
客戶在客戶租用戶中安裝服務提供者應用程式
若要在客戶的租用戶中安裝服務提供者的已註冊應用程式,您可以從已註冊的應用程式建立具有應用程式識別碼的服務主體。 您可以使用下列任一種方式來建立服務主體:
- 使用 Microsoft Graph、Microsoft Graph PowerShell、Azure PowerShell 或 Azure CLI 手動建立服務主體。
- 建構管理員同意的 URL,並授與全租用戶同意以建立服務主體。 您需要對其提供您的 AppId。
客戶建立金鑰保存庫
若要建立金鑰保存庫,必須將「金鑰保存庫參與者」角色或另一個允許建立金鑰保存庫的角色指派給使用者的帳戶。
從 Azure 入口網站功能表或從首頁,選取 [+ 建立資源]。 在 [搜尋] 方塊中,輸入「金鑰保存庫」。 從結果清單中,選取 [金鑰保存庫]。 在 [金鑰保存庫] 頁面上,選取 [建立]。
在 [基本] 索引標籤上,選擇訂用帳戶。 在 [資源群組] 下,選取 [新建],然後輸入資源群組名稱。
輸入金鑰保存庫的唯一名稱。
選取區域和定價層。
啟用新金鑰保存庫的清除保護。
在 [存取原則] 索引標籤上,針對 [權限模型] 選取 [Azure 角色型存取控制]。
選取 [檢閱 + 建立],然後選取 [建立]。
記下可存取金鑰保存庫的金鑰保存庫名稱和 URI 應用程式必須使用此 URI。
如需詳細資訊,請參閱快速入門 - 使用 Azure 入口網站建立 Azure Key Vault。
客戶將「金鑰保存庫密碼編譯人員」角色指派給使用者帳戶
此步驟可確保您可以建立加密金鑰。
- 瀏覽至您的金鑰保存庫,然後從左窗格中選取 [存取控制 (IAM)]。
- 在授與此資源的存取權下方,選取新增角色指派。
- 搜尋並選取 [金鑰保存庫密碼編譯人員]。
- 在 [成員] 下,選取 [使用者、群組或服務主體]。
- 選取 [成員],然後搜尋您的使用者帳戶。
- 選取 [檢閱 + 指派]。
客戶建立加密金鑰
若要建立加密金鑰,必須將「金鑰保存庫密碼編譯人員」角色或另一個允許建立金鑰的角色,指派給使用者的帳戶。
- 在 [金鑰保存庫屬性] 頁面上,選取 [金鑰]。
- 選取產生/匯入。
- 在 [建立金鑰] 畫面上,指定金鑰的名稱。 將其他值保留為其預設值。
- 選取 建立。
- 複製金鑰 URI。
客戶將金鑰保存庫的存取權授與服務提供者應用程式
將 Azure RBAC 角色「金鑰保存庫密碼編譯服務加密使用者」指派給服務提供者的已註冊應用程式,以便存取金鑰保存庫。
- 瀏覽至您的金鑰保存庫,然後從左窗格中選取 [存取控制 (IAM)]。
- 在授與此資源的存取權下方,選取新增角色指派。
- 搜尋並選取 [金鑰保存庫密碼編譯服務加密使用者]。
- 在 [成員] 下,選取 [使用者、群組或服務主體]。
- 選取 [成員],然後搜尋您從服務提供者安裝之應用程式的應用程式名稱。
- 選取 [檢閱 + 指派]。
您現在可以使用金鑰保存庫 URI 和金鑰來設定客戶自控金鑰。
建立磁碟加密集
建立 Azure Key Vault 並執行必要的 Microsoft Entra 設定後,請部署設定為跨租用戶運作的磁碟加密集,並將其與金鑰保存庫中的金鑰建立關聯。 您可以使用 Azure 入口網站、Azure PowerShell 或 Azure CLI 執行此作業, 也可以使用 ARM 範本 (機器翻譯) 或 REST API (機器翻譯)。
若要使用 Azure 入口網站,請登入網站並遵循下列步驟操作。
選取 [+ 建立資源],搜尋「磁碟加密集」,再依序選取 [建立] > [磁碟加密集]。
在 [專案詳細資料] 下方選取要在其中建立磁碟加密集的訂用帳戶和資源群組。
在 [執行個體詳細資料] 下方,提供磁碟加密集的名稱。
選取要在建立磁碟加密集的區域。
在 [加密類型]中,選取 [使用客戶自控金鑰進行待用加密]。
在 [加密金鑰] 下方,選取 [從 URI 輸入金鑰] 選項按鈕,然後輸入客戶租使用者中建立之金鑰的金鑰 URI。
在 [使用者指派的身分識別] 下方,選擇 [選取身分識別]。
選取您先前在 ISV 租用戶中建立的使用者指派受控識別,再選擇 [新增]。
在 [多租用戶應用程式] 下方,選擇 [選取應用程式]。
選取您先前在 ISV 租用戶中建立的多租用戶註冊應用程式,然後按一下 [選取]。
選取 [檢閱 + 建立]。
使用 ARM 範本
{
"$schema": "https://schema.management.azure.com/schemas/2019-04-01/deploymentTemplate.json#",
"contentVersion": "1.0.0.0",
"parameters": {
"desname": {
"defaultValue": "<Enter ISV disk encryption set name>",
"type": "String"
},
"region": {
"defaultValue": "WestCentralUS",
"type": "String"
},
"userassignedmicmk": {
"defaultValue": "/subscriptions/<Enter ISV Subscription Id>/resourceGroups/<Enter ISV resource group name>/providers/Microsoft.ManagedIdentity/userAssignedIdentities/<Enter ISV User Assigned Identity Name>",
"type": "String"
},
"cmkfederatedclientId": {
"defaultValue": "<Enter ISV Multi-Tenant App Id>",
"type": "String"
},
"keyVaultURL": {
"defaultValue": "<Enter Client Key URL>",
"type": "String"
},
"encryptionType": {
"defaultValue": "EncryptionAtRestWithCustomerKey",
"type": "String"
}
},
"variables": {},
"resources": [
{
"type": "Microsoft.Compute/diskEncryptionSets",
"apiVersion": "2021-12-01",
"name": "[parameters('desname')]",
"location": "[parameters('region')]",
"identity": {
"type": "UserAssigned",
"userAssignedIdentities": {
"[parameters('userassignedmicmk')]": {}
}
},
"properties": {
"activeKey": {
"keyUrl": "[parameters('keyVaultURL')]"
},
"federatedClientId": "[parameters('cmkfederatedclientId')]",
"encryptionType": "[parameters('encryptionType')]"
}
}
]
}
使用 REST API
在 BODY 中使用持有人權杖做為授權標頭和應用程式/JSON 做為內容類型。 ([網路] 索引標籤,在入口網站上執行任何 ARM 要求時篩選至 management.azure。)
PUT https://management.azure.com/subscriptions/<Enter ISV Subscription Id>/resourceGroups/<Enter ISV Resource Group Name>/providers/Microsoft.Compute/diskEncryptionSets/<Enter ISV Disk Encryption Set Name>?api-version=2021-12-01
Authorization: Bearer ...
Content-Type: application/json
{
"name": "<Enter ISV disk encryption set name>",
"id": "/subscriptions/<Enter ISV Subscription Id>/resourceGroups/<Enter ISV resource group name>/providers/Microsoft.Compute/diskEncryptionSets/<Enter ISV disk encryption set name>/",
"type": "Microsoft.Compute/diskEncryptionSets",
"location": "westcentralus",
"identity": {
"type": "UserAssigned",
"userAssignedIdentities": {
"/subscriptions/<Enter ISV Subscription Id>/resourceGroups/<Enter ISV resource group name>/providers/Microsoft.ManagedIdentity/userAssignedIdentities/<Enter ISV User Assigned Identity Name>
": {}
}
},
"properties": {
"activeKey": {
"keyUrl": "<Enter Client Key URL>"
},
"encryptionType": "EncryptionAtRestWithCustomerKey",
"federatedClientId": "<Enter ISV Multi-Tenant App Id>"
}
}
下一步
請參閱: