Amazon Config 自定义规则 - Amazon Config
Amazon Web Services 文档中描述的 Amazon Web Services 服务或功能可能因区域而异。要查看适用于中国区域的差异,请参阅 中国的 Amazon Web Services 服务入门 (PDF)

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

Amazon Config 自定义规则

Amazon Config 自定义规则是您从头开始创建的规则。有两种方法可以创建 Amazon Config 自定义规则:使用 Lambda 函数(Amazon Lambda 开发人员指南)和使用策略即代码语言 Guard(Guard GitHub 存储库)。

使用 Lambda 创建的 Amazon Config 自定义规则称为 Amazon Config 自定义 Lambda 规则,使用 Guard 创建的 Amazon Config 自定义规则称为 Amazon Config 自定义策略规则

Amazon Config 自定义策略规则

可以从 Amazon Config 控制台创建,也可以使用 Amazon Config 规则 API 创建使用 Guard 编写的规则。Amazon Config自定义策略规则允许您创建 Amazon Config 自定义规则,无需使用 Java 或 Python 开发 Lambda 函数来管理您的自定义规则。Amazon Config自定义策略规则由配置更改启动。有关 Guard 的更多信息,请参阅 Guard GitHub 存储库

Amazon Config 自定义 Lambda 规则

自定义 Lambda 规则为您提供了选项,可以使用 Java 或 Python 为 Amazon Config 自定义规则创建 Lambda 函数。Lambda 函数是您上传到 Amazon Lambda 的自定义代码,由事件源发布给它的事件调用。如果 Lambda 函数与 Amazon Config 规则关联,则在规则启动时 Amazon Config 会调用该函数。之后,Lambda 函数会评估由 Amazon Config 发送的配置信息并返回评估结果。有关 Lambda 函数的更多信息,请参阅《Amazon Lambda 开发人员指南》中的函数和事件源

重要

避免不必要的 Amazon Config 自定义 Lambda 规则评估

在创建 Amazon Config 自定义 Lambda 规则时,强烈建议添加逻辑来处理对已删除资源的评估。

当评估结果被标记为 NOT_APPLICABLE 时,这些资源将被标记为已删除并被清理。如果资源未被标记为 NOT_APPLICABLE,则在删除规则之前,评估结果将保持不变,这可能会导致删除规则后创建 ResourceCompliance 配置项目 (CI) 出现意外激增。

有关如何设置 Amazon Config 自定义 Lambda 规则以返回已删除资源的 NOT_APPLICABLE 的信息,请参阅使用 Amazon Config 自定义 Lambda 规则管理已删除的资源

注意:默认情况下,Amazon Config 自定义策略规则会处理此行为。

注意

大量 Lambda 函数调用

如果 Amazon Config 自定义 Lambda 规则的范围不限于一种或多种资源类型,则该规则可能会导致大量 Lambda 函数调用。为避免与您的账户相关的活动增加,请提供自定义 Lambda 规则范围内的资源。如果未选择任何资源类型,该规则将为账户中的所有资源调用 Lambda 函数。

触发器类型

将规则添加到账户后,Amazon Config 会将您的资源与规则的条件进行比较。完成这一初始评估后,Amazon Config 会在每次触发评估时继续执行评估。规则中会定义评估触发器,可以包括以下类型:

配置更改

当存在与规则范围匹配的资源,并且资源配置发生变化时,Amazon Config 会对规则进行评估。在 Amazon Config 发送配置项更改通知后,评估便会运行。

通过定义规则的范围来选择哪些资源启动评估。范围可以包括:

  • 一个或多个资源类型

  • 资源类型和资源 ID 的组合

  • 标签键和值的组合

  • 当创建、更新或删除任何记录的资源时

Amazon Config 在检测到与规则的范围匹配的资源发生更改时运行评估。您可以使用范围来定义哪些资源启动评估。

定期

Amazon Config 会按照您选择的频率运行规则评估(例如,每 24 小时)。

混合

有些规则既有配置更改也有定期触发器。对于这些规则,Amazon Config 会在检测到配置更改时以及按照您指定的频率评估您的资源。

评估模式

Amazon Config 规则有两种评估模式:

主动

使用主动评估在资源部署之前对其进行评估。这使您可以根据您所在区域的账户中的主动规则集,评估一组资源属性(如果用于定义 Amazon 资源)是 COMPLIANT 还是 NON_COMPLIANT。

有关更多信息,请参阅评估模式。有关支持主动评估的托管规则列表,请参阅按评估模式列出的 Amazon Config 托管规则列表

注意

主动规则不会修复标记为 NON_COMPLIANT 的资源,也不会阻止部署这些资源。

侦查

使用侦查评估来评估已部署的资源。这允许您评估现有资源的配置设置。

使用 Amazon Config 自定义 Lambda 规则管理已删除的资源

报告已删除资源的规则应返回 NOT_APPLICABLE 的评估结果,以避免不必要的规则评估。

删除资源时,Amazon Config 会创建一个 configurationItemStatusResourceDeletedconfigurationItem。您可以使用此元数据检查规则是否报告了已删除的资源。有关配置项的更多信息,请参阅概念 | 配置项

包括以下代码段以检查是否有已删除的资源,如果报告了已删除的资源,则将 Amazon Config 自定义 Lambda 规则的评估结果设置为 NOT_APPLICABLE

Custom Lambda Rules (Node.js)
// Check whether the resource has been deleted. If the resource was deleted, then the evaluation returns not applicable. function isApplicable(configurationItem, event) { checkDefined(configurationItem, 'configurationItem'); checkDefined(event, 'event'); const status = configurationItem.configurationItemStatus; const eventLeftScope = event.eventLeftScope; return (status === 'OK' || status === 'ResourceDiscovered') && eventLeftScope === false; }
Custom Lambda Rules (Python)
# Check whether the resource has been deleted. If the resource was deleted, then the evaluation returns not applicable. def is_applicable(configurationItem, event): try: check_defined(configurationItem, 'configurationItem') check_defined(event, 'event') except: return True status = configurationItem['configurationItemStatus'] eventLeftScope = event['eventLeftScope'] if status == 'ResourceDeleted': print("Resource Deleted, setting Compliance Status to NOT_APPLICABLE.") return (status == 'OK' or status == 'ResourceDiscovered') and not eventLeftScope
注意

默认情况下,Amazon Config 托管规则和 Amazon Config 自定义策略规则会处理此行为。

如果您将 Python 和 Amazon Config 开发工具包 (RDK) 与 Amazon Config 开发工具包库 (RDKlib) 结合使用来创建 Amazon Config 自定义 Lambd 规则,则导入的评估程序类将检查此行为。有关如何使用 RDK 和 RDKlib 编写规则的信息,请参阅使用 RDK 和 RDKlib 编写规则