使用“允许的 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 组成,如下图所示。图后附有说明。
配置分为三个级别:
-
1:参数值
-
多值参数:
-
ImageProviders -
ImageNames -
MarketplaceProductCodesAMI 匹配参数中的任意值即获得允许。
示例:
ImageProviders=amazonOR 账户111122223333OR 账户444455556666(参数值的评估逻辑未在图中显示。)
-
-
单值参数:
-
CreationDateCondition -
DeprecationTimeCondition
-
-
-
2:
ImageCriterion-
使用 AND 逻辑对多个参数进行分组。
-
AMI 必须匹配
ImageCriterion中的所有参数才能获得允许。 -
示例:
ImageProviders=amazonANDCreationDateCondition= 300 天或更短
-
-
3:
ImageCriteria-
使用 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 的评估规则,并显示在每个级别如何应用 AND 或 OR 运算符:
| 评估级别 | 运算符 | 成为允许的 AMI 的要求 |
|---|---|---|
ImageProviders、ImageNames 和 MarketplaceProductCodes 的参数值 |
OR |
AMI 必须匹配每个参数列表中至少一个值 |
ImageCriterion |
AND |
AMI 必须匹配每个 ImageCriterion 中的所有参数 |
ImageCriteria |
OR |
AMI 必须匹配任何一个 ImageCriterion |
使用上述评估规则,让我们看看如何将其应用于 ImageCriteria 示例:
-
ImageCriterion1:允许具有 AWS Marketplace 产品代码abcdefg1234567890的 AMIOR -
ImageCriterion2:允许同时符合以下两个标准的 AMI:-
由账户
123456789012OR123456789013拥有-
AND
-
-
已在过去 300 天内创建
OR -
-
ImageCriterion3:允许同时符合以下两个标准的 AMI:-
由账户
123456789014拥有-
AND
-
-
以
golden-ami-*模式命名
OR -
-
ImageCriterion4:允许同时符合以下两个标准的 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 环境的潜在干扰。
-
启用审核模式
首先在审核模式下启用“允许的 AMI”。此状态允许您查看哪些 AMI 将受到标准的影响,而无需实际限制访问权限,从而提供无风险的评估期。
-
设置“允许的 AMI”标准
仔细确定哪些 AMI 提供商符合贵组织的安全政策、合规性要求和运营需求。
注意
在使用 Amazon ECS 或 Amazon EKS 等 AWS 托管服务时,我们建议指定
amazon别名以允许 AWS 创建的 AMI。这些服务依赖于 Amazon 发布的 AMI 来启动实例。为任何 AMI 设置
CreationDateCondition限制时均需谨慎。如果设置过于严格的日期条件(例如,AMI 必须少于 5 天),则 AMI(无论是来自 AWS 还是其他提供商)未在指定的时间范围内更新可能会导致实例启动失败。我们建议将
ImageNames与ImageProviders搭配使用,以获得更好的控制和更高的精确度。单独使用ImageNames可能无法唯一标识 AMI。 -
检查对预期业务流程的影响
您可以通过控制台或 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 启动的实例。
-
启用“允许的 AMI
一旦确认该标准不会对预期的业务流程产生不利影响,请启用“允许的 AMI”。
-
监控实例启动情况
继续监控 AMI 在应用程序和您使用的 AWS 托管服务(例如 Amazon EMR、Amazon ECR、Amazon EKS 和 AWS Elastic Beanstalk)中启动实例的情况。检查是否存在任何意外问题,并对“允许的 AMI”标准进行必要的调整。
-
试用新 AMI
要测试不符合您当前“允许的 AMI”设置的第三方 AMI,AWS 建议采用以下方法:
-
使用单独的 AWS 账户:创建一个无法访问您关键业务资源的账户。确保未在此账户中启用“允许的 AMI”设置,或明确允许您要测试的 AMI,以便您可以对其进行测试。
-
在其他 AWS 区域进行测试:使用可使用第三方 AMI 但尚未启用“允许的 AMI”设置的区域。
这些方法有助于确保在测试新 AMI 时,您的关键业务资源仍然安全。
-
所需的 IAM 权限
要使用“允许的 AMI”功能,您需要以下 IAM 权限:
-
GetAllowedImagesSettings -
EnableAllowedImagesSettings -
DisableAllowedImagesSettings -
ReplaceImageCriteriaInAllowedImagesSettings