在此文章
Azure 儲存體會加密待用儲存體帳戶中的所有資料。 根據預設,資料是以使用 Microsoft 管理的金鑰加密。 若要進一步控制加密金鑰,您可以管理自己的金鑰。 客戶自控金鑰必須儲存在 Azure Key Vault 或 Azure Key Vault 受控硬體安全模組 (HSM) 中。
本文說明如何在建立新的儲存體帳戶時,運用客戶自控金鑰來設定加密。 客戶自控金鑰會儲存在金鑰保存庫中。
若要了解如何為現有儲存體帳戶設定客戶自控金鑰,請參閱在現有儲存體帳戶的 Azure 金鑰保存庫中設定客戶自控金鑰 。
注意
Azure Key Vault 和 Azure Key Vault 受控 HSM 支援使用相同的 API 和管理介面以進行客戶自控金鑰的設定。 Azure Key Vault 支援的任何動作也受 Azure Key Vault 受控 HSM 所支援。
您可以使用新的或現有的金鑰保存庫來儲存客戶自控金鑰。 儲存體帳戶和金鑰保存庫可能位於相同租用戶的不同區域或訂用帳戶。 若要深入了解 Azure Key Vault,請參閱 Azure Key Vault 概觀 和什麼是 Azure Key Vault? 。
要將客戶自控金鑰用於 Azure 儲存體加密,必須為金鑰保存庫啟用虛刪除和清除保護。 依預設會在您建立新的金鑰保存庫啟用虛刪除,且無法停用。 您可以在建立金鑰保存庫期間或建立後啟用清除保護。
Azure Key Vault 支援透過 Azure RBAC 權限模型向 Azure RBAC 授權。 Microsoft 建議透過金鑰保存庫存取原則使用 Azure RBAC 權限模型。 如需詳細資訊,請參閱使用 Azure RBAC 授與權限至應用程式以存取 Azure Key Vault 。
若要了解如何使用 Azure 入口網站建立金鑰保存庫,請參閱快速入門:使用 Azure 入口網站建立金鑰保存庫 。 在建立金鑰保存庫時,請選取 [啟用清除保護] ,如下圖所示。
若要在現有的金鑰保存庫上啟用清除保護,請遵循下列步驟:
在 Azure 入口網站中瀏覽至您的金鑰保存庫。
在 [設定] 之下選擇 [屬性] 。
在 [清除保護] 區段中,選擇 [啟用清除保護] 。
若要使用 PowerShell 建立新的金鑰保存庫,請安裝 Az.KeyVault PowerShell 模組 2.0.0 版或更新版本。 然後,呼叫 New-AzKeyVault 以建立新的金鑰保存庫。 使用 Az.KeyVault 模組 2.0.0 版或更新版本時,當您建立新的金鑰保存庫時,依預設會啟用虛刪除。
下列範例會建立新的金鑰保存庫,並啟用虛刪除和清除保護。 金鑰保存庫的權限模型會設定為使用 Azure RBAC。 請記得將括弧中的預留位置值取代為您自己的值。
$rgName = "<resource_group>"
$location = "<location>"
$kvName = "<key-vault>"
$keyVault = New-AzKeyVault -Name $kvName `
-ResourceGroupName $rgName `
-Location $location `
-EnablePurgeProtection `
-EnableRbacAuthorization
若要了解如何使用 PowerShell 在現有的金鑰保存庫上啟用清除保護,請參閱 Azure Key Vault 復原概觀 。
建立金鑰保存庫之後,您必須將金鑰保存庫密碼編譯人員 角色指派給自己。 此角色可讓您在金鑰保存庫中建立金鑰。 下列範例會將此角色指派給使用者,範圍設定為金鑰保存庫:
New-AzRoleAssignment -SignInName "<user-email>" `
-RoleDefinitionName "Key Vault Crypto Officer" `
-Scope $keyVault.ResourceId
如需如何使用 PowerShell 指派 RBAC 角色的詳細資訊,請參閱使用 Azure PowerShell 指派 Azure 角色 。
若要使用 Azure CLI 建立新的金鑰保存庫,請呼叫 az keyvault create 。 下列範例會建立新的金鑰保存庫,並啟用虛刪除和清除保護。 金鑰保存庫的權限模型會設定為使用 Azure RBAC。 請記得將括弧中的預留位置值取代為您自己的值。
rgName="<resource_group>"
location="<location>"
kvName="<key-vault>"
az keyvault create \
--name $kvName \
--resource-group $rgName \
--location $location \
--enable-purge-protection \
--enable-rbac-authorization
若要了解如何使用 Azure CLI 在現有的金鑰保存庫上啟用清除保護,請參閱 Azure Key Vault 復原概觀 。
建立金鑰保存庫之後,您必須將金鑰保存庫密碼編譯人員 角色指派給自己。 此角色可讓您在金鑰保存庫中建立金鑰。 下列範例會將此角色指派給使用者,範圍設定為金鑰保存庫:
kvResourceId=$(az keyvault show --resource-group $rgName \
--name $kvName \
--query id \
--output tsv)
az role assignment create --assignee "<user-email>" \
--role "Key Vault Crypto Officer" \
--scope $kvResourceId
如需如何使用 Azure CLI, 指派 RBAC 角色的詳細資訊,請參閱使用 Azure CLI 指派 Azure 角色 。
新增金鑰
接著,將金鑰新增至金鑰保存庫。 新增金鑰之前,請確定您已將金鑰保存庫密碼編譯人員 角色指派給自己。
Azure 儲存體加密支援 2048、3072 和 4096 大小的 RSA 和 RSA-HSM 金鑰。 若要進一步了解支援的金鑰類型,請參閱關於金鑰 。
若要使用 PowerShell 來新增金鑰,請呼叫 Add-AzKeyVaultKey 。 請記得將括弧中的預留位置值取代為您自己的值,並使用先前的範例中定義的變數。
$keyName = "<key-name>"
$key = Add-AzKeyVaultKey -VaultName $keyVault.VaultName `
-Name $keyName `
-Destination 'Software'
若要使用 Azure CLI 來新增金鑰,請呼叫 az keyvault key create 。 請記得將括弧中的預留位置值取代為您自己的值。
keyName="<key-name>"
az keyvault key create \
--name $keyName \
--vault-name $kvName
使用使用者指派的受控識別來授權存取金鑰保存庫
當您為新的儲存體帳戶啟用客戶自控金鑰時,必須指定使用者指派的受控識別。 現有的儲存體帳戶上支援使用使用者指派的受控識別或系統指派的受控識別,以設定客戶自控金鑰。
當您使用使用者指派的受控識別來設定客戶自控金鑰時,會使用使用者指派的受控識別來授權存取包含金鑰的金鑰保存庫。 在設定客戶自控金鑰之前,必須先建立使用者指派的身分識別。
使用者指派的受控識別是獨立的 Azure 資源。 若要深入了解使用者指派的受控識別,請參閱受控識別類型 。 若要了解如何建立及管理使用者指派的受控識別,請參閱管理使用者指派的受控識別 。
使用者指派的受控識別必須有權限可存取金鑰保存庫中的金鑰。 將 Key Vault 密碼編譯服務加密使用者 角色指派給金鑰保存庫範圍內的使用者指派的受控識別,以授與這些權限。
您必須先將金鑰保存庫密碼編譯服務加密使用者 角色指派給使用者指派的受控識別,範圍設為金鑰保存庫,才能利用使用者指派的受控識別來設定客戶自控金鑰。 此角色授與使用者指派的受控識別權限,以存取金鑰保存庫中的金鑰。 如需使用 Azure 入口網站指派 Azure RBAC 角色的詳細資訊,請參閱使用 Azure 入口網站指派 Azure 角色 。
使用 Azure 入口網站設定客戶自控金鑰時,您可以透過入口網站使用者介面來選取使用者指派的現有身分識別。
下列範例示範如何擷取使用者指派的受控識別,並將其指派為必要的 RBAC 角色,範圍設定為金鑰保存庫。 請記得將括弧中的預留位置值取代為您自己的值,並使用先前的範例中定義的變數:
$userIdentity = Get-AzUserAssignedIdentity -Name <user-assigned-identity> `
-ResourceGroupName $rgName
$principalId = $userIdentity.PrincipalId
New-AzRoleAssignment -ObjectId $principalId `
-RoleDefinitionName "Key Vault Crypto Service Encryption User" `
-Scope $keyVault.ResourceId
下列範例示範如何擷取使用者指派的受控識別,並將其指派為必要的 RBAC 角色,範圍設定為金鑰保存庫。 請記得將括弧中的預留位置值取代為您自己的值,並使用先前的範例中定義的變數:
identityResourceId=$(az identity show --name <user-assigned-identity> \
--resource-group $rgName \
--query id \
--output tsv)
principalId=$(az identity show --name <user-assigned-identity> \
--resource-group $rgName \
--query principalId \
--output tsv)
az role assignment create --assignee-object-id $principalId \
--role "Key Vault Crypto Service Encryption User" \
--scope $kvResourceId \
--assignee-principal-type ServicePrincipal
使用客戶自控金鑰為新的儲存體帳戶設定加密時,您可以選擇在相關聯的金鑰保存庫中有新版本可用時,自動更新用於 Azure 儲存體加密的金鑰版本。 或者,您可以明確指定在手動更新金鑰版本前要用於加密的金鑰版本。
在建立儲存體帳戶期間設定客戶自控金鑰時,您必須使用使用者指派的現有受控識別來授與金鑰保存庫的存取權。 使用者指派的受控識別必須有適當的權限可存取金鑰保存庫。 如需詳細資訊,請參閱向 Azure Key Vault 進行驗證 。
Azure 儲存體可自動更新用於加密的客戶自控金鑰,以使用金鑰保存庫中的最新金鑰版本。 Azure 儲存體每天都會檢查金鑰保存庫中是否有新的金鑰版本。 有新版本可供使用時,Azure 儲存體就會自動使用最新版本的金鑰進行加密。
重要
Azure 儲存體每天只會檢查金鑰保存庫是否有新的金鑰版本一次。 當您輪替金鑰時,請務必等候 24 小時,再停用舊版金鑰。
若要為新的儲存體帳戶設定客戶自控金鑰,並自動更新金鑰版本,請遵循下列步驟:
在 Azure 入口網站中,瀏覽至 [儲存體帳戶] 頁面,然後選取 [建立] 按鈕以建立新的帳戶。
依照建立儲存體帳戶 中所述的步驟,填寫 [基本] 、[進階] 、[網路] 和 [資料保護] 索引標籤上的欄位。
在 [加密] 索引標籤上的 [啟用客戶自控金鑰的支援] 欄位中,指定要啟用客戶自控金鑰支援的服務。
在 [加密類型] 欄位中,選取 [客戶自控金鑰 (CMK)] 。
在 [加密金鑰] 欄位中選擇 [選取金鑰保存庫和金鑰] ,然後指定金鑰保存庫和金鑰。
在 [使用者指派的身分識別] 欄位中,選取使用者指派的現有受控識別。
選取 [檢閱] 按鈕,以驗證並建立帳戶。
您也可以在建立新的儲存體帳戶時,設定手動更新金鑰版本的客戶自控金鑰。 請依照設定手動更新金鑰版本的加密 中說明的步驟操作。
若要為新的儲存體帳戶設定會自動更新金鑰版本的客戶自控金鑰,請呼叫 New-AzStorageAccount ,如下列範例所示。 針對使用者指派的受控識別,使用您先前建立的變數作為其資源識別碼。 您也將需要金鑰保存庫 URI 和金鑰名稱:
$accountName = "<storage-account>"
New-AzStorageAccount -ResourceGroupName $rgName `
-Name $accountName `
-Kind StorageV2 `
-SkuName Standard_LRS `
-Location $location `
-AllowBlobPublicAccess $false `
-IdentityType SystemAssignedUserAssigned `
-UserAssignedIdentityId $userIdentity.Id `
-KeyVaultUri $keyVault.VaultUri `
-KeyName $key.Name `
-KeyVaultUserAssignedIdentityId $userIdentity.Id
若要為新的儲存體帳戶設定會自動更新金鑰版本的客戶自控金鑰,請呼叫 az storage account create ,如下列範例所示。 針對使用者指派的受控識別,使用您先前建立的變數作為其資源識別碼。 您也將需要金鑰保存庫 URI 和金鑰名稱:
accountName="<storage-account>"
az storage account create \
--name $accountName \
--resource-group $rgName \
--location $location \
--sku Standard_LRS \
--kind StorageV2 \
--identity-type SystemAssigned,UserAssigned \
--user-identity-id $identityResourceId \
--encryption-key-vault <key-vault-uri> \
--encryption-key-name $keyName \
--encryption-key-source Microsoft.Keyvault \
--key-vault-user-identity-id $identityResourceId
建立儲存體帳戶時,如果您想要手動更新金鑰版本,當您使用客戶自控金鑰設定加密時,請明確指定版本。 在此情況下,在金鑰保存庫中建立新版本時,Azure 儲存體將不會自動更新金鑰版本。 若要使用新的金鑰版本,您必須手動更新 Azure 儲存體加密所使用的版本。
在建立儲存體帳戶期間設定客戶自控金鑰時,您必須使用使用者指派的現有受控識別來授與金鑰保存庫的存取權。 使用者指派的受控識別必須有適當的權限可存取金鑰保存庫。 如需詳細資訊,請參閱向 Azure Key Vault 進行驗證 。
建立儲存體帳戶時,若要在 Azure 入口網站中設定手動更新金鑰版本的客戶自控金鑰,請指定金鑰 URI,包括版本在內。 若要將金鑰指定為 URI,請遵循下列步驟:
在 Azure 入口網站中,瀏覽至 [儲存體帳戶] 頁面,然後選取 [建立] 按鈕以建立新的帳戶。
依照建立儲存體帳戶 中所述的步驟,填寫 [基本] 、[進階] 、[網路] 和 [資料保護] 索引標籤上的欄位。
在 [加密] 索引標籤上的 [啟用客戶自控金鑰的支援] 欄位中,指定要啟用客戶自控金鑰支援的服務。
在 [加密類型] 欄位中,選取 [客戶自控金鑰 (CMK)] 。
若要在 Azure 入口網站中找出金鑰 URI,請巡覽至金鑰保存庫,然後選取 [金鑰] 設定。 選取所需的金鑰,並選取金鑰以檢視其版本。 選取金鑰版本以檢視該版本的設定。
複製 [金鑰識別碼] 欄位的值,以提供 URI。
在儲存體帳戶的 [加密金鑰] 設定中,選擇 [輸入金鑰 URI] 選項。
將您複製的 URI 貼到 [金鑰 URI] 欄位中。 在 URI 上包含金鑰版本,以設定金鑰版本的手動更新。
選擇 [選取身分識別] 連結,以指定使用者指派的受控 識別。
選取 [檢閱] 按鈕,以驗證並建立帳戶。
建立儲存體帳戶時,若要透過金鑰版本的手動更新來設定客戶自控金鑰,請在設定加密時明確提供金鑰版本。 呼叫 Set-AzStorageAccount 以更新儲存體帳戶的加密設定 (如下列範例所示),並納入 -KeyvaultEncryption 選項,為儲存體帳戶啟用客戶自控金鑰。
請記得將括弧中的預留位置值取代為您自己的值,並使用先前的範例中定義的變數。
$accountName = "<storage-account>"
New-AzStorageAccount -ResourceGroupName $rgName `
-Name $accountName `
-Kind StorageV2 `
-SkuName Standard_LRS `
-Location $location `
-AllowBlobPublicAccess $false `
-IdentityType SystemAssignedUserAssigned `
-UserAssignedIdentityId $userIdentity.Id `
-KeyVaultUri $keyVault.VaultUri `
-KeyName $key.Name `
-KeyVersion $key.Version `
-KeyVaultUserAssignedIdentityId $userIdentity.Id
在手動更新金鑰版本時,您必須將儲存體帳戶的加密設定更新為使用新的版本。 首先,呼叫 Get-AzKeyVaultKey 以取得最新版的金鑰。 接著呼叫 Set-AzStorageAccount ,更新儲存體帳戶的加密設定以使用新版本的金鑰,如先前的範例所示。
建立儲存體帳戶時,若要透過金鑰版本的手動更新來設定客戶自控金鑰,請在設定加密時明確提供金鑰版本。 呼叫 az storage account update 以更新儲存體帳戶的加密設定,如下列範例所示。 納入 --encryption-key-source
參數並將其設定為 Microsoft.Keyvault
,為帳戶啟用客戶自控金鑰。
請記得將括弧中的預留位置值取代為您自己的值。
accountName="<storage-account>"
key_vault_uri=$(az keyvault show \
--name <key-vault> \
--resource-group <resource_group> \
--query properties.vaultUri \
--output tsv)
key_version=$(az keyvault key list-versions \
--name <key> \
--vault-name <key-vault> \
--query [-1].kid \
--output tsv | cut -d '/' -f 6)
az storage account create \
--name $accountName \
--resource-group $rgName \
--location $location \
--sku Standard_LRS \
--kind StorageV2 \
--allow-blob-public-access false \
--identity-type SystemAssigned,UserAssigned \
--user-identity-id $identityResourceId \
--encryption-key-vault $keyVaultUri \
--encryption-key-name $keyName \
--encryption-key-source Microsoft.Keyvault \
--encryption-key-version $keyVersion \
--key-vault-user-identity-id $identityResourceId
在手動更新金鑰版本時,您必須將儲存體帳戶的加密設定更新為使用新的版本。 首先,呼叫 az keyvault show 以查詢金鑰保存庫 URI,然後呼叫 az keyvault key list-versions 以查詢金鑰版本。 接著呼叫 az storage account update ,更新儲存體帳戶的加密設定以使用新版本的金鑰,如先前的範例所示。
變更金鑰
您可以隨時變更 Azure 儲存體加密所使用的金鑰。
注意
當您變更金鑰或金鑰版本時,根加密金鑰的保護會變更,但 Azure 儲存體帳戶中的資料會一直保持加密。 您不需要在電腦上執行其他動作,就可以確保您的資料受到保護。 變更金鑰或輪替金鑰版本不會影響效能。 變更金鑰或輪替金鑰版本時,不會有任何停機時間。
若要使用 Azure 入口網站來變更金鑰,請遵循下列步驟:
瀏覽至您的儲存體帳戶,並顯示 [加密] 設定。
選取金鑰保存庫,然後選擇新的金鑰。
儲存您的變更。
如果新金鑰位於不同的金鑰保存庫中,您必須授與新保存庫中金鑰的受控識別存取權 。 如果您選擇手動更新金鑰版本,您也必須更新金鑰儲存庫 URI 。
撤銷使用客戶自控金鑰的儲存體帳戶存取權
若要暫時撤銷使用客戶自控金鑰的儲存體帳戶存取權,請停用金鑰保存庫中目前所使用的金鑰。 沒有與停用和重新啟用密鑰相關聯的效能影響或停機時間。
停用金鑰之後,客戶端即無法呼叫從 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
停用金鑰會導致嘗試存取儲存體帳戶中的資料失敗,錯誤碼為 403 (禁止)。 如需會因停用金鑰而受到影響的儲存體帳戶作業清單,請參閱撤銷使用客戶自控金鑰的儲存體帳戶存取權 。
切換回 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
下一步