Share via


設定 Azure 彈性 SAN 的客戶自控金鑰

所有寫入 彈性 SAN 磁碟區的資料都會使用資料加密金鑰 (DEK) 自動靜態加密。 Azure 使用信封加密以透過金鑰加密金鑰 (KEK) 加密 DEK。 依預設,KEK 由平台代控 (由 Microsoft 管理),但您可自行建立並管理。

本文示範如何使用 Azure Key Vault 中儲存的客戶自控金鑰來設定 彈性 SAN 磁碟區群組的加密。

限制

下列清單包含目前提供彈性 SAN 的區域及哪些區域同時支援區域備援儲存體 (ZRS) 和本地備援儲存體 (LRS) 或僅支援 LRS:

  • 南非北部 - LRS
  • 東亞 - LRS
  • 東南亞 - LRS
  • 巴西南部 - LRS
  • 加拿大中部 - LRS
  • 法國中部 - LRS 和 ZRS
  • 德國中西部 - LRS
  • 澳大利亞東部 - LRS
  • 北歐 - LRS 和 ZRS
  • 西歐 - LRS 和 ZRS
  • 英國南部 - LRS
  • 日本東部 - LRS
  • 南韓中部 - LRS
  • 美國中部
  • 美國東部 - LRS
  • 美國中南部 - LRS
  • 美國東部 2 - LRS
  • 美國西部 2 - LRS 和 ZRS
  • 美國西部 3 - LRS
  • 瑞典中部 - LRS
  • 瑞士北部 - LRS

必要條件

若要執行本文中所述的作業,您必須準備 Azure 帳戶和所計劃使用的管理工具。 準備包含安裝必要模組、登入帳戶,以及設定 PowerShell 和 Azure CLI 的變數。 本文整篇使用相同變數集,因此現在進行設定可讓您在所有範例中使用相同變數集。

若要使用 PowerShell 執行本文中所述的作業:

  1. 如果您尚未安裝最新版的 Azure PowerShell,請先安裝。

  2. 安裝 Azure PowerShell 後,請使用 Install-Module -Name Az.ElasticSan -Repository PSGallery 安裝彈性 SAN 延伸模組的版本 0.1.2 或更新版本。

  3. 登入Azure。

    Connect-AzAccount
    

建立要在本文 PowerShell 範例中使用的變數

複製範例程式碼並將所有預留位置文字取代為您自己的值。 在本文的所有範例中使用相同變數:

# Define some variables
# The name of the resource group where the resources will be deployed.
$RgName          = "ResourceGroupName"

# The name of the Elastic SAN that contains the volume group to be configured.
$EsanName        = "ElasticSanName"

# The name of the Elastic SAN volume group to be configured.
$EsanVgName      = "ElasticSanVolumeGroupName"

# The region where the new resources will be created.
$Location        = "Location"

# The name of the Azure Key Vault that will contain the KEK.
$KvName          = "KeyVaultName"

# The name of the Azure Key Vault key that is the KEK.
$KeyName         = "KeyName"

# The name of the user-assigned managed identity, if applicable.
$ManagedUserName = "ManagedUserName"

設定金鑰保存庫

您可以使用新的或現有的金鑰保存庫來儲存客戶自控金鑰。 加密資源和金鑰保存庫可位於相同 Microsoft Entra ID 租用戶的不同區域或訂用帳戶。 若要深入了解 Azure Key Vault,請參閱 Azure Key Vault 概觀什麼是 Azure Key Vault?

要將客戶自控金鑰用於加密,必須為金鑰保存庫啟用虛刪除和清除保護。 依預設會在您建立新金鑰保存庫時啟用虛刪除,且無法停用。 您可以在建立金鑰保存庫時或建立後啟用清除保護。 Azure 彈性 SAN 加密支援大小 2048、3072 和 4096 的 RSA 金鑰。

Azure Key Vault 支援透過 Azure RBAC 權限模型向 Azure RBAC 授權。 Microsoft 建議透過金鑰保存庫存取原則使用 Azure RBAC 權限模型。 如需詳細資訊,請參閱使用 Azure RBAC 授與權限至應用程式以存取 Azure Key Vault

