本文內容
Azure 儲存體會加密待用儲存體帳戶中的所有資料。 根據預設,資料是以使用 Microsoft 管理的金鑰加密。 若要進一步控制加密金鑰,您可以管理自己的金鑰。 客戶自控金鑰必須儲存在 Azure Key Vault 或 Azure Key Vault 受控硬體安全模組 (HSM) 中。
本文說明如何在建立新的儲存體帳戶時,運用客戶自控金鑰來設定加密。 在跨租用戶案例中,儲存體帳戶位於 ISV 所管理的租用戶中,而用於加密該儲存體帳戶的金鑰則位於客戶所管理租用戶的金鑰保存庫中。
若要了解如何為現有儲存體帳戶設定客戶自控金鑰,請參閱為現有的儲存體帳戶設定跨租用戶的客戶自控金鑰 。
注意
Azure Key Vault 和 Azure Key Vault 受控 HSM 支援使用相同的 API 和管理介面以進行客戶自控金鑰的設定。 Azure Key Vault 支援的任何動作也受 Azure Key Vault 受控 HSM 所支援。
關於跨租用戶的客戶自控金鑰
許多在 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 中的作業會針對每個客戶重複。
服務提供者的考量
不建議使用 Azure Resource Manager (ARM) 範本來建立 Microsoft Entra 應用程式。
相同的多租用戶應用程式可以用來存取任意數目之租用戶中的金鑰,例如 Tenant2 、Tenant3 、Tenant4 等等。 在每個租用戶中,會建立應用程式的獨立執行個體,該執行個體具有相同的應用程式識別碼,但不同的物件識別碼。 因此,此應用程式的每個執行個體都會獨立獲得授權。 請考慮如何使用此功能的應用程式物件將應用程式分割給所有客戶。
應用程式最多可以有 20 個同盟身分識別認證,而這需要服務提供者在其客戶之間共用同盟身分識別。 如需同盟身分識別設計考量和限制的詳細資訊,請參閱設定應用程式以信任外部身分識別提供者
在罕見的情況下,服務提供者可能會根據其客戶使用單一 Application 物件,但這需要大量維護成本,才能跨所有客戶大規模管理應用程式。
在服務提供者租用戶中,無法自動進行發行者驗證 (機器翻譯)。
階段 2 - 客戶授權存取金鑰保存庫
服務提供者的客戶考量
在客戶租用戶 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
將使用者指派的受控識別設定為應用程式的同盟身分識別認證,以模擬應用程式的身分識別。
瀏覽至 [Microsoft Entra ID] > [應用程式註冊] > [您的應用程式] 。
選取 [憑證和秘密] 。
選取 [同盟認證] 。
選取 [+ 新增認證] 。
在 [同盟認證案例] 下,選取 [客戶自控金鑰] 。
按一下 [選取受控識別] 。 從窗格中,選取訂用帳戶。 在 [受控識別] 下,選取 [使用者指派的受控識別] 。 在 [選取] 方塊中,搜尋您稍早建立的受控識別,然後按一下窗格底部的 [選取] 。
在 [認證詳細資料] 下,提供認證的名稱和選用描述,然後選取 [新增] 。
若要使用 Azure PowerShell 來設定 ISV 的租用戶,請安裝最新的 Az 模組。 如需如何安裝 PowerShell 的詳細資訊,請參閱使用 PowerShellGet 在 Windows 上安裝 Azure PowerShell 。
如果您選擇在本機使用 Azure PowerShell:
如果您選擇使用 Azure Cloud Shell:
下列步驟是服務提供者 (ISV) 在服務提供者的租用戶 Tenant1 中執行。
服務提供者登入 Azure
在 Azure PowerShell 中,登入 ISV 的租用戶,並將使用中訂用帳戶設定為 ISV 的訂用帳戶。
$isvTenantId="<isv-tenant-id>"
$isvSubscriptionId="<isv-subscription-id>"
# Sign in to Azure in the ISV's tenant.
Connect-AzAccount -Tenant $isvTenantId
# Set the context to the ISV's subscription.
Set-AzContext -Subscription $isvSubscriptionId
服務提供者建立新的多租用戶應用程式註冊
在 Tenant1 中挑選多租用戶已註冊應用程式的名稱,並在 Azure 入口網站中建立多租用戶應用程式。
客戶會使用您為多租用戶應用程式所提供的名稱來識別 Tenant2 中的應用程式。 請記下應用程式的物件識別碼和應用程式識別碼。 您在後續步驟中將需要這些值。
$multiTenantAppName="<multi-tenant-app>"
$multiTenantApp = New-AzADApplication -DisplayName $multiTenantAppName `
-SignInAudience AzureADMultipleOrgs
# Object ID for the new multi-tenant app
$objectId = $multiTenantApp.Id
# Application (client) ID for the multi-tenant app
$multiTenantAppObjectId = $multiTenantApp.AppId
服務提供者建立使用者指派的受控識別
登入 ISV 的租用戶,然後建立要用作同盟身分識別認證的使用者指派受控身分識別。 若要建立新的使用者指派受控身分識別,您必須獲指派包括 Microsoft.ManagedIdentity/userAssignedIdentities/write 動作的角色。
$isvRgName="<isv-resource-group>"
$isvLocation="<location>"
$userIdentityName="<user-assigned-managed-identity>"
# Create a new resource group in the ISV's subscription.
New-AzResourceGroup -Location $isvLocation -ResourceGroupName $isvRgName
# Create the new user-assigned managed identity.
$userIdentity = New-AzUserAssignedIdentity -Name $userIdentityName `
-ResourceGroupName $isvRgName `
-Location $isvLocation `
-SubscriptionId $isvSubscriptionId
將使用者指派的受控識別設定為應用程式的同盟身分識別認證,以模擬應用程式的身分識別。
若要從 PowerShell 設定同盟身分識別認證,請先安裝 Az.Resources 模組的 6.3.0 版或更新版本。
New-AzADAppFederatedCredential -ApplicationObjectId $multiTenantApp.Id `
-Name "MyFederatedIdentityCredential" `
-Audience "api://AzureADTokenExchange" `
-Issuer "https://login.microsoftonline.com/<tenant-id>/v2.0" `
-Subject $userIdentity.PrincipalId `
-Description "Federated Identity Credential for CMK"
下列步驟是由服務提供者在其租用戶 Tenant1 中執行。
服務提供者登入 Azure
登入 Azure 以使用 Azure CLI。
az login
服務提供者建立新的多租用戶應用程式註冊
在 Tenant1 中挑選多租用戶應用程式的名稱,並在 Azure 入口網站中建立多租用戶應用程式。
客戶會使用您為多租用戶應用程式所提供的名稱來識別 Tenant2 中的應用程式。 複製應用程式的應用程式識別碼 (或用戶端識別碼)、應用程式的物件識別碼,以及應用程式的租用戶識別碼。 您會在後續步驟中用到這些值。
multiTenantAppName="<multi-tenant-app>"
multiTenantAppObjectId=$(az ad app create --display-name $multiTenantAppName \
--sign-in-audience AzureADMultipleOrgs \
--query id \
--output tsv)
multiTenantAppId=$(az ad app show --id $multiTenantAppObjectId --query appId --output tsv)
服務提供者建立使用者指派的受控識別
登入 ISV 的租用戶,然後建立要用作同盟身分識別認證的使用者指派受控身分識別。 若要建立新的使用者指派受控身分識別,您必須獲指派包括 Microsoft.ManagedIdentity/userAssignedIdentities/write 動作的角色。
isvSubscriptionId="<isv-subscription-id>"
isvRgName="<isv-resource-group>"
isvLocation="<location>"
userIdentityName="<user-assigned-managed-identity>"
az group create --location $isvLocation \
--resource-group $isvRgName \
--subscription $isvSubscriptionId
principalId=$(az identity create --name $userIdentityName \
--resource-group $isvRgName \
--location $isvLocation \
--subscription $isvSubscriptionId \
--query principalId \
--out tsv)
執行 az ad app federated-credential create 方法,以在應用程式上設定同盟身分識別認證,並建立與外部身分識別提供者的信任關係。
使用 api://AzureADTokenExchange
作為同盟身分識別認證中的 audience
值。 如需詳細資訊,請參閱 API 參考 。
# Create a file named "credential.json" with the following content.
# Replace placeholders in angle brackets with your own values.
{
"name": "MyFederatedIdentityCredential",
"issuer": "https://login.microsoftonline.com/<tenantID>/v2.0",
"subject": "<user-assigned-identity-principal-id>",
"description": "Federated Identity Credential for CMK",
"audiences": [
"api://AzureADTokenExchange"
]
}
az ad app federated-credential create --id $multiTenantAppObjectId --parameters credential.json
服務提供者與客戶共用應用程式識別碼
尋找多租用戶應用程式的應用程式識別碼 (用戶端識別碼),並與客戶共用。
客戶將服務提供者的應用程式存取權授與金鑰保存庫中金鑰
下列步驟是由客戶在其租用戶 Tenant2 中執行。 客戶可以使用 Azure 入口網站、Azure PowerShell 或 Azure CLI。
執行這些步驟的使用者必須是具有特殊權限角色的管理員,例如應用程式管理員 、雲端應用程式管理員 或全域管理員 。
登入 Azure 入口網站 並遵循下列步驟。
客戶在客戶租用戶中安裝服務提供者應用程式
若要在客戶的租用戶中安裝服務提供者的已註冊應用程式,您可以從已註冊的應用程式建立具有應用程式識別碼的服務主體。 您可以使用下列任一種方式來建立服務主體:
客戶建立金鑰保存庫
若要建立金鑰保存庫,必須將「金鑰保存庫參與者」 角色或另一個允許建立金鑰保存庫的角色指派給使用者的帳戶。
從 Azure 入口網站功能表或從首頁,選取 [+ 建立資源] 。 在 [搜尋] 方塊中,輸入「金鑰保存庫」 。 從結果清單中,選取 [金鑰保存庫] 。 在 [金鑰保存庫] 頁面上,選取 [建立] 。
在 [基本] 索引標籤上,選擇訂用帳戶。 在 [資源群組] 下,選取 [新建] ,然後輸入資源群組名稱。
輸入金鑰保存庫的唯一名稱。
選取區域和定價層。
啟用新金鑰保存庫的清除保護。
在 [存取原則] 索引標籤上,針對 [權限模型] 選取 [Azure 角色型存取控制] 。
選取 [檢閱 + 建立] ,然後選取 [建立] 。
記下可存取金鑰保存庫的金鑰保存庫名稱和 URI 應用程式必須使用此 URI。
如需詳細資訊,請參閱快速入門 - 使用 Azure 入口網站建立 Azure Key Vault 。
客戶將「金鑰保存庫密碼編譯人員」角色指派給使用者帳戶
此步驟可確保您可以建立加密金鑰。
瀏覽至您的金鑰保存庫,然後從左窗格中選取 [存取控制 (IAM)] 。
在授與此資源的存取權 下方,選取新增角色指派 。
搜尋並選取 [金鑰保存庫密碼編譯人員] 。
在 [成員] 下,選取 [使用者、群組或服務主體] 。
選取 [成員] ,然後搜尋您的使用者帳戶。
選取 [檢閱 + 指派] 。
客戶建立加密金鑰
若要建立加密金鑰,必須將「金鑰保存庫密碼編譯人員」 角色或另一個允許建立金鑰的角色,指派給使用者的帳戶。
在 [金鑰保存庫屬性] 頁面上,選取 [金鑰] 。
選取產生/匯入 。
在 [建立金鑰] 畫面上,指定金鑰的名稱。 將其他值保留為其預設值。
選取 建立 。
複製金鑰 URI。
客戶將金鑰保存庫的存取權授與服務提供者應用程式
將 Azure RBAC 角色「金鑰保存庫密碼編譯服務加密使用者」 指派給服務提供者的已註冊應用程式,以便存取金鑰保存庫。
瀏覽至您的金鑰保存庫,然後從左窗格中選取 [存取控制 (IAM)] 。
在授與此資源的存取權 下方,選取新增角色指派 。
搜尋並選取 [金鑰保存庫密碼編譯服務加密使用者] 。
在 [成員] 下,選取 [使用者、群組或服務主體] 。
選取 [成員] ,然後搜尋您從服務提供者安裝之應用程式的應用程式名稱。
選取 [檢閱 + 指派] 。
您現在可以使用金鑰保存庫 URI 和金鑰來設定客戶自控金鑰。
若要使用 Azure PowerShell 來設定用戶端的租用戶,請安裝最新的 Az 模組。 如需如何安裝 PowerShell 的詳細資訊,請參閱使用 PowerShellGet 在 Windows 上安裝 Azure PowerShell 。
如果您選擇在本機使用 Azure PowerShell:
如果您選擇使用 Azure Cloud Shell:
客戶登入 Azure
在 Azure PowerShell 中,登入客戶的租用戶,並將使用中訂用帳戶設定為客戶的訂用帳戶。
$customerTenantId="<customer-tenant-id>"
$customerSubscriptionId="<customer-subscription-id>"
# Sign in to Azure in the customer's tenant.
Connect-AzAccount -Tenant $customerTenantId
# Set the context to the customer's subscription.
Set-AzContext -Subscription $customerSubscriptionId
客戶在客戶租用戶中安裝服務提供者應用程式
在您收到服務提供者多租用戶應用程式的應用程式識別碼之後,請建立服務主體以在租用戶 Tenant2 中安裝應用程式。
在您打算在其中建立金鑰保存庫的租用戶中執行下列命令。
$customerRgName="<customer-resource-group>"
$customerLocation="<location>"
$multiTenantAppId="<multi-tenant-app-id>" # appId value from Tenant1
# Create a resource group in the customer's subscription.
New-AzResourceGroup -Location $customerLocation -ResourceGroupName $customerRgName
# Create the service principal with the registered app's application ID (client ID).
$servicePrincipal = New-AzADServicePrincipal -ApplicationId $multiTenantAppId
客戶建立金鑰保存庫
若要建立金鑰保存庫,必須將「金鑰保存庫參與者」 角色或另一個允許建立金鑰保存庫的角色,指派給客戶的帳戶。
$kvName="<key-vault>"
$kv = New-AzKeyVault -Location $customerLocation `
-Name $kvName `
-ResourceGroupName $customerRgName `
-SubscriptionId $customerSubscriptionId `
-EnablePurgeProtection `
-EnableRbacAuthorization
客戶將「金鑰保存庫密碼編譯人員」角色指派給使用者帳戶
將「金鑰保存庫密碼編譯人員」 角色指派給使用者帳戶。 此步驟確保使用者可以建立金鑰保存庫和加密金鑰。 下列範例會將角色指派給目前的登入使用者。
$currentUserObjectId = (Get-AzADUser -SignedIn).Id
New-AzRoleAssignment -RoleDefinitionName "Key Vault Crypto Officer" `
-Scope $kv.ResourceId `
-ObjectId $currentUserObjectId
客戶建立加密金鑰
若要建立加密金鑰,必須將「金鑰保存庫密碼編譯人員」 角色或另一個允許建立金鑰的角色,指派給使用者的帳戶。
$keyName="<key-name>"
Add-AzKeyVaultKey -Name $keyName `
-VaultName $kvName `
-Destination software
客戶將金鑰保存庫的存取權授與服務提供者應用程式
透過您稍早所建立的服務主體,將 Azure RBAC 角色「金鑰保存庫密碼編譯服務加密使用者」 指派給服務提供者的已註冊應用程式,以存取金鑰保存庫。
New-AzRoleAssignment -RoleDefinitionName "Key Vault Crypto Service Encryption User" `
-Scope $kv.ResourceId `
-ObjectId $servicePrincipal.Id
您現在可以使用金鑰保存庫 URI 和金鑰來設定客戶自控金鑰。
客戶登入 Azure
登入 Azure 以使用 Azure CLI。
az login
客戶在客戶租用戶中安裝服務提供者應用程式
一旦您收到服務提供者的多租用戶應用程式的應用程式識別碼,請使用下列命令在租用戶 Tenant2 中安裝應用程式。 安裝應用程式可在您的租用戶中建立服務主體。
在您打算在其中建立金鑰保存庫的租用戶中執行下列命令。
# Create the service principal with the registered app's application ID (client ID)
multiTenantAppId="<multi-tenant-app-id>"
az ad sp create --id $multiTenantAppId --query id --out tsv
客戶建立金鑰保存庫
若要建立金鑰保存庫,必須將「金鑰保存庫參與者」 角色或另一個允許建立金鑰保存庫的角色,指派給客戶的帳戶。
customerSubscriptionId="<customer-subscription-id>"
customerRgName="<customer-resource-group>"
customerLocation="<location>"
kvName="<key-vault>"
az group create --location $customerLocation \
--name $customerRgName
az keyvault create --name $kvName \
--location $customerLocation \
--resource-group $customerRgName \
--subscription $customerSubscriptionId \
--enable-purge-protection true \
--enable-rbac-authorization true
客戶將「金鑰保存庫密碼編譯人員」角色指派給使用者帳戶
此步驟可確保您可以建立金鑰保存庫和加密金鑰。
currentUserObjectId=$(az ad signed-in-user show --query id --output tsv)
kvResourceId=$(az keyvault show --resource-group $customerRgName \
--name $kvName \
--query id \
--output tsv)
az role assignment create --role "Key Vault Crypto Officer" \
--scope $kvResourceId \
--assignee-object-id $currentUserObjectId
客戶建立加密金鑰
若要建立加密金鑰,必須將「金鑰保存庫密碼編譯人員」 角色或另一個允許建立金鑰的角色,指派給使用者的帳戶。
keyName="<key-name>"
az keyvault key create --name $keyName --vault-name $kvName
客戶將金鑰保存庫的存取權授與服務提供者應用程式
透過您稍早所建立的服務主體,將 Azure RBAC 角色「金鑰保存庫密碼編譯服務加密使用者」 指派給服務提供者的已註冊應用程式,讓已註冊應用程式可以存取金鑰保存庫。
servicePrincipalId=$(az ad sp show --id $multiTenantAppId --query id --output tsv)
az role assignment create --role "Key Vault Crypto Service Encryption User" \
--scope $kvResourceId \
--assignee-object-id $servicePrincipalId
您現在可以使用金鑰保存庫 URI 和金鑰來設定客戶自控金鑰。
建立以不同租用戶金鑰加密的新儲存體帳戶
到目前為止,您已在 ISV 租用戶上設定多租用戶應用程式、在客戶租用戶上安裝應用程式,以及在客戶租用戶上設定金鑰保存庫和金鑰。 接下來,您可以在 ISV 租用戶上建立新的儲存體帳戶,並使用客戶租用戶金鑰來設定客戶自控金鑰。
在建立儲存體帳戶期間設定客戶自控金鑰時,您必須使用使用者指派的現有受控識別來授與金鑰保存庫的存取權。 使用者指派的受控識別必須有適當的權限可存取金鑰保存庫。 如需詳細資訊,請參閱向 Azure Key Vault 進行驗證 。
使用客戶自控金鑰為現有的儲存體帳戶設定加密時,您可以選擇在相關聯的金鑰保存庫中有新版本可用時,自動更新用於 Azure 儲存體加密的金鑰版本。 若要這麼做,請省略金鑰 URI 中的金鑰版本。 或者,您可以明確指定在手動更新金鑰版本前要用於加密的金鑰版本。 在金鑰 URI 上包含金鑰版本可設定客戶自控金鑰,以手動更新金鑰版本。
重要
若要輪替金鑰,請在 Azure Key Vault 中建立新版的金鑰。 Azure 儲存體不會處理金鑰輪替,因此您必須對金鑰保存庫中的金鑰進行輪替管理。 您可以在 Azure Key Vault 中設定金鑰自動輪替 ,或手動輪替金鑰。
Azure 儲存體每天只會檢查金鑰保存庫是否有新的金鑰版本一次。 當您在 Azure Key Vault 中輪替金鑰時,請務必先等候 24 小時,再停用舊版金鑰。
若要在 Azure 入口網站中為新的儲存體帳戶設定跨租用戶的客戶自控金鑰,請遵循下列步驟:
在 Azure 入口網站中,導覽至 ISV 租用戶中的 [儲存體帳戶] 頁面,然後選取 [建立] 按鈕以建立新的帳戶。
依照建立儲存體帳戶 中所述的步驟,填寫 [基本] 、[進階] 、[網路] 和 [資料保護] 索引標籤上的欄位。
在 [加密] 索引標籤上的 [啟用客戶自控金鑰的支援] 欄位中,指定要啟用客戶自控金鑰支援的服務。
在 [加密類型] 欄位中,選取 [客戶自控金鑰 (CMK)] 。
在 [加密金鑰] 欄位中,選擇 [輸入金鑰保存庫中的金鑰] ,然後指定金鑰 URI。 如果您希望 Azure 儲存體自動檢查新的金鑰版本並加以更新,請省略 URI 中的金鑰版本。
針對 [使用者指派的身分識別] 欄位,搜尋您先前在 ISV 租用戶中建立的使用者指派受控識別。
展開 [進階] 區段,然後選取您先前在 ISV 租用戶中建立的多租用戶註冊應用程式。
選取 [檢閱] 按鈕,以驗證並建立帳戶。
若要在 PowerShell 中為新的儲存體帳戶設定跨租用戶客戶自控金鑰,請先安裝 Az.Storage PowerShell 模組 5.1.0 版或更新版本。 此模組會與 Az PowerShell 模組 9.1.0 版或更新版本一起安裝。
接下來,呼叫 New-AzStorageAccount ,為先前在 ISV 訂用帳戶中設定的使用者指派受控身分識別提供資源識別碼,以及您先前在 ISV 訂用帳戶中設定之多租用戶應用程式的應用程式 (用戶端) 識別碼。 提供來自客戶金鑰保存庫的金鑰保存庫 URI 和金鑰名稱。
請記得將括弧中的預留位置值取代為您自己的值,並使用先前的範例中定義的變數。
$accountName = "<account-name>"
$kvUri = "<key-vault-uri>"
$keyName = "<keyName>"
$location = "<location>"
$multiTenantAppId = "<application-id>" # appId value from multi-tenant app
$userIdentity = Get-AzUserAssignedIdentity -Name <user-assigned-identity> -ResourceGroupName $rgName
New-AzStorageAccount -ResourceGroupName $rgName `
-Name $accountName `
-Kind StorageV2 `
-SkuName Standard_LRS `
-Location $location `
-AllowBlobPublicAccess $false `
-UserAssignedIdentityId $userIdentity.Id `
-IdentityType SystemAssignedUserAssigned `
-KeyName $keyName `
-KeyVaultUri $kvUri `
-KeyVaultUserAssignedIdentityId $userIdentity.Id `
-KeyVaultFederatedClientId $multiTenantAppId
若要使用 Azure CLI 為新的儲存體帳戶設定跨租用戶客戶自控金鑰,請先安裝 Azure CLI 2.42.0 版或更新版本。 如需安裝 Azure CLI 的詳細資訊,請參閱如何安裝 Azure CLI 。
接下來,呼叫 az storage account create ,為先前在 ISV 訂用帳戶中設定的使用者指派受控身分識別提供資源識別碼,以及您先前在 ISV 訂用帳戶中設定之多租用戶應用程式的應用程式 (用戶端) 識別碼。 提供來自客戶金鑰保存庫的金鑰保存庫 URI 和金鑰名稱。
請記得將括弧中的預留位置值取代為您自己的值,並使用先前的範例中定義的變數。
accountName="<storage-account>"
kvUri="<key-vault-uri>"
keyName="<key-name>"
multiTenantAppId="<multi-tenant-app-id>" # appId value from multi-tenant app
# Get the resource ID for the user-assigned managed identity.
identityResourceId=$(az identity show --name $managedIdentity \
--resource-group $isvRgName \
--query id \
--output tsv)
az storage account create \
--name $accountName \
--resource-group $isvRgName \
--location $isvLocation \
--sku Standard_LRS \
--kind StorageV2 \
--allow-blob-public-access false \
--identity-type SystemAssigned,UserAssigned \
--user-identity-id $identityResourceId \
--encryption-key-vault $kvUri \
--encryption-key-name $keyName \
--encryption-key-source Microsoft.Keyvault \
--key-vault-user-identity-id $identityResourceId \
--key-vault-federated-client-id $multiTenantAppId
您也可以在建立新的儲存體帳戶時,設定手動更新金鑰版本的客戶自控金鑰。 若要這樣做,請在指定金鑰 URI 時包括金鑰版本。
變更金鑰
您可以隨時變更 Azure 儲存體加密所使用的金鑰。
注意
當您變更金鑰或金鑰版本時,根加密金鑰的保護會變更,但 Azure 儲存體帳戶中的資料會一直保持加密。 您不需要在電腦上執行其他動作,就可以確保您的資料受到保護。 變更金鑰或輪替金鑰版本不會影響效能。 變更金鑰或輪替金鑰版本時,不會有任何停機時間。
若要使用 Azure 入口網站來變更金鑰,請遵循下列步驟:
瀏覽至您的儲存體帳戶,並顯示 [加密] 設定。
選取金鑰保存庫,然後選擇新的金鑰。
儲存您的變更。
撤銷使用客戶自控金鑰的儲存體帳戶存取權
若要暫時撤銷使用客戶自控金鑰的儲存體帳戶存取權,請停用金鑰保存庫中目前所使用的金鑰。 沒有與停用和重新啟用密鑰相關聯的效能影響或停機時間。
停用金鑰之後,客戶端即無法呼叫從 Blob 或其中繼資料讀取或寫入其中的作業。 如需哪些作業會失敗的資訊,請參閱撤銷使用客戶自控金鑰的儲存體帳戶存取權 。
警告
當您停用金鑰保存庫中的金鑰時,Azure 儲存體帳戶中的資料會保持加密狀態,但在您重新啟用金鑰之前,該密鑰會變成無法存取。
若要使用 Azure 入口網站停用客戶自控金鑰,請遵循下列步驟:
瀏覽至包含該金鑰的金鑰保存庫。
在 [物件] 下選取 [金鑰] 。
以滑鼠右鍵按一下該金鑰,然後選取 [停用] 。
若要使用 PowerShell 撤銷客戶自控金鑰,請呼叫 Update-AzKeyVaultKey 命令,如下列範例所示。 請記得將括弧中的預留位置值取代為您自己的值以定義變數,或使用先前範例中定義的變數。
$kvName = "<key-vault-name>"
$keyName = "<key-name>"
$enabled = $false
# $false to disable the key / $true to enable it
# Check the current state of the key (before and after enabling/disabling it)
Get-AzKeyVaultKey -Name $keyName -VaultName $kvName
# Disable (or enable) the key
Update-AzKeyVaultKey -VaultName $kvName -Name $keyName -Enable $enabled
若要使用 Azure CLI 撤銷客戶自控金鑰,請呼叫 az keyvault key set-attributes 命令,如下列範例所示。 請記得將括弧中的預留位置值取代為您自己的值以定義變數,或使用先前範例中定義的變數。
kvName="<key-vault-name>"
keyName="<key-name>"
enabled="false"
# "false" to disable the key / "true" to enable it:
# Check the current state of the key (before and after enabling/disabling it)
az keyvault key show \
--vault-name $kvName \
--name $keyName
# Disable (or enable) the key
az keyvault key set-attributes \
--vault-name $kvName \
--name $keyName \
--enabled $enabled
切換回 Microsoft 管理的金鑰
您可以隨時使用 Azure 入口網站、PowerShell 或 Azure CLI,從客戶自控金鑰切換回 Microsoft 管理的金鑰。
若要在 Azure 入口網站中從客戶自控金鑰切換回 Microsoft 管理的金鑰,請遵循下列步驟:
瀏覽至您的儲存體帳戶。
在 [安全性 + 網路] 下方,選取 [加密] 。
將 [加密類型] 變更為 [Microsoft 管理的金鑰] 。
若要使用 PowerShell 從客戶自控金鑰切換回 Microsoft 管理的金鑰,請使用 -StorageEncryption
選項呼叫 Set-AzStorageAccount ,如下列範例所示。 請記得將括弧中的預留位置值取代為您自己的值,並使用先前的範例中定義的變數。
Set-AzStorageAccount -ResourceGroupName $storageAccount.ResourceGroupName `
-AccountName $storageAccount.StorageAccountName `
-StorageEncryption
若要使用 Azure CLI 從客戶自控金鑰切換回 Microsoft 管理的金鑰,請呼叫 az storage account update ,並將 --encryption-key-source parameter
設定為 Microsoft.Storage
,如下列範例所示。 請記得將括弧中的預留位置值取代為您自己的值,並使用先前的範例中定義的變數。
az storage account update \
--name <storage-account> \
--resource-group <resource_group> \
--encryption-key-source Microsoft.Storage
另請參閱