使用 Image Builder 设置跨账户 AMI 分配 - EC2 Image 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 文件,请参阅 创建基础设施配置

先决条件

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

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

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

加密密钥

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

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

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

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

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

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

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

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

    以下 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. 要使用跨账户分配的 Image Builder AMI,目标账户所有者必须在其账户中创建一个名为 EC2ImageBuilderDistributionCrossAccountRole 的新 IAM 角色。

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

  3. 确认源账户 ID 已添加到目标账户的 IAM 角色所附的信任策略中。有关信任策略的更多信息,请参阅 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 指定 Amazon 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 虚拟化 AMI。有关更多信息,请参阅 Linux AMI 虚拟化类型

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

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

为 Image Builder AMI(控制台)配置跨账户分配

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

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

  1. 打开位于 https://console.aws.amazon.com/imagebuilder/的 EC2 Image Builder 控制台。

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

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

  4. 映像类型部分,选择 Amazon Machine Image (AMI) 作为输出类型。这是默认设置。

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

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

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

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

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

为 Image Builder AMI (Amazon CLI) 配置跨账户分配

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

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

  1. 配置分配设置文件

    在使用中的create-image命令创建分发给其他账户的 Image Builder AMI 之前,必须创建一个在AmiDistributionConfiguration设置中指定目标账户 ID 的 DistributionConfiguration JSON 结构。 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 则使用正斜杠 (/)。

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