Windows Azure Pack. Создание Shielded VM
Автор: Автор: Артем Романчик, Системный архитектор, ActiveCloud
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 можно будет применять решение в продуктиве.