如何加密 Windows VM 上的虚拟磁盘

为了增强虚拟机 (VM) 的安全性以及符合性,可以加密 Azure 中的虚拟磁盘。 磁盘是使用 Azure 密钥保管库中受保护的加密密钥加密的。 可以控制这些加密密钥,以及审核对它们的使用。 本文详细阐述如何使用 Azure PowerShell 加密 Windows VM 上的虚拟磁盘。 还可使用 Azure CLI 2.0 加密 Linux VM

磁盘加密概述

Windows VM 上的虚拟磁盘使用 Bitlocker 进行静态加密。 加密 Azure 中的虚拟磁盘不会产生费用。 使用软件保护将加密密钥存储在 Azure 密钥保管库中,或者,可在已通过 FIPS 140-2 级别 2 标准认证的硬件安全模块 (HSM) 中导入或生成密钥。 这些加密密钥用于加密和解密附加到 VM 的虚拟磁盘。 可以控制这些加密密钥,以及审核对它们的使用。 打开和关闭 VM 时,Azure Active Directory 服务主体提供一个安全机制用于颁发这些加密密钥。

加密 VM 的过程如下:

在 Azure 密钥保管库中创建加密密钥。

配置可用于加密磁盘的加密密钥。

若要从 Azure Key Vault 中读取加密密钥,可创建具有相应权限的 Azure Active Directory 服务主体。

发出加密虚拟磁盘的命令,指定要使用的 Azure Active Directory 服务主体和相应的加密密钥。

Azure Active Directory 服务主体将从 Azure Key Vault 请求所需的加密密钥。

使用提供的加密密钥加密虚拟磁盘。

加密过程

磁盘加密依赖于以下附加组件:

Azure 密钥保管库- 用于保护磁盘加密/解密过程中使用的加密密钥和机密。

可以使用现有的 Azure 密钥保管库(如果有)。 不需要专门使用某个密钥保管库来加密磁盘。

要将管理边界和密钥可见性隔离开来,可以创建专用的密钥保管库。

Azure Active Directory- 处理所需加密密钥的安全交换,以及对请求的操作执行的身份验证。

通常,可以使用现有的 Azure Active Directory 实例来容装应用程序。

服务主体提供了安全机制,可用于请求和获取相应的加密密钥。 实际并不需要开发与 Azure Active Directory 集成的应用程序。

要求和限制

磁盘加密支持的方案和要求

在来自 Azure 应用商店映像或自定义 VHD 映像的新 Windows VM 上启用加密。

在现有的 Azure Windows VM 上启用加密。

在使用存储空间配置的 Windows VM 上启用加密。

在 Windows VM 的 OS 和数据驱动器上禁用加密。

所有资源(例如密钥保管库、存储帐户和 VM)必须在同一个 Azure 区域和订阅中。

标准层 VM,例如 A、D 和 DS 系列 VM。

以下方案目前不支持磁盘加密:

基本层 VM。

使用经典部署模型创建的 VM。

在已加密的 VM 上更新加密密钥。

与本地密钥管理服务集成。

创建 Azure Key Vault 和密钥

在开始之前,请确保已安装了 Azure PowerShell 模块的最新版本。 有关详细信息,请参阅如何安装和配置 Azure PowerShell。 在整个命令示例中,请将所有示例参数替换为自己的名称、位置和密钥值。 以下示例使用myResourceGroupmyKeyVaultmyVM等的约定。

第一步是创建用于存储加密密钥的 Azure 密钥保管库。 Azure 密钥保管库可以存储能够在应用程序和服务中安全实现的密钥、机密或密码。 对于虚拟磁盘加密,可以创建 Key Vault 来存储用于加密或解密虚拟磁盘的加密密钥。

在 Azure 订阅中使用Register-AzureRmResourceProvider启用 Azure Key Vault 提供程序,并使用New-AzureRmResourceGroup创建一个资源组。 以下示例在“中国东部”位置创建名为myResourceGroup的资源组。

PowerShell复制

