Skip to main content

Windows Azure Pack. Создание Shielded VM

Дата публикации: 31.05.2017

Shielded VM (экранированные виртуальные машины) – принципиально новая технология Windows Server 2016, которая позволяет владельцу виртуальной машины включить шифрование томов внутри гостевой ОС. Cодержимое ВМ становится недоступным как для вредоносного кода на узле Hyper-V, так и для администратора этого узла. В Windows Azure Pack возможность создания экранированных машин появилась начиная с версии Update Rollup 10.

Для создания защищенной виртуальной машины нам потребуется система с операционной системой Windows Server 2016 или Windows 10 и установленным компонентом "Shielded VM Tools".

Для установки компонента "Shielded VM Tools" на Windows Server 2016 необходимо выполнить в PowerShell:

Add-WindowsFeature RSAT-Shielded-VM-Tools

Для Windows 10 необходимо cкачать и установить  оснастку RSAT.

Далее нам необходимо скачать из пользовательского портала WAP два файла:

1. kpsmetadata.xml содержит открытые ключи для шифрования данных

2. disk_.vsc файл с данными подписи диска для защищенной ВМ.
 

Скачанные файлы копируем в каталог "C:\Shield".

Теперь нам надо сгенерировать файл содержащий данные экранирования, с использованием которых будет создана экранированная ВМ. Для этого мы можем воспользоваться скриптом. Он автоматически установит модуль  GuardedFabricTools, а так же создаст все оставшиеся файлы, необходимые для генерации Shielding Data File (PDK).
 

#VARS
 
$HgsGuardian = "C:\Shield\kpsmetadata.xml"
 
$vscPath = "C:\Shield\disk_ID.vsc"
 
$unattendPath = "C:\Shield\unattend.xml" #Answer File (if not exists, will be create)
 
$CRTPath = "C:\Shield\myrdpcert.pfx" #RDP certificate (if not exists, will be create)
 
$pdkPath = "C:\Shield\MyShieldData.pdk" #New PDK Path (will be create)
 
 
 
###Optional. Need for creating unattend.xml
 
$VMadminpwd = ConvertTo-SecureString "ServerAdminP$wd" -AsPlainText -Force #VM administrator password
 
$RDPCRTpwd = ConvertTo-SecureString "SertPasswd" -AsPlainText -Force #CRT password
 
###Optional. Need for creating RDP self-signed certificate
 
$DNSname = "rdp.contoso.local"
 
 
 
##BODY
 
 
 
#If unattend.xml file not exixts, create
 
 
 
if (!(test-path $unattendPath)) {
 
 
 
#Install GuardedFabricTools module
 
 
 
if (!(Get-Command New-ShieldingDataAnswerFile -ErrorAction SilentlyContinue)) {
 
 
 
Install-Module -Name GuardedFabricTools -Force
 
 
 
}
 
 
 
# If RDP certificate file not exists, create and export
 
if (!(test-path $CRTPath)) {
 
 
 
$SelfSignedCert = New-SelfSignedCertificate -DnsName $DNSname -CertStoreLocation Cert:\CurrentUser\My
 
Export-PfxCertificate -Cert $SelfSignedCert -FilePath $CRTPath -Password $RDPCRTpwd
 
 
 
}
 
 
 
#Create answer file without joining a domain
 
New-ShieldingDataAnswerFile -AdminPassword $VMadminpwd -RDPCertificateFilePath $CRTPath -RDPCertificatePassword $RDPCRTpwd -Path $unattendPath
 
 
 
}
 
 
 
Import-Module ShieldedVMDataFile
 
 
 
Set-HgsClientConfiguration –EnableLocalMode
 
Import-HgsGuardian -FilePath $HgsGuardian -Name ActivecloudFabric -AllowUntrustedRoot –ErrorAction SilentlyContinue
 
New-HgsGuardian –Name DefaultOwner –GenerateCertificates –ErrorAction SilentlyContinue
 
$pdkOwner = Get-HgsGuardian -Name DefaultOwner
 
$pdkGuardian = Get-HgsGuardian -Name ActivecloudFabric
 
$volumeIDQualifier = @(New-VolumeIDQualifier -VolumeSignatureCatalogFilePath $vscpath -VersionRule Equals)
 
New-ShieldingDataFile -ShieldingDataFilePath $pdkPath -Owner $pdkOwner -Guardian $pdkGuardian -VolumeIDQualifier $volumeIDQualifier -WindowsUnattendFile $unattendPath -OtherFile $CRTPath
view rawCreatePDK hosted with ❤ by GitHub

 

В начале скрипта заполняем значения переменных. Важно наличие только первых двух файлов, которые мы скачали из Windows Azure Pack. Остальные будут созданы, если их нет, в процессе. Подробнее про генирацию файла "unattend.xml" можно почитать в  официальной документации. В нашем случае выбран самый простой и универсальный вариант.

После того, как PDK файл был создан, нам надо импортировать его в портал WAP:
 


После импортирования файл появится в списке данных экранирования на портале:
 


Когда все выполнено, можно создать Shielded VM из соответствующего шаблона:
 


Обратите внимание, что пароль запрашиваться не будет, потому что он уже зашит в PDK. Так же к данной машине нет возможности подключиться через консоль - так что аккуратно с настройкой файрвола :) Сбросить пароль администратора при его утере тоже невозможно, доступ к данным в таком случае восстановить не получится.

Подробнее почитать про данную технологию можно  тут. В момент написания статьи использовать Shielded VM можно только в тестовых средах. После выхода глобального обновления в декабре 2016 можно будет применять решение в продуктиве.

Автор статьи: Артем Романчик, системный архитектор, ActiveCloud