使用“允许的 AMI”控制在 Amazon EC2 中对 AMI 的发现和使用 - Amazon Elastic Compute Cloud
Amazon Web Services 文档中描述的 Amazon Web Services 服务或功能可能因区域而异。要查看适用于中国区域的差异,请参阅 中国的 Amazon Web Services 服务入门 (PDF)

使用“允许的 AMI”控制在 Amazon EC2 中对 AMI 的发现和使用

要控制 Amazon Web Services 账户中的用户对亚马逊机器映像(AMI)的发现和使用,可以使用允许的 AMI 功能。您可指定 AMI 要在账户中可见和可用而必须满足的标准。启用该标准后,启动实例的用户将只能看到并有权访问符合指定标准的 AMI。例如,您可以指定可信的 AMI 提供商列表作为标准,只有来自这些提供商的 AMI 才可见并可供使用。

在启用“允许的 AMI”设置之前,您可以启用审核模式来预览哪些 AMI 将可见或不可见、可供使用或不可供使用。这有助于您根据需要完善标准,确保只有预期的 AMI 才对账户中的用户可见和可用。此外,使用 describe-instance-image-metadata 命令可查找使用不符合指定标准的 AMI 启动的实例。这些信息可以指导您作出决策,选择是更新启动配置以使用合规的 AMI(例如在启动模板中指定不同的 AMI),还是调整标准来允许这些 AMI。

您可以在账户级别指定“允许的 AMI”设置,可以直接在账户中指定,也可以使用声明式策略进行指定。必须在想要在其中控制 AMI 使用的每个 Amazon Web Services 区域中配置这些设置。使用声明式策略允许同时将设置应用于多个区域,也可以同时应用于多个账户。当使用声明式策略时,您无法直接在账户中修改设置。本主题介绍如何直接在账户中配置设置。有关使用声明式策略的信息,请参阅《Amazon Organizations User Guide》中的 Declarative policies

注意

“允许的 AMI”功能仅控制公用 AMI 或与账户共享的 AMI 的发现和使用。它不会限制账户拥有的 AMI。无论设置的条件是什么,您账户中的用户始终可以发现和使用由您的账户创建的 AMI。

“允许的 AMI”功能的主要优势
  • 合规与安全:用户只能发现和使用符合指定标准的 AMI,从而降低使用不合规的 AMI 的风险。

  • 高效管理:通过减少允许的 AMI 数量,管理其余 AMI 将变得更加轻松高效。

  • 集中式账户级别实施:直接在账户内或通过声明式策略在账户级别配置“允许的 AMI”设置。这提供了一种集中而高效的方式来控制整个账户的 AMI 使用情况。

“允许的 AMI”的工作原理

为了控制哪些 AMI 可以在您的账户中发现和使用,您可以定义一组用于评估 AMI 的标准。这些标准由一个或多个 ImageCriterion 组成,如下图所示。图后附有说明。

允许的 AMI ImageCriteria 配置层次结构。

配置分为三个级别:

  • 1:参数值

    • 多值参数:

      • ImageProviders

      • ImageNames

      • MarketplaceProductCodes

        AMI 匹配参数中的任意值即获得允许。

        示例:ImageProviders = amazon OR 账户 111122223333 OR 账户 444455556666(参数值的评估逻辑未在图中显示。)

    • 单值参数:

      • CreationDateCondition

      • DeprecationTimeCondition

  • 2ImageCriterion

    • 使用 AND 逻辑对多个参数进行分组。

    • AMI 必须匹配 ImageCriterion 中的所有参数才能获得允许。

    • 示例:ImageProviders = amazon AND CreationDateCondition = 300 天或更短

  • 3ImageCriteria

    • 使用 OR 逻辑将多个 ImageCriterion 组合在一起。

    • AMI 匹配任何 ImageCriterion 即获得允许。

    • 形成评估 AMI 所依据的完整配置。

允许的 AMI 参数

可配置以下参数用于创建 ImageCriterion

ImageProviders

允许其 AMI 的 AMI 提供商。

有效值是由 Amazon 和 Amazon Web Services 账户 ID 定义的别名,如下所示:

  • amazon:别名,用于标识由 Amazon 或经过验证的提供商创建的 AMI

  • aws-marketplace:别名,用于标识由 Amazon Web Services Marketplace 中经过验证的提供商创建的 AMI

  • aws-backup-vault:别名,用于标识位于逻辑上受物理隔离的 Amazon Backup 保管库账户中的备份 AMI。如果您使用 Amazon Backup 逻辑上受物理隔离的保管库功能,请确保将此别名作为 AMI 提供商包含在内。

  • Amazon Web Services 账户 ID:一个或多个 12 位 Amazon Web Services 账户 ID

  • none:表示只能发现和使用您的账户创建的 AMI。无法发现和使用公有或共享的 AMI。指定后将无法指定其他标准。