$rgName="myResourceGroup"$location="China East"Register-AzureRmResourceProvider-ProviderNamespace"Microsoft.KeyVault"New-AzureRmResourceGroup-Location$location-Name$rgName

包含加密密钥和关联的计算资源(例如存储和 VM 本身)的 Azure 密钥保管库必须位于同一区域。 使用New-AzureRmKeyVault创建 Azure Key Vault,并启用该 Key Vault 进行磁盘加密。 指定keyVaultName的唯一 Key Vault 名称,如下所示:

PowerShell复制

$keyVaultName="myUniqueKeyVaultName"New-AzureRmKeyVault-Location$location`-ResourceGroupName$rgName`-VaultName$keyVaultName`-EnabledForDiskEncryption

可以使用软件或硬件安全模型 (HSM) 保护来存储加密密钥。 使用 HSM 时需要高级密钥保管库。 与用于存储受软件保护的密钥的标准密钥保管库不同,创建高级密钥保管库会产生额外的费用。 若要创建高级 Key Vault,请在上一步中添加-Sku "Premium"参数。 由于我们创建的是标准密钥保管库,以下示例使用了受软件保护的密钥。

对于这两种保护模型,在启动 VM 解密虚拟磁盘时,都需要向 Azure 平台授予请求加密密钥的访问权限。 使用Add-AzureKeyVaultKey在 Key Vault 中创建加密密钥。 以下示例创建名为myKey的密钥:

PowerShell复制

Add-AzureKeyVaultKey-VaultName$keyVaultName`-Name"myKey"`-Destination"Software"

创建 Azure Active Directory 服务主体

加密或解密虚拟磁盘时,将指定一个帐户来处理身份验证,以及从 Key Vault 交换加密密钥。 此帐户(Azure Active Directory 服务主体)允许 Azure 平台代表 VM 请求相应的加密密钥。 订阅中提供了一个默认的 Azure Active Directory 实例,不过,许多组织使用专用的 Azure Active Directory 目录。

使用New-AzureRmADServicePrincipal在 Azure Active Directory 中创建服务主体。 若要指定安全密码,请遵循Azure Active Directory 中的密码策略和限制

PowerShell复制

$appName="My App"$securePassword="P@ssword!"$app=New-AzureRmADApplication-DisplayName$appName`-HomePage"https://myapp.contoso.com"`-IdentifierUris"https://contoso.com/myapp"`-Password$securePasswordNew-AzureRmADServicePrincipal-ApplicationId$app.ApplicationId

要成功加密或解密虚拟磁盘,必须将 Key Vault 中存储的加密密钥的权限设置为允许 Azure Active Directory 服务主体读取密钥。 使用Set-AzureRmKeyVaultAccessPolicy设置 Key Vault 的权限:

PowerShell复制

