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存储库)(一种 policy-as-code 语言)。

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

Amazon Config 自定义策略规则

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

Amazon Config 自定义 Lambda 规则

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

与成本相关的注意事项

有关资源记录相关费用的详细信息,请参阅Amazon Config 定价

建议:添加逻辑以处理自定义 lambda 规则对已删除资源的评估

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

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

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

建议:为自定义 lambda 规则提供范围内的资源

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

建议:在删除规则之前停止记录资源合规性

强烈建议您在删除账户中的规则之前,停止记录该AWS::Config::ResourceCompliance资源类型。删除规则会为配置记录器创建 CI,AWS::Config::ResourceCompliance并可能影响您的 Amazon Config 配置记录器成本。如果您要删除评估大量资源类型的规则,则可能会导致记录的 CI 数量激增。

最佳实践:

  1. 停止录制 AWS::Config::ResourceCompliance

  2. 删除规则

  3. 开启录制 AWS::Config::ResourceCompliance

触发器类型

向账户添加规则后, Amazon Config 将您的资源与规则的条件进行比较。在这次初始评估之后,每次触发评估时都会 Amazon Config 继续运行评估。评估触发器被定义为规则的一部分,它们可以包括以下类型。

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

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

  • 一个或多个资源类型

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

  • 标签键和值的组合

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

Amazon Config 当它检测到与规则范围相匹配的资源发生变化时,就会运行评估。您可以使用范围来定义哪些资源启动评估。

定期 Amazon Config 按您选择的频率对规则进行评估;例如,每 24 小时运行一次。
混合 有些规则既有配置更改也有定期触发器。对于这些规则,它 Amazon Config 会在检测到配置更改时以及按照您指定的频率评估您的资源。

评估模式

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

评估模式 描述
主动

使用主动评估在资源部署之前对其进行评估。这使您可以评估一组资源属性(如果用于定义 Amazon 资源)是合规还是不合规,因为您所在地区的账户中有一组主动规则。

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

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

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

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

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

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

包括以下代码片段以检查是否有已删除的资源,并将 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 自定义策略规则会处理此行为。

如果您使用开发套件 (RDK) 和 Amazon Config Amazon Config 开发套件库 (rdkLib) 使用 Python 创建 Amazon Config 自定义 lambd 规则,则导入的评估器类将检查此行为。有关如何使用 RDK 和 RDKlib 编写规则的信息,请参阅使用 RDK 和 RDKlib 编写规则