Упаковщик: как создать AWS AMI с несколькими блочными устройствами, имеющими разные ключи KMS - PullRequest
0 голосов
/ 01 ноября 2018

Я пытаюсь использовать упаковщик версии 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.

Но у меня явно есть "зашифрованные": правда

У меня заканчиваются идеи, и я чувствую, что это возможно, просто явно недостаточно умен, чтобы это увидеть.

1 Ответ

0 голосов
/ 07 июня 2019

Пришел сюда, потому что у меня была такая же проблема. Я исправил это, переместив устройство на /dev/xvdf.

Копаясь в этом, исходный AMI, который я использовал, имеет следующие сопоставления блоков, связанные с ним, эти эфемерные диски не отображались в консоли, поэтому мне потребовалось время, чтобы потренироваться в происходящем, большой факт был фактом Я мог смонтировать диск даже до того, как определил его (я изначально определил его как отображение AMI, а не как запуск по ошибке, но уже имел монтирование в моих скриптах)

Block devices: /dev/sda1=snap-0b399e12978e2290e:8:true:standard, /dev/xvdb=ephemeral0, /dev/xvdc=ephemeral1

Я заметил, что вы не указали источник AMI, но, надеюсь, это поможет

...