準備金鑰保存庫作為磁碟區群組 KEK 存放區包含兩個步驟:

  • 建立已啟用虛刪除和清除保護的新金鑰保存庫,或啟用現有金鑰保存酷的清除保護。
  • 建立或指派具備備份、建立、刪除、取得、匯入、取得、列出、更新、還原權限的 Azure RBAC 角色。

下列範例將:

  • 建立已啟用虛刪除和清除保護的新金鑰保存庫。
  • 取得使用者帳戶的 UPN。
  • 將新金鑰保存庫的 Key Vault 密碼編譯長角色指派給您的帳戶。

使用您在本文先前定義的相同變數

# Setup the parameters to create the key vault.
$NewKvArguments = @{
    Name                    = $KvName
    ResourceGroupName       = $RgName
    Location                = $Location
    EnablePurgeProtection   = $true
    EnableRbacAuthorization = $true
}

# Create the key vault.
$KeyVault = New-AzKeyVault @NewKvArguments

# Get the UPN of the currently loggged in user.
$MyAccountUpn = (Get-AzADUser -SignedIn).UserPrincipalName

# Setup the parameters to create the role assignment.
$CrptoOfficerRoleArguments = @{
    SignInName         = $MyAccountUpn
    RoleDefinitionName = "Key Vault Crypto Officer"
    Scope              = $KeyVault.ResourceId
}

# Assign the Cypto Officer role to your account for the key vault.
New-AzRoleAssignment @CrptoOfficerRoleArguments

若要了解如何使用 PowerShell 在現有的金鑰保存庫上啟用清除保護,請參閱 Azure Key Vault 復原概觀

如需如何使用 PowerShell 指派 RBAC 角色的詳細資訊,請參閱使用 Azure PowerShell 指派 Azure 角色

新增金鑰

接著,將金鑰新增至金鑰保存庫。 新增金鑰之前,請確定您已將金鑰保存庫密碼編譯人員角色指派給自己。

Azure 儲存體和彈性 SAN 加密支援大小 2048、3072 和 4096 的 RSA 金鑰。 若要進一步了解支援的金鑰類型,請參閱關於金鑰

透過 PowerShell 使用這些範例命令,將金鑰新增至金鑰保存庫。 使用您在本文先前定義的相同變數

# Get the key vault where the key is to be added.
$KeyVault = Get-AzKeyVault -ResourceGroupName $RgName -VaultName $KvName

# Setup the parameters to add the key to the vault.
$NewKeyArguments = @{
    Name        = $KeyName
    VaultName   = $KeyVault.VaultName
    Destination = "Software"
}

# Add the key to the vault.
$Key = Add-AzKeyVaultKey @NewKeyArguments

選擇金鑰輪替策略

遵循密碼編譯最佳做法表示定期 (通常至少每兩年一次) 輪替保護彈性 SAN 磁碟區群組的金鑰。 Azure 彈性 SAN 一律不會修改金鑰保存庫中的金鑰,但您可以設定金鑰輪替原則,根據您的合規性需求輪替金鑰。 如需詳細資訊,請參閱在 Azure Key Vault 中設定密碼編譯金鑰自動輪替

在金鑰保存庫中輪替金鑰後,必須更新彈性 SAN 磁碟區群組的加密設定,才能使用新金鑰版本。 客戶自控金鑰支援自動和手動更新 KEK 版本。 請先決定要使用的方法,然後再設定新或現有磁碟區群組的客戶自控金鑰。

如需金鑰輪替的詳細資訊,請參閱更新金鑰版本

重要

當您修改金鑰或金鑰版本時,根資料加密金鑰的保護會變更,但 Azure 彈性 SAN 磁碟區群組中的資料會一直保持加密。 您不需要在電腦上執行其他動作,就可以確保您的資料受到保護。 輪替金鑰版本不會影響效能,且不會發生與動作相關聯的停機。

自動金鑰版本輪替

Azure 彈性 SAN 可自動更新用於加密的客戶自控金鑰,以使用金鑰保存庫中的最新金鑰版本。 彈性 SAN 會每天檢查金鑰保存庫是否有新的金鑰版本。 當新版本可供使用時,便會自動開始使用最新版本的金鑰進行加密。 當您輪替金鑰時,請務必等候 24 小時,再停用舊版金鑰。

重要

