使用 Image Builder 设置跨账户AMI分发 - EC2Image Builder
Amazon Web Services 文档中描述的 Amazon Web Services 服务或功能可能因区域而异。要查看适用于中国区域的差异,请参阅 中国的 Amazon Web Services 服务入门 (PDF)

本文属于机器翻译版本。若本译文内容与英语原文存在差异,则一律以英文原文为准。

使用 Image Builder 设置跨账户AMI分发

本节介绍如何配置分发设置以将 Image Builder 发送AMI给您指定的其他账户。

然后,目标账户可以根据需要启动或修改。AMI

注意

Amazon CLI 本节中的命令示例假设您之前创建了映像配方和基础架构配置JSON文件。要为图像配方创建JSON文件,请参阅使用创建图像配方 Amazon CLI。要为基础架构配置创建JSON文件,请参阅创建基础设施配置

跨账户AMI分发的先决条件

为确保目标账户能够成功地从您的 Image Builder 映像启动实例,您必须为所有区域的所有目标账户配置相应权限。

如果您AMI使用 Amazon Key Management Service (Amazon KMS) 进行加密,则必须 Amazon KMS key 为您的账户配置一个用于加密新映像的。

当 Image Builder 执行跨账户分发加密操作时AMIs,源账户中的图像将被解密并推送到目标区域,然后使用该区域的指定密钥对其进行重新加密。由于 Image Builder 代表目标账户行事,并使用您在目标区域中创建的IAM角色,因此该账户必须有权访问源区域和目标区域中的密钥。

加密密钥

如果您的图像是使用加密的,则需要满足以下先决条件 Amazon KMS。 IAM先决条件将在下一节中介绍。

源账户要求
  • 在您构建和分发您的账户的所有区域中,在您的账户中创建KMS密钥AMI。您也可以使用现有密钥。

  • 更新所有这些密钥的密钥策略,以允许目标账户使用您的密钥。

目标账户要求
  • 向其中添加内联策略EC2ImageBuilderDistributionCrossAccountRole,允许该角色执行所需的操作来分发加密的AMI。有关IAM配置步骤,请参阅IAM 策略先决条件部分。

有关使用跨账户访问的更多信息 Amazon KMS,请参阅《Amazon Key Management Service 开发者指南》中的允许其他账户中的用户使用KMS密钥

在映像配方中指定您的加密密钥,如下所示:

  • 如果您使用的是 Image Builder 控制台,请从配方的 “存储(卷)” 部分的加密(KMS别名下拉列表中选择您的加密密钥。

  • 如果您使用的是CreateImageRecipeAPI操作或中的create-image-recipe命令,请在JSON输入的 Amazon CLI下blockDeviceMappingsebs部分中配置您的密钥。

    以下JSON代码段显示了图像配方的加密设置。除了提供您的加密密钥外,您还必须将 encrypted 标志设置为 true

    { ... "blockDeviceMappings": [ { "deviceName": "Example root volume", "ebs": { "deleteOnTermination": true, "encrypted": true, "iops": 100, "kmsKeyId": "image-owner-key-id", ... }, ... }], ... }

IAM 策略

要在 Amazon Identity and Access Management (IAM) 中配置跨账户分发权限,请执行以下步骤:

  1. 要使用跨账户分布AMIs的 Image Builder,目标账户所有者必须在其账户中创建一个名为的新IAM角色EC2ImageBuilderDistributionCrossAccountRole

  2. 他们必须将 Ec2ImageBuilderCrossAccountDistributionAccess policy 附加到角色才能启用跨账户分配。有关托管策略的更多信息,请参阅 Amazon Identity and Access Management 用户指南 中的托管策略与内联策略

  3. 验证源账户 ID 是否已添加到附加到目标账户IAM角色的信任策略中。以下示例显示了目标账户中的信任策略,该策略指定了源账户的账户 ID。

    { "Version": "2012-10-17", "Statement": [{ "Effect": "Allow", "Principal": { "AWS": "arn:aws:iam::444455556666:root" }, "Action": "sts:AssumeRole" }] }

    有关信任策略的更多信息,请参阅 Amazon Identity and Access Management 用户指南 中的 基于资源的策略

  4. AMI如果您分发的内容已加密,则目标账户所有者必须在其账户EC2ImageBuilderDistributionCrossAccountRole中添加以下内联策略,以便他们可以使用您的KMS密钥。Principal 部分包含他们的账号。这使得 Image Builder 能够在使用每个 Amazon KMS 区域的相应密钥进行加密和解密时代表他们行事。AMI

    { "Version": "2012-10-17", "Statement": [ { "Sid": "AllowRoleToPerformKMSOperationsOnBehalfOfTheDestinationAccount", "Effect": "Allow", "Action": [ "kms:Encrypt", "kms:Decrypt", "kms:ReEncrypt*", "kms:GenerateDataKey*", "kms:DescribeKey", "kms:CreateGrant", "kms:ListGrants", "kms:RevokeGrant" ], "Resource": "*" } ] }

    有关内联策略的更多信息,请参阅 Amazon Identity and Access Management 用户指南中的内联策略

  5. 如果您使用launchTemplateConfigurations指定亚马逊EC2启动模板,则还必须在每个目标账户EC2ImageBuilderDistributionCrossAccountRole中添加以下政策。

    { "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": [ "ec2:CreateLaunchTemplateVersion", "ec2:ModifyLaunchTemplate" ], "Resource": "*", "Condition": { "StringEquals": { "aws:ResourceTag/CreatedBy": "EC2 Image Builder" } } }, { "Effect": "Allow", "Action": [ "ec2:DescribeLaunchTemplates" ], "Resource": "*" }, { "Effect": "Allow", "Action": [ "ec2:CreateTags" ], "Resource": "arn:aws:ec2:*:*:launch-template/*", "Condition": { "StringEquals": { "aws:RequestTag/CreatedBy": "EC2 Image Builder" } } } ] }

