Как зашифровать EBS том
Sergey Sypalo https://www.linkedin.com/in/sergeysypalo Sypalo.com
2019-10-05
В этой статье я расскажу как зашифровать существующий 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