如果已將彈性 SAN 磁碟區群組設定為手動更新金鑰版本,且您想要將其變更為自動更新,請將金鑰版本變更為空白字串。 如需手動變更金鑰版本的詳細資訊,請參閱自動更新金鑰版本

手動金鑰版本輪替

如果您偏好手動更新金鑰版本,請在使用客戶自控金鑰設定加密時指定特定版本的 URI。 當指定 URI 時,若在金鑰保存庫中建立新版本,彈性 SAN 則不會自動更新金鑰版本。 若要讓彈性 SAN 使用新金鑰版本,您必須手動加以更新。

若要在 Azure 入口網站中找到特定金鑰版本的 URI:

  1. 瀏覽至您的金鑰保存庫。
  2. 在 [物件] 下選取 [金鑰]
  3. 選取所需金鑰以檢視其版本。
  4. 選取金鑰版本以檢視該版本的設定。
  5. 複製 [金鑰識別碼] 欄位的值,以提供 URI。
  6. 儲存複製的文字,以便稍後在設定磁碟區群組的加密時使用。

Screenshot showing key vault key URI in Azure portal.

選擇受控識別以授與金鑰保存庫的存取權

當您啟用彈性 SAN 磁碟區群組的客戶自控加密金鑰時,您必須指定受控識別,用以授權存取包含該金鑰的金控保存庫。 受控識別必須有下列權限:

  • get
  • wrapkey
  • unwrapkey

授權存取金鑰保存庫的受控識別可以是使用者指派或系統指派的受控識別。 若要深入了解系統指派與使用者指派的受控識別,請參閱受控識別類型

當建立磁碟區群組時,便會自動建立該磁碟區群組的系統指派識別。 如果您要使用使用者指派的識別,請先加以建立,然後再設定磁碟區群組的客戶自控加密金鑰。 若要了解如何建立及管理使用者指派的受控識別,請參閱管理使用者指派的受控識別

使用使用者指派的受控識別來授與存取權

當您啟用新磁碟區群組的客戶自控金鑰時,必須指定使用者指派的受控識別。 現有磁碟區群組支援使用使用者指派的受控識別或系統指派的受控識別以設定客戶自控金鑰。

當您使用使用者指派的受控識別來設定客戶自控金鑰時,會使用使用者指派的受控識別來授權存取包含金鑰的金鑰保存庫。 在設定客戶自控金鑰之前,必須先建立使用者指派的身分識別。

使用者指派的受控識別是獨立的 Azure 資源。 若要深入了解使用者指派的受控識別,請參閱受控識別類型。 若要了解如何建立及管理使用者指派的受控識別,請參閱管理使用者指派的受控識別

使用者指派的受控識別必須有權限可存取金鑰保存庫中的金鑰。 您可手動授與識別的權限,或指派金鑰保存庫範圍的內建角色以授與這些權限。

下列範例顯示如何:

  • 建立新使用者指派的受控識別。
  • 等候完成建立使用者指派的識別。
  • 從新的識別取得 PrincipalId
  • 將 RBAC 角色指派給範圍設定為金鑰保存庫的新識別。

使用您在本文先前定義的相同變數

# Create a new user-assigned managed identity.
$UserIdentity = New-AzUserAssignedIdentity -ResourceGroupName $RgName -Name $ManagedUserName -Location $Location

提示

等候大約 1 分鐘完成建立使用者指派的識別,然後再繼續進行。

# Get the `PrincipalId` for the new identity.
$PrincipalId = $UserIdentity.PrincipalId

# Setup the parameters to assign the Crypto Service Encryption User role.
$CryptoUserRoleArguments = @{
    ObjectId           = $PrincipalId
    RoleDefinitionName = "Key Vault Crypto Service Encryption User"
    Scope              = $KeyVault.ResourceId
}

# Assign the Crypto Service Encryption User role to the managed identity so it can access the key in the vault.
New-AzRoleAssignment @CryptoUserRoleArguments

使用系統指派的受控識別來授與存取權

系統指派的受控識別與 Azure 服務的執行個體相關聯,例如 Azure 彈性 SAN 磁碟區群組。

系統指派的受控識別必須有權限可存取金鑰保存庫中的金鑰。 本文針對金鑰範圍的系統指派受控識別使用 Key Vault 密碼編譯服務加密使用者角色,以授與這些權限。