跨账户分配的限制

跨账户分配 Image Builder 映像时有一些限制:

  • 每个目标区域的目标账户仅限 50 个并发AMI副本。

  • 如果要将半虚拟化 (PV) 虚拟化复制AMI到另一个区域,则目标区域必须支持 PV 虚拟化AMIs。有关更多信息,请参阅 Linux AMI 虚拟化类型

  • 您无法创建加密快照的未加密副本。如果您没有为KmsKeyId参数指定 Amazon Key Management Service (Amazon KMS) 客户托管密钥,Image Builder 将使用亚马逊 Elastic Block Store (亚马逊EBS) 的默认密钥。有关更多信息,请参阅《亚马逊弹性计算云用户指南》中的 “亚马逊EBS加密”。

有关更多信息,请参阅 EC2Image Builder API 参考CreateDistributionConfiguration中的。

通过控制台为 Image Builder AMI 配置跨账户分发

本节介绍如何AMIs使用创建和配置用于跨账户分发您的 Image Builder 的分发设置。 Amazon Web Services Management Console配置跨账户分配需要特定的IAM权限。在继续操作之前,您必须完成本部分的 跨账户AMI分发的先决条件

要在 Image Builder 控制台中创建分配,请执行以下步骤:

  1. 打开 EC2 Image Builder 控制台,网址为https://console.aws.amazon.com/imagebuilder/

  2. 从导航窗格中,选择分配设置。这将显示在您的账户下创建的分配设置列表。

  3. 分配设置页面的顶部,选择创建分配设置。这将跳转到创建分配设置页面。

  4. 在 “图像类型” 部分,选择 Amazon 系统映像 (AMI) 作为输出类型。这是默认设置。

  5. 常规部分中,输入要创建的分配设置资源的名称必填)。

  6. “区域设置” 部分,在所选地区的目标账户中输入您要分配的 12 位数账户 ID,然后按 Enter。AMI这将检查格式是否正确,然后框的下方会显示您输入的账户 ID。重复该过程以添加更多帐户。

    要删除您输入的账户,请选择账户 ID 右侧显示的 X

    输入每个区域的输出AMI名称

  7. 继续指定所需的任何其他设置,然后选择创建设置以创建新的分配设置资源。

AMI从中为 Image Builder 配置跨账户分发 Amazon CLI

本节介绍如何配置分发设置文件以及如何使用中的create-image命令在账户AMI之间生成和分发 Image Builder。 Amazon CLI

配置跨账户分配需要特定的IAM权限。在运行 create-image 命令之前,您必须完成本部分的 跨账户AMI分发的先决条件

  1. 配置分配设置文件

    在使用中的create-image命令创建分发给其他账户AMI的 Image Builder 之前,必须创建一个在AmiDistributionConfiguration设置IDs中指定目标帐户的DistributionConfigurationJSON结构。 Amazon CLI 您必须在源区域中指定至少一个 AmiDistributionConfiguration

    以下名为 create-distribution-configuration.json 的示例文件显示了源区域中跨账户映像分配的配置。

    { "name": "cross-account-distribution-example", "description": "Cross Account Distribution Configuration Example", "distributions": [ { "amiDistributionConfiguration": { "targetAccountIds": ["123456789012", "987654321098"], "name": "Name {{ imagebuilder:buildDate }}", "description": "ImageCopy Ami Copy Configuration" }, "region": "us-west-2" } ] }
  2. 创建分配设置

    要使用中的create-distribution-configuration命令创建 Image Builder 分发设置资源 Amazon CLI,请在命令中提供以下参数:

    • --name 参数中输入分配的名称。

    • 附加您在--cli-input-json参数中创建的分发配置JSON文件。

    aws imagebuilder create-distribution-configuration --name my distribution name --cli-input-json file://create-distribution-configuration.json
    注意
    • 您必须在JSON文件路径的开头添加file://符号。

    • 该JSON文件的路径应遵循运行该命令的基本操作系统的相应约定。例如,Windows 使用反斜杠 (\) 引用目录路径,而 Linux 和 macOS 使用正斜杠 (/)。

您也可以使用--distributions参数JSON直接在命令中提供。