系统极客一直在努力
专注于操作系统及软件使用教程

Azure Disk Encryption磁盘加密实操

Azure Disk Encryption

在前文中我们曾对 Azure Disk Encryption(Azure磁盘加密)功能进行过简要介绍,相信已经有不少关注此功能的朋友已经看过相关白皮书了。但微软文档冗长复杂,本文中我们将实际介绍如何对 Azure VM 虚拟机进行磁盘加密操作。

本文内容主要包括如下 3 个大的方面:

  • 如何对 Azure IaaS VM 启用 Azure 磁盘加密
  • 如何查看虚拟机加密状态
  • 如何枚举 Azure 密钥保管库中存储的加密密钥

先决条件

为保证顺利实施 Azure VM 磁盘加密,需要大家的操作环境满足如下先决条件:

  • Azure 订阅:这个没啥好说的吧
  • Azure PowerShell:请务必使用最新版本的 Azure PowerShell Version 1.2.1 来配置 Azure Disk Encryption。前文简介时已经提过,Azure Disk Encryption 不支持 Azure SDK Version 1.1.0
  • Azure 密钥保管库:Azure Disk Encryption 使用 Azure 密钥保管库进行密钥存储,为了保证加密密钥不能跨越 Azure 数据中心边界,所以 Azure Disk Encryption 需要密钥保管库与要加密的 VM 共存于同一区域。
  • Azure Active Directory:为将加密密钥写入特定的密钥保管库,Azure Disk Encryption 需要使用 Azure AD 的应用程序客户端 ID和密钥以保证有权限读写 Azure 密钥保管库。
  • Azure VM:Azure Disk Encryption 功能仅适用于使用 ARM 创建的 Azure VM。

由于 Azure 磁盘加密与 Azure 密钥保管库结合得异常紧密,甚至可以说是 Azure 密钥保管库分化出来的一个子功能,因此需要大家必需事先了解如何创建和管理Azure Key Vault密钥保管库

加密Azure VM

在满足上述所列的前提条件后,我们便可以开始着手加密一台 Azure VM。请按如下步骤在 Azure PowerShell 中进行操作:

1 登录 Azure 管理员账号

Login-AzureRmAccount

2 获取可用 Azure 订阅

Get-AzureRmSubscription

3 选择要加密 Azure VM 所在订阅

Select-AzureRmSubscription -SubscriptionName "<订阅名称>"

4 在正式加密 Azure VM 之前,我们先在 PowerShell 中预先初始化一些变量,诸如:资源组名称、指定要加密的虚拟机、密钥保管库、Azure AD 信息等。

$rgName = ‘资源组名称';
$vmName = ‘虚拟机名称';
 
$aadClientID = 'Azure AD 应用程序客户端ID';
$aadClientSecret = 'Azure AD 应用程序密钥';
 
$KeyVaultName = ‘KeyVault名称';
$KeyVault = Get-AzureRmKeyVault -VaultName $KeyVaultName -ResourceGroupName $rgname;
$diskEncryptionKeyVaultUrl = $KeyVault.VaultUri;
$KeyVaultResourceId = $KeyVault.ResourceId;

azure-disk-encryption-introduction-mgt-2

5 在虚拟机加密过程中,所产生的加密密钥将被写入到密钥保管库,因此 Azure AD 应用程序必需有将机密数据写入到密钥保管库的权限。大家可以使用如下命令来进行授权:

Set-AzureRmKeyVaultAccessPolicy -VaultName $KeyVaultName -ServicePrincipalName $aadClientID -PermissionsToKeys all -PermissionsToSecrets all -ResourceGroupName $rgname;

6 使用如下命令启用 Azure 密钥保管库对 Azure Disk Encryption 磁盘加密的支持功能:

Set-AzureRmKeyVaultAccessPolicy -VaultName $KeyVaultName -ResourceGroupName $rgname –EnabledForDiskEncryption

在所有准备工作都完成之后,当然就是要实际对 Azure VM 进行加密操作了。使用 Set-AzureRmVmDiskEncryptionExtension 可直接启用 Azure VM 的加密选项,该 cmdlet 会使用指定 Azure AD 凭据将加密密钥写入到密钥保管库之后开始对虚拟机执行加密操作。

Set-AzureRmVMDiskEncryptionExtension -ResourceGroupName $rgname -VMName $vmName -AadClientID $aadClientID -AadClientSecret $aadClientSecret -DiskEncryptionKeyVaultUrl $diskEncryptionKeyVaultUrl -DiskEncryptionKeyVaultId $KeyVaultResourceId;

由于加密操作过程会执行 10 至 15分钟,时间会比较长,而且可能会重启虚拟机,所以大家在操作前最好先保存正常执行的操作。

一旦你已经启用或部署加密的 Azure VM,可以使用 Get-AzureRmVmDiskEncryptionStatus cmdlet 查看系统盘、数据盘加密状态和加密密钥所在密钥保管库的实际 URL:

Get-AzureRmVmDiskEncryptionStatus  -ResourceGroupName $rgname -VMName $vmName

azure-disk-encryption-introduction-mgt-3

列出已加密虚拟机

如果您的订阅中有很多虚拟机,并要分别查看虚拟机的系统盘的数据盘的加密状态,可以使用如下 Powershell 脚本:

$osVolEncrypted = {(Get-AzureRmVMDiskEncryptionStatus -ResourceGroupName $_.ResourceGroupName -VMName $_.Name).OsVolumeEncrypted}
$dataVolEncrypted= {(Get-AzureRmVMDiskEncryptionStatus -ResourceGroupName $_.ResourceGroupName -VMName $_.Name).DataVolumesEncrypted}
Get-AzureRmVm | Format-Table @{Label=”VM”; Expression={$_.Name}}, @{Label=”系统盘加密状态”; Expression=$osVolEncrypted}, @{Label=”数据盘加密状态”; Expression=$dataVolEncrypted} -AutoSize

azure-disk-encryption-introduction-mgt-4

列出加密磁盘对应密钥

要查看订阅中所有已使用 Azure Disk Encryption 功能加密的磁盘及其在密钥保管库中所对应的加密密钥,可以使用如下脚本:

Get-AzureKeyVaultSecret -VaultName $KeyVaultName | where {$_.Tags.ContainsKey('DiskEncryptionKeyFileName')} | format-table @{Label='VM'; Expression={$_.Tags['MachineName']}}, @{Label='VolumeLetter'; Expression={$_.Tags['VolumeLetter']}}, @{Label='EncryptionKeyURL'; Expression={$_.Id}}

azure-disk-encryption-introduction-mgt-5

分享到:更多 ()