ImageNames

允许的 AMI 名称,使用精确匹配或通配符(?*)。

MarketplaceProductCodes

允许的 AMI Amazon Web Services Marketplace 的产品代码。

CreationDateCondition

允许的 AMI 的最大期限。

DeprecationTimeCondition

自弃用允许的 AMI 以来的最长期限。

有关每个标准的有效值和约束,请参阅《Amazon EC2 API Reference》中的 ImageCriterionRequest

允许的 AMI 配置

“允许的 AMI”的核心配置是定义允许的 AMI 标准的 ImageCriteria 配置。以下 JSON 结构显示可以指定的参数:

{ "State": "enabled" | "disabled" | "audit-mode", "ImageCriteria" : [ { "ImageProviders": ["string",...], "MarketplaceProductCodes": ["string",...], "ImageNames":["string",...], "CreationDateCondition" : { "MaximumDaysSinceCreated": integer }, "DeprecationTimeCondition" : { "MaximumDaysSinceDeprecated": integer } }, ... }

ImageCriteria 示例

以下 ImageCriteria 示例配置四个 ImageCriterion。如果 AMI 与其中任何一个 ImageCriterion 匹配,则允许使用。有关如何评估标准的信息,请参阅如何评估标准

{ "ImageCriteria": [ // ImageCriterion 1: Allow Amazon Web Services Marketplace AMIs with product code "abcdefg1234567890" { "MarketplaceProductCodes": [ "abcdefg1234567890" ] }, // ImageCriterion 2: Allow AMIs from providers whose accounts are // "123456789012" OR "123456789013" AND AMI age is less than 300 days { "ImageProviders": [ "123456789012", "123456789013" ], "CreationDateCondition": { "MaximumDaysSinceCreated": 300 } }, // ImageCriterion 3: Allow AMIs from provider whose account is "123456789014" // AND with names following the pattern "golden-ami-*" { "ImageProviders": [ "123456789014" ], "ImageNames": [ "golden-ami-*" ] }, // ImageCriterion 4: Allow AMIs from Amazon or verified providers // AND which aren't deprecated { "ImageProviders": [ "amazon" ], "DeprecationTimeCondition": { "MaximumDaysSinceDeprecated": 0 } } ] }

如何评估标准

下表说明确定是否允许 AMI 的评估规则,并显示在每个级别如何应用 ANDOR 运算符:

评估级别 运算符 成为允许的 AMI 的要求
ImageProvidersImageNamesMarketplaceProductCodes 的参数值 OR AMI 必须匹配每个参数列表中至少一个值
ImageCriterion AND AMI 必须匹配每个 ImageCriterion 中的所有参数
ImageCriteria OR AMI 必须匹配任何一个 ImageCriterion

使用上述评估规则,让我们看看如何将其应用于 ImageCriteria 示例

  • ImageCriterion 1:允许具有 Amazon Web Services Marketplace 产品代码 abcdefg1234567890 的 AMI

    OR

  • ImageCriterion 2:允许同时符合以下两个标准的 AMI:

    • 由账户 123456789012 OR 123456789013 拥有

      • AND

    • 已在过去 300 天内创建

    OR

  • ImageCriterion 3:允许同时符合以下两个标准的 AMI:

    • 由账户 123456789014 拥有

      • AND

    • golden-ami-* 模式命名

    OR

  • ImageCriterion 4:允许同时符合以下两个标准的 AMI:

    • 由 Amazon 发布或经过验证的提供商(通过 amazon 别名指定)

      • AND

    • 未弃用(自弃用以来的最长天数为 0

限制

ImageCriteria 最多可以包含:

  • 10 ImageCriterion

每个 ImageCriterion 最多可以包含:

  • 200 个 ImageProviders

  • 50 个 ImageNames

  • 50 个 MarketplaceProductCodes

限制示例

使用前面的 ImageCriteria 示例

  • 有 4 个 ImageCriterion。最多可以向请求再添加 6 个,达到 10 个的上限。

  • 在第一个 ImageCriterion 中,有 1 个 MarketplaceProductCodes 值。最多可以向此 ImageCriterion 再添加 49 个值,达到 50 个值的上限。

  • 在第二个 ImageCriterion 中,有 2 个 ImageProviders 值。最多可以向此 ImageCriterion 再添加 198 个值,达到 200 个值的上限。

  • 在第三个 ImageCriterion 中,有 1 个 ImageNames 值。最多可以向此 ImageCriterion 再添加 49 个值,达到 50 个值的上限。

“允许的 AMI”操作

“允许的 AMI”功能有三种用于管理映像标准的运行状态:启用禁用审核模式。您可借助此功能启用或禁用镜像标准,或根据需要对其进行审核。

已启用

启用“允许的 AMI”时:

  • 将应用 ImageCriteria

  • 只有允许的 AMI 才能在 EC2 控制台中由使用镜像(例如描述、复制、存储或执行其他使用镜像的操作)的 API 发现。

  • 只能使用允许的 AMI 启动实例。

已禁用

禁用“允许的 AMI”时:

  • 不会应用 ImageCriteria

  • 对 AMI 的可发现性或使用不会施加任何限制。

审核模式

在审核模式下:

  • 将应用 ImageCriteria,但对 AMI 的可发现性或使用不会施加任何限制。

  • 在 EC2 控制台中,对于每个 AMI,允许的镜像字段会显示,指示在启用“允许的 AMI”时,账户中的用户是否可以发现和使用该 AMI。

  • 在命令行中,describe-image 操作的响应包括 "ImageAllowed": true"ImageAllowed": false,指示在启用“允许的 AMI”时,账户中的用户是否可以发现和使用该 AMI。

  • 在 EC2 控制台中,AMI 目录会在当启用“允许的 AMI”时账户中的用户无法发现或无法使用的 AMI 旁显示不允许

实施“允许的 AMI”的最佳实践

在实施“允许的 AMI”时,请考虑这些最佳实践,确保平稳过渡并最大限度地减少对 Amazon 环境的潜在干扰。

  1. 启用审核模式

    首先在审核模式下启用“允许的 AMI”。此状态允许您查看哪些 AMI 将受到标准的影响,而无需实际限制访问权限,从而提供无风险的评估期。

  2. 设置“允许的 AMI”标准

    仔细确定哪些 AMI 提供商符合贵组织的安全政策、合规性要求和运营需求。

    注意

    在使用 Amazon ECS 或 Amazon EKS 等 Amazon 托管服务时,我们建议指定 amazon 别名以允许 Amazon 创建的 AMI。这些服务依赖于 Amazon 发布的 AMI 来启动实例。

    为任何 AMI 设置 CreationDateCondition 限制时均需谨慎。如果设置过于严格的日期条件(例如,AMI 必须少于 5 天),则 AMI(无论是来自 Amazon 还是其他提供商)未在指定的时间范围内更新可能会导致实例启动失败。

    我们建议将 ImageNamesImageProviders 搭配使用,以获得更好的控制和更高的精确度。单独使用 ImageNames 可能无法唯一标识 AMI。

  3. 检查对预期业务流程的影响

    您可以通过控制台或 CLI 来识别任何使用不符合指定标准的 AMI 启动的实例。这些信息可以指导您作出决策,选择是更新启动配置以使用合规的 AMI(例如在启动模板中指定不同的 AMI),还是调整标准来允许这些 AMI。

    控制台:使用 ec2-instance-launched-with-allowed-ami Amazon Config 规则来检查正在运行或已停止的实例是否使用符合“允许的 AMI”标准的 AMI 启动。如果 AMI 不符合“允许的 AMI”标准,则规则为 NON_COMPLIANT;如果符合,则规则为 COMPLIANT。仅当“允许的 AMI”设置为已启用审核模式时,规则才会生效。

    CLI:运行 describe-instance-image-metadata 命令并筛选响应,以识别任何使用不符合指定标准的 AMI 启动的实例。

    有关控制台和 CLI 说明,请参阅 查找利用不允许的 AMI 启动的实例

  4. 启用“允许的 AMI

    一旦确认该标准不会对预期的业务流程产生不利影响,请启用“允许的 AMI”。

  5. 监控实例启动情况

    继续监控 AMI 在应用程序和您使用的 Amazon 托管服务(例如 Amazon EMR、Amazon ECR、Amazon EKS 和 Amazon Elastic Beanstalk)中启动实例的情况。检查是否存在任何意外问题,并对“允许的 AMI”标准进行必要的调整。

  6. 试用新 AMI

    要测试不符合您当前“允许的 AMI”设置的第三方 AMI,Amazon 建议采用以下方法:

    • 使用单独的 Amazon Web Services 账户:创建一个无法访问您关键业务资源的账户。确保未在此账户中启用“允许的 AMI”设置,或明确允许您要测试的 AMI,以便您可以对其进行测试。

    • 在其他 Amazon Web Services 区域进行测试:使用可使用第三方 AMI 但尚未启用“允许的 AMI”设置的区域。

    这些方法有助于确保在测试新 AMI 时,您的关键业务资源仍然安全。

所需的 IAM 权限

要使用“允许的 AMI”功能,您需要以下 IAM 权限:

  • GetAllowedImagesSettings

  • EnableAllowedImagesSettings

  • DisableAllowedImagesSettings

  • ReplaceImageCriteriaInAllowedImagesSettings