當建立磁碟區群組時,如果使用 New-AzElasticSanVolumeGroup 命令指定 -IdentityType "SystemAssigned" 參數,便會自動建立該磁碟區群組的系統指派識別。 在建立磁碟區群組之後,才可使用系統指派的識別。 您必須也先將適當的角色 (例如 Key Vault 密碼編譯服務加密使用者角色) 指派給識別,才能存取金鑰保存庫中的加密金鑰。 因此,在建立磁碟區群組期間,您無法將客戶自控金鑰設定為使用系統指派的識別。 當您使用客戶自控金鑰建立新磁碟區群組時,您必須在建立磁碟區群組時使用使用者指派的識別,也可在建立磁碟區群組後設定系統指派的識別。

使用此範例程式碼以將所需的 RBAC 角色指派給範圍設定為金鑰保存庫的系統指派受控識別。 使用您在本文先前定義的相同變數

# Get the Elastic SAN volume group.
$ElasticSanVolumeGroup = Get-AzElasticSanVolumeGroup -Name $EsanVgName -ElasticSanName $EsanName -ResourceGroupName $RgName

# Generate a system-assigned identity if one does not already exist.
If ($ElasticSanVolumeGroup.IdentityPrincipalId -eq $null) {
Update-AzElasticSanVolumeGroup -ResourceGroupName $RgName -ElasticSanName $EsanName -Name $EsanVgName -IdentityType "SystemAssigned"}

# Get the `PrincipalId` (system-assigned identity) of the volume group.
$PrincipalId = $ElasticSanVolumeGroup.IdentityPrincipalId

# Setup the parameters to assign the Crypto Service Encryption User role.
$CryptoUserRoleArguments = @{
    ObjectId           = $PrincipalId
    RoleDefinitionName = "Key Vault Crypto Service Encryption User"
    Scope              = $KeyVault.ResourceId
}

# Assign the Crypto Service Encryption User role.
New-AzRoleAssignment @CryptoUserRoleArguments

設定磁碟區群組的客戶自控金鑰

選取 [Azure PowerShell 模組] 或 [Azure CLI] 索引標籤,以取得如何使用偏好管理工具設定客戶自控加密金鑰的指示。

您現在已選取 PowerShell,請選取對應的索引標籤,決定是否要在建立新磁碟區群組期間進行設定,還是更新現有磁碟區群組的設定。

使用此範例,在使用 PowerShell 建立新磁碟區群組期間,透過自動更新金鑰版本來設定客戶自控金鑰:

# Setup the parameters to create the volume group.
$NewVgArguments        = @{
    Name                         = $EsanVgName
    ElasticSanName               = $EsanName
    ResourceGroupName            = $RgName
    ProtocolType                 = "Iscsi"
    Encryption                   = "EncryptionAtRestWithCustomerManagedKey"
    KeyName                      = $KeyName
    KeyVaultUri                  = $KeyVault.VaultUri
    IdentityType                 = "UserAssigned"
    IdentityUserAssignedIdentity = @{$UserIdentity.Id=$UserIdentity}
    EncryptionIdentityEncryptionUserAssignedIdentity = $UserIdentity.Id
}

# Create the volume group.
New-AzElasticSanVolumeGroup @NewVgArguments

若要在使用 PowerShell 建立新磁碟區群組期間,透過手動更新金鑰版本來設定客戶自控金鑰,請新增 KeyVersion 參數,如此範例所示:

# Setup the parameters to create the volume group.
$NewVgArguments        = @{
    Name                         = $EsanVgName
    ElasticSanName               = $EsanName
    ResourceGroupName            = $RgName
    ProtocolType                 = "Iscsi"
    Encryption                   = "EncryptionAtRestWithCustomerManagedKey"
    KeyName                      = $KeyName
    KeyVaultUri                  = $KeyVault.VaultUri
    KeyVersion                   = $Key.Version
    IdentityType                 = "UserAssigned"
    IdentityUserAssignedIdentity = @{$UserIdentity.Id=$UserIdentity}
    EncryptionIdentityEncryptionUserAssignedIdentity = $UserIdentity.Id
}

# Create the volume group.
New-AzElasticSanVolumeGroup @NewVgArguments

下一步