среда, 30 ноября 2016 г.

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

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 raw CreatePDK hosted with ❤ by GitHub


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

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


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


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



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

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




2 комментария: