Как зашифровать EBS том

Sypalo.com

page.title

В этой статье я расскажу как зашифровать существующий EBS том через AWS веб-портал или с помощью PowerShell. Вам понадобится 1 час(зависит от размера тома), чтобы выполнить следующие действия:

  • Идем в https://console.aws.amazon.com/ec2 и переходи в раздел instances
  • Останавливаем инстанс, том которого хотим зашифровать
    Останавливаем инстанс
  • Разверните нижнюю панель и перейдите на вкладку «Storage», чтобы увидеть ссылку на том экземпляра внизу страницы
    Находим подключенный том
  • Нажмите на него, и вы заметите, что том не зашифрован, поэтому вам нужно щелкнуть правой кнопкой мыши и выбрать «Create snapshot»
    Создаем снимок
  • Введите имя и описание, чтобы легко найти снимок, и нажмите «Create snapshot»
    Вводим параметры снимка
  • Перейдите к снимкам, щелкните правой кнопкой мыши созданный нами и выберите «Create volume». Обратите внимание, что снимок не зашифрован
    Создаем зашифрованный том
  • Чтобы создать зашифрованный том из незашифрованного снимка, выберите ту же зону доступности, в которой работает ваш инстанс, установите соответствующий флажок напротив «Encrypt Volume» и нажмите «Create volume»
    Вводим параметры зашифрованного тома
  • После создания тома вернитесь в раздел экземпляров EC2 и найдите свой экземпляр
  • Запишите информацию о текущем имени устройства, для экземпляров Linux, обычно это / dev / xvda
  • Переключитесь на вкладку «Storage», щелкните подключенный в данный момент том, чтобы вас снова отправили в раздел томов, но с фильтрацией, чтобы показать вам только один том, чтобы вы не щелкнули мышью и не отключили том от другого экземпляра
  • Щелкните том правой кнопкой мыши и выберите «Detach Volume»
    Отключаем незашифрованный том
  • Щелкните зашифрованный том правой кнопкой мыши и выберите «Attach volume». Обратите внимание, что он зашифрован
    Подключаем зашифрованный том
  • Укажите идентификатор экземпляра, к которому вы подключаете том, и имя устройства (вы отметили на шаге 15) и нажмите «Attach»
    Указыавем идентификатор экземпляра

Вот и все, позже можно будет удалить незашифрованный том и снимок

Шифруем существующий EBS том с помощью PowerShell


Set-AWSCredential -AccessKey access_key_id -SecretKey secret_key -StoreAs aws_creds

$name = Read-Host "VM name"
$region = "eu-central-1"

$vm = (Get-EC2Instance -Region $region -ProfileName aws_creds).Instances | ? { ($_.tags | ? Key -eq Name).Value -eq $name }   

Write-Host "Останавливаем $name"
Stop-EC2Instance $vm -Region $region -ProfileName aws_creds
while ((Get-EC2Instance $vm -Region $region -ProfileName aws_creds).Instances.State.Name.Value -ne "stopped") {
	Start-Sleep -s 10
}

Write-Host "Создаем снимок $name"
$vol = Get-EC2Volume -Region $region -ProfileName aws_creds | ? { $_.Attachments.InstanceId -eq $vm.InstanceId }
$snapshot = New-EC2Snapshot $vol.VolumeId $name -Region $region -ProfileName aws_creds
while ((Get-EC2Snapshot -Region $region -ProfileName aws_creds | ? Description -eq $name).State -ne "completed") {
	Start-Sleep -s 10
}

Write-Host "Создаем зашифрованный том $name"
$tag = @{ Key="Name"; Value=$name }
$tagspec = new-object Amazon.EC2.Model.TagSpecification
$tagspec.ResourceType = "volume"
$tagspec.Tags.Add($tag)
$newvol = New-EC2Volume $snapshot.SnapshotId -Encrypted $true -TagSpecification $tagspec -AvailabilityZone $vol.AvailabilityZone -Region $region -ProfileName aws_creds   
	
Write-Host "Ждем пока том станет доступен для подключения"
while ((Get-EC2Volume -VolumeId $newvol.VolumeId -Region $region -ProfileName aws_creds).State -ne "available") {
	Start-Sleep -s 15
}
	
Write-Host "Отключаем незашифрованный том от $name"
Dismount-EC2Volume -VolumeId $vol.VolumeId -Region $region -ProfileName aws_creds
Write-Host "Подключаем зашифрованный том к $name"
while ((Get-EC2Volume -VolumeId $vol.VolumeId -Region $region -ProfileName aws_creds).State -ne "available") {
	Start-Sleep -s 15
}
Add-EC2Volume -InstanceId $vm.InstanceId -VolumeId $newvol.VolumeId -Device $vm.RootDeviceName -Region $region -ProfileName aws_creds
	
Start-EC2Instance $vm -Region $region -ProfileName aws_creds

Write-Host "Удаляем незашифрованный том $name"
Remove-EC2Volume $vol -Region $region -ProfileName aws_creds