繁体   English   中英

Packer:如何创建具有多个具有不同kms密钥的块设备的AWS AMI

[英]Packer: How do I create an AWS AMI with multiple block devices having different kms keys

我正在尝试使用Packer 1.3.2版来烘焙具有多个块设备的AMI,其中,每个块设备都使用不同的KMS密钥加密,该密钥不同于用于加密引导设备的KMS密钥。

最初,我开始认为AWS可能不支持此功能。 但是,使用AWS控制台,我能够使用AMI和先前具有加密卷的AMI启动EC2实例,并添加使用不同KMS密钥的另一个卷。 然后从中创建一个AMI。 然后,我使用新的AMI启动另一个EC2实例,并维护了不同的KMS密钥。 这是因为它确实使用不同的KMS密钥为附加卷创建了新快照。

我已经尝试过使用amazon-ebs构建器结合ami_block_device_mappings和launch_block_device_mappings的组合进行许多不同的变化。 任何组合最多都可以使用启动KMS密钥生成与AMI绑定的最终卷快照。 我注意到,如果我在launch_block_device_mappings中指定备用kms_key_ids,如下所示:

"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密钥创建临时快照,但是无论这些快照是否被ami_block_device_mappings覆盖,它们都将被替换为新的快照,这些快照将使用用于最终AMI的启动kms密钥进行加密。 即使我在启动时将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"
      }    
    },...

然后从它们创建快照,然后尝试使用其中的快照_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.

但是我显然已经“加密”了:是的

我的想法不多了,感觉到它是可能的,显然还不够聪明。

来这里是因为我有同样的问题。 我通过将设备移动到/dev/xvdf来解决此/dev/xvdf

进一步深入研究我使用的源AMI,它具有以下关联的块映射,这些临时磁盘未显示在控制台中,因此花了我一段时间来锻炼正在发生的事情,一个很大的线索是我可以挂载该事实。甚至在我定义磁盘之前(我最初将其定义为AMI映射,而不是错误启动,但脚本中已经包含了该磁盘)

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

我注意到您没有列出源AMI,但希望这会有所帮助

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM