gpt4 book ai didi

amazon-web-services - Packer:如何使用具有不同 kms key 的多个 block 设备创建 AWS AMI

转载 作者:行者123 更新时间:2023-12-05 07:28:57 24 4
gpt4 key购买 nike

我正在尝试使用打包程序版本 1.3.2 来烘焙具有多个 block 设备的 AMI,其中每个 block 设备都使用不同的 KMS key 加密,这与用于加密启动设备的 KMS key 不同。

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

我使用 amazon-ebs 构建器尝试了许多不同的变体,结合 ami_block_device_mappings 和 launch_block_device_mappings。任何组合最多只能使用引导 KMS key 生成绑定(bind)到 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 key 创建临时快照,但它们将替换为使用最终 AMI 的引导 kms key 加密的新快照,无论我是否还包含 ami_block_device_mappings。即使我在启动时将 delete_on_termination 设置为 false ...

然后,我尝试从 amazon-ebs 构建器中单独创建 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.

但我明明已经“加密”了:真

我的想法已经用完了,我觉得这是可能的,只是显然不够聪明,看不到它。

最佳答案

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

进一步深入研究,我使用的源 AMI 具有以下关联的 block 映射,这些临时磁盘未显示在控制台中,因此我花了一些时间来了解发生了什么,一个重要的线索是事实我什至可以在定义之前挂载磁盘(我最初将其定义为 AMI 映射而不是错误启动,但我的脚本中已经挂载了)

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

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

关于amazon-web-services - Packer:如何使用具有不同 kms key 的多个 block 设备创建 AWS AMI,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53099267/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com