Я пытаюсь использовать упаковщик версии 1.3.2 для выпечки AMI с несколькими блочными устройствами, где каждое блочное устройство шифруется с помощью своего ключа KMS, который отличается от ключа KMS, используемого для шифрования загрузочного устройства.
Сначала я начал думать, что, возможно, это не поддерживается AWS; однако, используя консоль AWS, я смог запустить экземпляр EC2 и AMI с ранее зашифрованными томами и добавить другой том, который использовал другой ключ KMS. Затем создайте AMI из него. Затем я использовал новый AMI для запуска другого экземпляра EC2, и другие ключи KMS были сохранены. Это связано с тем, что он создал новый снимок для дополнительного тома с другим ключом KMS.
Я пробовал так много разных вариантов, используя конструктор amazon-ebs с комбинациями ami_block_device_mappings в сочетании с launch_block_device_mappings. Любая комбинация в лучшем случае генерирует окончательные снимки тома, привязанные к AMI с помощью загрузочного ключа KMS. Я заметил, что если я укажу альтернативные kms_key_ids в launch_block_device_mappings, как показано ниже:
"launch_block_device_mappings": [
{
"device_name": "/dev/sdb",
"volume_type": "gp2",
"volume_size": "{{user `var_volume_size`}}",
"delete_on_termination": true,
"kms_key_id": "{{user `kms_key_arn_var`}}",
"encrypted": true
},
{
"device_name": "/dev/sdc",
"volume_type": "gp2",
"volume_size": "{{user `varlog_volume_size`}}",
"delete_on_termination": true,
"kms_key_id": "{{user `kms_key_arn_varlog`}}",
"encrypted": true
}, ...
Он создает временные снимки с альтернативным ключом KMS, но они заменяются новыми, которые зашифрованы с помощью загрузочного ключа KMS для окончательного AMI, независимо от того, включаю ли я также ami_block_device_mappings или нет. Даже если я установил delete_on_termination в false для запуска ...
Затем я посмотрел, что это под другим углом, пытаясь создать снимки из томов EBS отдельно от сборщика amazon-ebs. Используя сборщик amazon-ebsvolume, я создал пустые тома EBS:
"type": "amazon-ebsvolume",
...
"ebs_volumes": [
{
"device_name": "/dev/sdb",
"volume_type" : "{{user `var_volume_type`}}",
"volume_size": 10,
"delete_on_termination": false,
"kms_key_id": "{{user `kms_key_arn_var`}}",
"encrypted": true,
"tags" : {
"Name" : "starter-volume-var",
"purpose" : "starter"
}
},
{
"device_name": "/dev/sdc",
"volume_type" : "{{user `varlog_volume_type`}}",
"volume_size": 5,
"delete_on_termination": false,
"kms_key_id": "{{user `kms_key_arn_varlog`}}",
"encrypted": true,
"tags" : {
"Name" : "starter-volume-varlog",
"purpose" : "starter"
}
},...
И затем создал снимки из них и затем попытался использовать snapshot_id для них вместо создания томов, встроенных в amazon-ebs
"launch_block_device_mappings": [
{
"device_name": "/dev/sdb",
"volume_type" : "{{user `var_volume_type`}}",
"snapshot_id": "snap-08f2bed8aaa964469",
"delete_on_termination": true
},
{
"device_name": "/dev/sdc",
"volume_type" : "{{user `varlog_volume_type`}}",
"snapshot_id": "snap-037a4a6255e8d161d",
"delete_on_termination": true
}
],..
При этом я получаю следующую ошибку:
2018/11/01 03:04:23 ui error: ==> amazon-ebs: Error launching source instance: InvalidBlockDeviceMapping: snapshotId can only be modified on EBS devices
Я попытался повторить настройки шифрования вместе с snapshot_ids:
"launch_block_device_mappings": [
{
"device_name": "/dev/sdb",
"volume_type" : "{{user `var_volume_type`}}",
"snapshot_id": "snap-08f2bed8aaa964469",
"kms_key_id": "{{user `kms_key_arn_var`}}",
"encrypted": true,
"delete_on_termination": true
},
{
"device_name": "/dev/sdc",
"volume_type" : "{{user `varlog_volume_type`}}",
"snapshot_id": "snap-037a4a6255e8d161d",
"kms_key_id": "{{user `kms_key_arn_varlog`}}",
"encrypted": true,
"delete_on_termination": true
}
],...
Это приводит к другой ошибке:
==> amazon-ebs: Error launching source instance: InvalidParameterDependency: The parameter KmsKeyId requires the parameter Encrypted to be set.
Но у меня явно есть "зашифрованные": правда
У меня заканчиваются идеи, и я чувствую, что это возможно, просто явно недостаточно умен, чтобы это увидеть.