Set-AzureRmKeyVaultAccessPolicy-VaultName$keyvaultName`-ServicePrincipalName$app.ApplicationId `-PermissionsToKeys"WrapKey"`-PermissionsToSecrets"Set"

创建虚拟机

若要测试加密过程,请创建 VM。 以下示例使用Windows Server 2016 Datacenter映像创建名为myVM的 VM:

PowerShell复制

$subnetConfig=New-AzureRmVirtualNetworkSubnetConfig-NamemySubnet-AddressPrefix192.168.1.0/24$vnet=New-AzureRmVirtualNetwork-ResourceGroupName$rgName`-Location$location`-NamemyVnet `-AddressPrefix192.168.0.0/16`-Subnet$subnetConfig$pip=New-AzureRmPublicIpAddress-ResourceGroupName$rgName`-Location$location`-AllocationMethodStatic `-IdleTimeoutInMinutes4`-Name"mypublicdns$(Get-Random)"$nsgRuleRDP=New-AzureRmNetworkSecurityRuleConfig-NamemyNetworkSecurityGroupRuleRDP `-ProtocolTcp `-DirectionInbound `-Priority1000`-SourceAddressPrefix* `-SourcePortRange* `-DestinationAddressPrefix* `-DestinationPortRange3389`-AccessAllow$nsg=New-AzureRmNetworkSecurityGroup-ResourceGroupName$rgName`-Location$location`-NamemyNetworkSecurityGroup `-SecurityRules$nsgRuleRDP$nic=New-AzureRmNetworkInterface-NamemyNic `-ResourceGroupName$rgName`-Location$location`-SubnetId$vnet.Subnets[0].Id `-PublicIpAddressId$pip.Id `-NetworkSecurityGroupId$nsg.Id$cred=Get-Credential$vmName="myVM"$vmConfig=New-AzureRmVMConfig-VMName$vmName-VMSizeStandard_D1 | `Set-AzureRmVMOperatingSystem-Windows-ComputerNamemyVM-Credential$cred| `Set-AzureRmVMSourceImage-PublisherNameMicrosoftWindowsServer `-OfferWindowsServer-Skus2016-Datacenter-Versionlatest | `Add-AzureRmVMNetworkInterface-Id$nic.IdNew-AzureRmVM-ResourceGroupName$rgName-Location$location-VM$vmConfig

加密虚拟机

要加密虚拟磁盘,可将前面的所有组件合并在一起:

指定 Azure Active Directory 服务主体和密码。

指定用于存储加密磁盘元数据的密钥保管库。

指定用于实际加密和解密的加密密钥。

指定是要加密 OS 磁盘、数据磁盘还是所有磁盘。

使用 Azure Key Vault 密钥和 Azure Active Directory 服务主体凭据通过Set-AzureRmVMDiskEncryptionExtension加密 VM。 以下示例检索所有密钥信息,并对名为myVM的 VM 进行加密:

PowerShell复制

$keyVault=Get-AzureRmKeyVault-VaultName$keyVaultName-ResourceGroupName$rgName;$diskEncryptionKeyVaultUrl=$keyVault.VaultUri;$keyVaultResourceId=$keyVault.ResourceId;$keyEncryptionKeyUrl= (Get-AzureKeyVaultKey-VaultName$keyVaultName-NamemyKey).Key.kid;Set-AzureRmVMDiskEncryptionExtension-ResourceGroupName$rgName`-VMName$vmName`-AadClientID$app.ApplicationId `-AadClientSecret$securePassword`-DiskEncryptionKeyVaultUrl$diskEncryptionKeyVaultUrl`-DiskEncryptionKeyVaultId$keyVaultResourceId`-KeyEncryptionKeyUrl$keyEncryptionKeyUrl`-KeyEncryptionKeyVaultId$keyVaultResourceId

接受提示以继续进行 VM 加密。 此过程中将重启 VM。 加密过程完成并重启 VM 后,使用Get-AzureRmVmDiskEncryptionStatus查看加密状态:

PowerShell复制

Get-AzureRmVmDiskEncryptionStatus-ResourceGroupName$rgName-VMName$vmName

输出类似于以下示例:

PowerShell复制

OsVolumeEncrypted          : Encrypted

DataVolumesEncrypted      : Encrypted

OsVolumeEncryptionSettings : Microsoft.Azure.Management.Compute.Models.DiskEncryptionSettings

ProgressMessage            : OsVolume: Encrypted, DataVolumes: Encrypted

后续步骤

有关 Azure Key Vault 管理的详细信息,请参阅为虚拟机设置 Key Vault

有关磁盘加密的详细信息,例如准备要上传到 Azure 的已加密自定义 VM,请参阅Azure Disk Encryption(Azure 磁盘加密)。立即访问http://market.azure.cn

©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 159,015评论 4 362
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 67,262评论 1 292
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 108,727评论 0 243
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 43,986评论 0 205
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 52,363评论 3 287
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 40,610评论 1 219
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 31,871评论 2 312
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 30,582评论 0 198
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 34,297评论 1 242
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 30,551评论 2 246
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 32,053评论 1 260
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 28,385评论 2 253
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 33,035评论 3 236
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 26,079评论 0 8
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 26,841评论 0 195
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 35,648评论 2 274
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 35,550评论 2 270

推荐阅读更多精彩内容