加密範圍可讓您管理個別 Blob 或容器層級的加密。 您可以使用加密範圍,在位於相同儲存體帳戶但屬於不同客戶的資料之間建立安全界限。 如需加密範圍的詳細資訊,請參閱 Blob 儲存體的加密範圍。
您可以建立使用受Microsoft管理密鑰保護的加密範圍,或使用儲存在 Azure Key Vault 或 Azure Key Vault 受控硬體安全性模型 (HSM) 中的客戶自控密鑰保護的加密範圍。 若要使用客戶管理的金鑰建立加密範圍,您必須先建立密鑰保存庫或受控 HSM,並新增您想要用於範圍的金鑰。 金鑰保存庫或受控 HSM 必須啟用清除保護。
當您建立加密範圍時,它會自動啟用。 建立加密範圍之後,您可以在建立 Blob 時指定它。 您也可以在建立容器時指定預設加密範圍,該容器會自動套用至容器中的所有 Blob。
若要在 Azure 入口網站中建立加密範圍,請遵循下列步驟:
在 Azure 入口網站中進入您的儲存帳戶。
在 [安全性 + 網络功能] 下 ,選取 [加密]。
選取 加密範圍 索引標籤。
按兩下 [ 新增 ] 按鈕以新增加密範圍。
在 [ 建立加密範圍] 窗格中,輸入新範圍的名稱。
選取所需的加密金鑰支援類型, Microsoft受控密鑰 或 客戶管理的金鑰。
- 如果您選取 Microsoft管理的金鑰,請按兩下 [建立 ] 以建立加密範圍。
- 如果您選取 [客戶管理的金鑰],請選取訂用帳戶,並指定密鑰保存庫和要用於此加密範圍的金鑰。 如果所需的金鑰保存庫位於不同的區域中,請選取 [輸入金鑰 URI ],然後指定金鑰 URI。
如果記憶體帳戶已啟用基礎結構加密,則會自動為新的加密範圍啟用它。 否則,您可以選擇是否啟用基礎結構加密來設置加密範圍。
若要使用 PowerShell 建立加密範圍,請安裝 Az.Storage PowerShell 模組 3.4.0 版或更新版本。
建立受Microsoft管理密鑰保護的加密範圍
若要建立受Microsoft管理密鑰保護的加密範圍,請使用 參數呼叫 -StorageEncryption 命令。
如果記憶體帳戶已啟用基礎結構加密,則會自動為新的加密範圍啟用它。 否則,您可以選擇是否啟用基礎結構加密來設置加密範圍。 若要建立已啟用基礎結構加密的新範圍,請包含 -RequireInfrastructureEncryption 參數。
請記得將範例中的佔位元值取代為您自己的值:
$rgName = "<resource-group>"
$accountName = "<storage-account>"
$scopeName = "<encryption-scope>"
New-AzStorageEncryptionScope -ResourceGroupName $rgName `
-StorageAccountName $accountName `
-EncryptionScopeName $scopeName1 `
-StorageEncryption
在相同的租使用者中建立受客戶管理密鑰保護的加密範圍
若要建立受客戶管理密鑰保護的加密範圍,這些密鑰儲存在與存儲帳戶位於相同租使用者的密鑰保存庫或受控 HSM 中,請先為存儲帳戶設定客戶管理密鑰。 您必須將受控識別指派給具有存取金鑰保存庫許可權的記憶體帳戶。 受控識別可以是使用者指派的受控識別或系統指派的受控識別。 若要深入瞭解如何設定客戶管理的密鑰,請參閱 為現有的記憶體帳戶在相同租用戶中設定客戶管理的密鑰。
若要授與受控識別存取密鑰保存庫的許可權,請將受控識別指派 給 Key Vault 加密服務加密使用者 角色。
若要設定客戶管理的金鑰以搭配加密範圍使用,必須在金鑰保存庫或受控 HSM 上啟用清除保護。
下列範例示範如何使用系統指派的受控識別來設定加密範圍。 請記得將範例中的佔位元值取代為您自己的值:
$rgName = "<resource-group>"
$accountName = "<storage-account>"
$keyVaultName = "<key-vault>"
$scopeName = "<encryption-scope>"
# Assign a system-assigned managed identity to the storage account.
$storageAccount = Set-AzStorageAccount -ResourceGroupName $rgName `
-Name $accountName `
-AssignIdentity
# Assign the necessary permissions to the managed identity
# so that it can access the key vault.
$principalId = $storageAccount.Identity.PrincipalId
$keyVault = Get-AzKeyVault $keyVaultName
New-AzRoleAssignment -ObjectId $storageAccount.Identity.PrincipalId `
-RoleDefinitionName "Key Vault Crypto Service Encryption User" `
-Scope $keyVault.ResourceId
接下來,使用 參數呼叫 -KeyvaultEncryption 命令,並指定密鑰 URI。 在金鑰 URI 中包含金鑰版本是選擇性的。 如果您省略金鑰版本,加密範圍會自動使用最新的金鑰版本。 如果您包含金鑰版本,則必須手動更新金鑰版本,才能使用不同的版本。
金鑰 URI 的格式與下列範例類似,可從金鑰保存庫的 VaultUri 屬性和金鑰名稱建構:
# Without the key version
https://<key-vault>.vault.azure.net/keys/<key>
# With the key version
https://<key-vault>.vault.azure.net/keys/<key>/<version>
如果記憶體帳戶已啟用基礎結構加密,則會自動為新的加密範圍啟用它。 否則,您可以選擇是否啟用基礎結構加密來設置加密範圍。 若要建立已啟用基礎結構加密的新範圍,請包含 -RequireInfrastructureEncryption 參數。
請記得將範例中的佔位元值取代為您自己的值:
$keyUri = $keyVault.VaultUri + "keys/" + $keyName
New-AzStorageEncryptionScope -ResourceGroupName $rgName `
-StorageAccountName $accountName `
-EncryptionScopeName $scopeName `
-KeyUri $keyUri `
-KeyvaultEncryption
在不同的租使用者中建立受客戶管理密鑰保護的加密範圍
若要建立受客戶管理的金鑰保護的加密範圍,這些金鑰儲存在與儲存體帳戶不同租戶中的金鑰庫或受控 HSM 中,請先為儲存體帳戶設定客戶管理的金鑰。 您必須為具有存取其他租戶中密鑰保存庫權限的儲存帳戶設定使用者指派的受控身分。 若要深入瞭解如何設定跨租用戶客戶管理的密鑰,請參閱 設定現有記憶體帳戶的跨租用戶客戶自控密鑰。
若要設定客戶管理的金鑰以搭配加密範圍使用,必須在金鑰保存庫或受控 HSM 上啟用清除保護。
在您設定了儲存體帳戶的跨租戶客戶管理金鑰之後,您可以在一個租戶的儲存體帳戶中建立一個加密範圍,其範圍配置為另一個租戶金鑰保管庫中的某個金鑰。 您將需要密鑰 URI 來建立跨租戶加密範圍。
請記得將範例中的佔位元值取代為您自己的值:
$rgName = "<resource-group>"
$accountName = "<storage-account>"
$scopeName = "<encryption-scope>"
# Construct the key URI from the key vault URI and key name.
$keyUri = $kvUri + "keys/" + $keyName
New-AzStorageEncryptionScope -ResourceGroupName $rgName `
-StorageAccountName $accountName `
-EncryptionScopeName $scopeName `
-KeyUri $keyUri `
-KeyvaultEncryption
若要使用 Azure CLI 建立加密範圍,請先安裝 Azure CLI 2.20.0 版或更新版本。
建立受Microsoft管理密鑰保護的加密範圍
若要建立受Microsoft管理密鑰保護的加密範圍,請呼叫 az storage account encryption-scope create 命令,並將 --key-source 參數指定為 Microsoft.Storage。
如果記憶體帳戶已啟用基礎結構加密,則會自動為新的加密範圍啟用它。 否則,您可以選擇是否啟用基礎結構加密來設置加密範圍。 若要建立已啟用基礎結構加密的新範圍,請包含 --require-infrastructure-encryption 參數,並將其值設定為 true。
請記得以您自己的值取代預留位置值:
az storage account encryption-scope create \
--resource-group <resource-group> \
--account-name <storage-account> \
--name <encryption-scope> \
--key-source Microsoft.Storage
在相同的租使用者中建立受客戶管理密鑰保護的加密範圍
若要建立受客戶管理密鑰保護的加密範圍,這些密鑰儲存在與存儲帳戶位於相同租使用者的密鑰保存庫或受控 HSM 中,請先為存儲帳戶設定客戶管理密鑰。 您必須將受控識別指派給具有存取金鑰保存庫許可權的記憶體帳戶。 受控識別可以是使用者指派的受控識別或系統指派的受控識別。 若要深入瞭解如何設定客戶管理的密鑰,請參閱 為現有的記憶體帳戶在相同租用戶中設定客戶管理的密鑰。
若要授與受控識別存取密鑰保存庫的許可權,請將受控識別指派 給 Key Vault 加密服務加密使用者 角色。
若要設定客戶管理的金鑰以搭配加密範圍使用,必須在金鑰保存庫或受控 HSM 上啟用清除保護。
下列範例示範如何使用系統指派的受控識別來設定加密範圍。 請記得將範例中的佔位元值取代為您自己的值:
az storage account update \
--name <storage-account> \
--resource-group <resource_group> \
--assign-identity
principalId=$(az storage account show --name <storage-account> \
--resource-group <resource_group> \
--query identity.principalId \
--output tsv)
$kvResourceId=$(az keyvault show \
--resource-group <resource-group> \
--name <key-vault> \
--query id \
--output tsv)
az role assignment create --assignee-object-id $principalId \
--role "Key Vault Crypto Service Encryption User" \
--scope $kvResourceId
接下來,使用 參數呼叫 --key-uri 命令,並指定密鑰 URI。 在金鑰 URI 中包含金鑰版本是選擇性的。 如果您省略金鑰版本,加密範圍會自動使用最新的金鑰版本。 如果您包含金鑰版本,則必須手動更新金鑰版本,才能使用不同的版本。
金鑰 URI 的格式類似下列範例,可從金鑰保存庫的 vaultUri 屬性和金鑰名稱建構:
# Without the key version
https://<key-vault>.vault.azure.net/keys/<key>
# With the key version
https://<key-vault>.vault.azure.net/keys/<key>/<version>
如果記憶體帳戶已啟用基礎結構加密,則會自動為新的加密範圍啟用它。 否則,您可以選擇是否啟用基礎結構加密來設置加密範圍。 若要建立已啟用基礎結構加密的新範圍,請包含 --require-infrastructure-encryption 參數,並將其值設定為 true。
請記得將範例中的佔位元值取代為您自己的值:
az storage account encryption-scope create \
--resource-group <resource-group> \
--account-name <storage-account> \
--name <encryption-scope> \
--key-source Microsoft.KeyVault \
--key-uri <key-uri>
在不同的租使用者中建立受客戶管理密鑰保護的加密範圍
若要建立受客戶管理的金鑰保護的加密範圍,這些金鑰儲存在與儲存體帳戶不同租戶中的金鑰庫或受控 HSM 中,請先為儲存體帳戶設定客戶管理的金鑰。 您必須為具有存取其他租戶中密鑰保存庫權限的儲存帳戶設定使用者指派的受控身分。 若要深入瞭解如何設定跨租用戶客戶管理的密鑰,請參閱 設定現有記憶體帳戶的跨租用戶客戶自控密鑰。
若要設定客戶管理的金鑰以搭配加密範圍使用,必須在金鑰保存庫或受控 HSM 上啟用清除保護。
在您設定了儲存體帳戶的跨租戶客戶管理金鑰之後,您可以在一個租戶的儲存體帳戶中建立一個加密範圍,其範圍配置為另一個租戶金鑰保管庫中的某個金鑰。 您將需要密鑰 URI 來建立跨租戶加密範圍。
請記得將範例中的佔位元值取代為您自己的值:
az storage account encryption-scope create \
--resource-group <resource-group> \
--account-name <storage-account> \
--name <encryption-scope> \
--key-source Microsoft.KeyVault \
--key-uri <key-uri>
若要在 Azure 入口網站中檢視記憶體帳戶的加密範圍,請瀏覽至記憶體帳戶的 [加密範圍 ] 設定。 在此窗格中,您可以啟用或停用加密範圍,或變更加密範圍的密鑰。
若要檢視客戶自控密鑰的詳細數據,包括金鑰 URI 和版本,以及金鑰版本是否自動更新,請遵循 [金鑰 ] 資料行中的連結。
若要使用 PowerShell 列出記憶體帳戶可用的加密範圍,請呼叫 Get-AzStorageEncryptionScope 命令。 請記得將範例中的佔位元值取代為您自己的值:
Get-AzStorageEncryptionScope -ResourceGroupName $rgName `
-StorageAccountName $accountName
若要依記憶體帳戶列出資源群組中的所有加密範圍,請使用管線語法:
Get-AzStorageAccount -ResourceGroupName $rgName | Get-AzStorageEncryptionScope
若要使用 Azure CLI 列出記憶體帳戶可用的加密範圍,請呼叫 az storage account encryption-scope list 命令。 請記得將範例中的佔位元值取代為您自己的值:
az storage account encryption-scope list \
--account-name <storage-account> \
--resource-group <resource-group>
若要在 Azure 入口網站中建立具有預設加密範圍的容器,請先建立加密範圍,如 建立加密範圍中所述。 接下來,請遵循下列步驟來建立容器:
流覽至記憶體帳戶中的容器清單,然後選取 [ 新增 ] 按鈕以建立容器。
展開 [新增容器] 窗格中的 [進階設定]。
在 [ 加密範圍 ] 下拉式清單中,選取容器的預設加密範圍。
若要要求容器中的所有 Blob 都使用預設加密範圍,請選取複選框以 針對容器中的所有 Blob 使用此加密範圍。 如果選取此複選框,則容器中的個別 Blob 無法覆寫預設加密範圍。
若要使用PowerShell建立具有預設加密範圍的容器,請呼叫 New-AzStorageContainer 命令,並指定參數的範圍 -DefaultEncryptionScope 。 若要強制容器中的所有 Blob 使用容器的預設範圍,請將 參數設定 -PreventEncryptionScopeOverride 為 true。
$containerName1 = "container1"
$ctx = New-AzStorageContext -StorageAccountName $accountName -UseConnectedAccount
# Create a container with a default encryption scope that cannot be overridden.
New-AzStorageContainer -Name $containerName1 `
-Context $ctx `
-DefaultEncryptionScope $scopeName1 `
-PreventEncryptionScopeOverride $true
若要使用 Azure CLI 建立具有預設加密範圍的容器,請呼叫 az storage container create 命令,並指定 參數的範圍 --default-encryption-scope 。 若要強制容器中的所有 Blob 使用容器的預設範圍,請將 參數設定 --prevent-encryption-scope-override 為 true。
下列範例會使用 Microsoft Entra 帳戶來授權作業,以便建立容器。 您也可以使用帳戶存取金鑰。 如需詳細資訊,請參閱使用 Azure CLI 授與 Blob 或佇列資料的存取權。
az storage container create \
--account-name <storage-account> \
--resource-group <resource-group> \
--name <container> \
--default-encryption-scope <encryption-scope> \
--prevent-encryption-scope-override true \
--auth-mode login
如果用戶端在將 Blob 上傳至具有預設加密範圍的容器時嘗試指定範圍,且該容器已設定為防止 Blob 覆寫預設範圍,則作業會失敗,並顯示容器加密原則禁止要求的訊息。
若要透過 Azure 入口網站上傳具有加密範圍的 Blob,請先建立加密範圍,如 建立加密範圍中所述。 接下來,請遵循下列步驟來建立 Blob:
流覽至您要上傳 Blob 的容器。
選取 [ 上傳] 按鈕,然後找出要上傳的 Blob。
展開 [進階] 設定於 [上傳 Blob] 窗格中。
找出 [加密範圍 ] 下拉式區段。 根據預設,如果已指定容器的預設加密範圍,則會使用該範圍來建立 Blob。 如果容器要求 Blob 使用預設加密範圍,則會停用此區段。
若要指定您要上傳之 Blob 的不同範圍,請選取 [ 選擇現有的範圍],然後從下拉式清單中選取所需的範圍。
若要透過PowerShell上傳具有加密範圍的 Blob,請呼叫 Set-AzStorageBlobContent 命令,並提供 Blob 的加密範圍。
$containerName2 = "container2"
$localSrcFile = "C:\temp\helloworld.txt"
$ctx = New-AzStorageContext -StorageAccountName $accountName -UseConnectedAccount
# Create a container with no default scope defined.
New-AzStorageContainer -Name $containerName2 -Context $ctx
# Upload a block upload with an encryption scope specified.
Set-AzStorageBlobContent -Context $ctx `
-Container $containerName2 `
-File $localSrcFile `
-Blob "helloworld.txt" `
-BlobType Block `
-EncryptionScope $scopeName2
若要透過 Azure CLI 上傳具有加密範圍的 Blob,請呼叫 az storage blob upload 命令,並提供 Blob 的加密範圍。
如果您使用 Azure Cloud Shell,請遵循 上傳 Blob 中所述的步驟,在根目錄中建立檔案。 然後,您可以使用下列範例將此檔案上傳至 Blob。
az storage blob upload \
--account-name <storage-account> \
--container-name <container> \
--file <file> \
--name <file> \
--encryption-scope <encryption-scope>
若要變更保護 Azure 入口網站中範圍的金鑰,請遵循下列步驟:
- 流覽至 [ 加密範圍] 索引 標籤,以檢視記憶體帳戶的加密範圍清單。
- 選取您想要修改的範圍旁的 [ 更多 ] 按鈕。
- 在 [ 編輯加密範圍 ] 窗格中,您可以將加密類型從Microsoft管理的密鑰變更為客戶管理的密鑰,反之亦然。
- 若要選取新的客戶管理的金鑰,請選取 [ 使用新的金鑰 ],並指定金鑰保存庫、金鑰和金鑰版本。
若要使用 PowerShell 將保護加密範圍的金鑰從客戶管理的密鑰變更為受Microsoft管理的金鑰,請呼叫 Update-AzStorageEncryptionScope 命令並傳入 -StorageEncryption 參數:
Update-AzStorageEncryptionScope -ResourceGroupName $rgName `
-StorageAccountName $accountName `
-EncryptionScopeName $scopeName2 `
-StorageEncryption
接下來,呼叫 Update-AzStorageEncryptionScope 命令,並傳入 -KeyUri 和 -KeyvaultEncryption 參數:
Update-AzStorageEncryptionScope -ResourceGroupName $rgName `
-StorageAccountName $accountName `
-EncryptionScopeName $scopeName1 `
-KeyUri $keyUri `
-KeyvaultEncryption
若要使用 Azure CLI 將保護加密範圍的金鑰從客戶管理的密鑰變更為Microsoft受控密鑰,請呼叫 az storage account encryption-scope update 命令,並使用 值--key-source傳入 Microsoft.Storage 參數:
az storage account encryption-scope update \
--account-name <storage-account> \
--resource-group <resource-group>
--name <encryption-scope> \
--key-source Microsoft.Storage
接下來,呼叫 az storage account encryption-scope update 命令、傳入 --key-uri 參數,並使用 值--key-source傳入 Microsoft.KeyVault 參數:
az storage account encryption-scope update \
--resource-group <resource-group> \
--account-name <storage-account> \
--name <encryption-scope> \
--key-source Microsoft.KeyVault \
--key-uri <key-uri>