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

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

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

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

您可以在账户级别指定“允许的 AMI”设置,可以直接在账户中指定,也可以使用声明式策略进行指定。必须在想要在其中控制 AMI 使用的每个 AWS 区域中配置这些设置。使用声明式策略允许同时将设置应用于多个区域,也可以同时应用于多个账户。当使用声明式策略时,您无法直接在账户中修改设置。本主题介绍如何直接在账户中配置设置。有关使用声明式策略的信息,请参阅《AWS 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 提供商。

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

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

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

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

  • AWS 账户 ID:一个或多个 12 位 AWS 账户 ID

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

ImageNames

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

MarketplaceProductCodes

允许的 AMI AWS 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 AWS 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:允许具有 AWS 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”时,请考虑这些最佳实践,确保平稳过渡并最大限度地减少对 AWS 环境的潜在干扰。

  1. 启用审核模式

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

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

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

    注意

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

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

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

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

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

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

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

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

  4. 启用“允许的 AMI

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

  5. 监控实例启动情况

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

  6. 试用新 AMI

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

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

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

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

所需的 IAM 权限

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

  • GetAllowedImagesSettings

  • EnableAllowedImagesSettings

  • DisableAllowedImagesSettings

  • ReplaceImageCriteriaInAllowedImagesSettings