由于有关 EC2 BillingProduct 代码的神秘错误,无法复制图像

Cannot copy an image due to mysterious error about EC2 BillingProduct code

我正在尝试复制 EC2 映像以对其进行加密。

我发出的命令行是:

$ aws ec2 copy-image --name encrypted-kafka-201707121432 \
  --source-region ap-southeast-2 --encrypted --source-image-id ami-2a617249 \
  --region ap-southeast-2 

这会导致发出以下错误:

An error occurred (InvalidRequest) when calling the CopyImage operation:
  Images with EC2 BillingProduct codes cannot be copied to another AWS account.

我环顾四周,我了解到复制 Windows AMI(例如 here) and it is similar to this issue on SO (here)时通常会出现此错误。

但是,此映像不是来自 Marketplace,也不是 Windows AMI,并且其中没有任何 ProductCodes:

$ aws ec2 describe-images --image-ids ami-2a617249 --region ap-southeast-2 \
    --query '.Images[].ProductCodes'
[]

将此与另一个比较:

$ aws ec2 describe-images --image-ids ami-00280263 --region ap-southeast-2 \
    --query '.Images[].ProductCodes'
[
  {
    "ProductCodeType": "marketplace",
    "ProductCodeId": "dsli9z1o9amfv5g2hsmdj1pph"
  }
]

图像是使用 Packer 烘焙的。

我没主意了。为什么会发生这种情况 - 是我做错了什么,还是这种未记录的行为?

事实证明,这个 AMI 的后代确实来自 Amazon Marketplace。

烘焙管道的简化版本是:

账户 A:

市场 AMI (ami-xxxxxxxx) -> 加壳构建 (ami-yyyyyyyy) -> 分享到账户 B

账户 B:

我接着发出:

aws ec2 copy-image --encrypted --source-image ami-yyyyyyyy

并收到:

An error occurred (InvalidRequest) when calling the CopyImage operation:
  Images with EC2 BillingProduct codes cannot be copied to another AWS account.

我可以从帐户 B 查看所有者,即与我共享它的帐户:

$ aws ec2 describe-images --image-id ami-yyyyyyyy --region ap-southeast-2 \
>   --query 'Images[0].OwnerId'

这返回了账户 A 的 16 位账户 ID。

此时了解使用 Packer 烘焙 AMI 会导致产品代码显然 丢失会很有帮助。但是,这些产品代码仍然存在,亚马逊支持人员可以看到它们。这部分需要致电亚马逊客服确认。

为了解决这个问题,我现在在 Python 或 Bash (AWS CLI) 中维护一个可以使用的脚本 encrypt_ami