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

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

自定义 Lambda 规则(一般示例)

完成以下过程以创建自定义 Lambda 规则。要创建自定义 Lambda 规则,请先创建一个Amazon Lambda函数,它包含规则的评估逻辑。然后,您将该函数与您在中创建的自定义 Lambda 规则关联起来Amazon Config.

重要

作为最佳安全实践Amazon Config调用您的 Lambda 函数的权限,我们强烈建议您在 Lambda 基于资源的策略中限制访问权限sourceARN和/或sourceAccountId在调用请求中。有关更多信息,请参阅 的安全最佳实践Amazon Lambda基于资源的策略

为自定义 Config 规则创建 Amazon Lambda 函数

一个Lambda 函数是您上传到的自定义代码Amazon Lambda,它由事件源向其发布的事件调用。如果 Lambda 函数与Config 规则相关联,Amazon Config在触发规则时调用它。然后,Lambda 函数会评估由发送的配置信息Amazon Config,它返回评估结果。有关 Lambda 函数的更多信息,请参阅函数和事件源Amazon Lambda开发人员指南.

您可以使用以下支持的编程语言Amazon Lambda为自定义 Lambda 规则创建 Lambda 函数。为了简化此任务,您可以自定义Amazon Lambda蓝图或重用来自的示例函数Amazon ConfigRule GitHub存储库。

Amazon Lambda 蓝图

Amazon Lambda 控制台可以提供示例函数或蓝图,您可以通过添加自己的评估逻辑来对其进行自定义。当您创建函数时,您可以选择以下蓝图之一:

  • config-rule-change-triggered— 当你触发时Amazon资源配置变更。

  • config-rule-periodic— 以您选择的频率触发(例如,每 24 小时)。

Amazon ConfigRule GitHub 知识库

自定义 Lambda 规则示例函数的公共存储库可在上找到 GitHub,一种基于 Web 的代码托管和共享服务。示例函数由 Amazon 社区开发和提供。如果想使用示例函数,您可以将其代码复制到新的 Amazon Lambda 函数中。要查看存储库,请访问 https://github.com/awslabs/aws-config-rules/

为您的自定义规则创建函数

  1. 登录到 Amazon Web Services Management Console,然后通过以下网址打开 Amazon Lambda 控制台:https://console.aws.amazon.com/lambda/

  2. 在 Amazon Web Services Management Console菜单上,验证区域选择器是否设置为支持 Amazon Config 规则的区域。有关受支持的区域列表,请参阅Amazon Config区域和终端节点Amazon Web Services 一般参考.

  3. 选择 Create a Lambda function (创建 Lambda 函数)

  4. 使用蓝图page,您可以选择以下一种蓝图函数Amazon Config以规则为起点,或者你可以在没有蓝图的情况下继续操作,方法是选择跳过.

  5. Configure triggers 页面上,选择 Next

  6. 基本信息页面,键入名称和描述。

  7. 对于 Runtime,请选择您编写函数时使用的编程语言。

  8. 对于 Code entry type,请选择您偏好的条目类型。如果您使用的是蓝图,请保留预配置的代码。

  9. 用您选择的代码条目类型要求的方法提供您的代码。如果您正在使用蓝图,那么函数代码由代码编辑器提供,且您可以自定义代码,以使其包含您自己的评估逻辑。当 Amazon Config 调用您的函数时,您的代码可以评估它提供的事件数据:

    • 对于基于config-rule-change-triggeredblueprint,或者对于由配置更改触发的函数,事件数据是配置项目或超大配置项目对象Amazon已更改的资源。

    • 对于基于config-rule-periodicblueprint,或者对于以您选择的频率触发的函数,事件数据是一个 JSON 对象,其中包含有关何时触发评估的信息。

    • 对于这两种类型的函数,Amazon Config 会传递 JSON 格式的规则参数。您可以在中定义创建自定义 Lambda 规则时传递哪些规则参数Amazon Config.

    • 有关 Amazon Config 在调用您的函数时发布的事件示例,请参阅 Amazon Config 规则的示例事件

  10. 对于执行角色,选择从创建新角色AmazonPolicy templates.

  11. 对于 Role name,请输入名称。

  12. 对于Policy templates,选择AmazonConfig 规则权限.

  13. 验证详细信息并选择创建函数.

在 Amazon Config 中创建自定义规则

使用Amazon Config创建自定义 Lambda 规则并将该规则与 Lambda 函数关联起来。

创建自定义规则

  1. 通过以下网址打开 Amazon Config 控制台:https://console.aws.amazon.com/config/

  2. 在Amazon Web Services Management Console菜单,确认区域选择器设置为与您创建区域相同的区域Amazon Lambda您的自定义 Lambda 规则的函数。

  3. Rules 页面,选择 Add rule

  4. 指定规则类型页面,选择创建自定义规则.

  5. Configure rule 页面,键入一个名称和描述。

  6. 对于Amazon Lambda函数 ARN,请指定 ARNAmazon Lambda分配给你的函数。

    注意

    您在此步骤中指定的 ARN 不能包含 $LATEST 限定词。您指定的 ARN 可以不带有版本限定词,也可以带有除 $LATEST 之外的任何限定词。Amazon Lambda 支持函数版本控制功能,并为每个版本都分配一个带有限定词的 ARN。Amazon Lambda 对最新版本使用 $LATEST 限定词。

  7. 对于 Trigger type,请选择下列一个或两个选项:

    • 配置更改–Amazon Config在检测到配置更改时调用您的 Lambda 函数。

    • 定期–Amazon Config以您选择的频率(例如,每 24 小时)调用您的 Lambda 函数。

  8. 如果您的规则的触发器类型包括配置更改,指定下列任一选项变更范围用哪个Amazon Config调用你的 Lambda 函数:

    • 所有更改— 当记录了任何资源时Amazon Config已创建、更改或删除。

    • 资源— 创建、更改或删除与指定类型或类型加标识符匹配的任何资源时。

    • 标签— 创建、更改或删除任何带有指定标签的资源时

  9. 如果您的规则的触发器类型包括定期,请指定频率用哪个Amazon Config调用 Lambda 函数。

  10. 参数部分,指定您的任何规则参数Amazon Lambda函数求解析并求解出所需的值。

  11. 选择 Next(下一步)。在审核和创建页面,验证有关您的规则的详细信息,然后选择添加规则函数. 您的新规则显示在Rule页面。

    合规性将显示正在评估...直到Amazon Config接收来自您的评估结果Amazon Lambda函数。如果规则和函数按预期运行,结果汇总将在几分钟后显示。您可以使用刷新按钮更新结果。

    如果规则或函数没有按预期运行,您可能会在 Compliance 中看到以下一项内容:

    • No results reported (未报告任何结果) - Amazon Config 针对规则评估了您的资源。规则不适用于其范围内的 Amazon 资源,指定的资源已删除,或者评估规则已删除。要获取评估结果,请更新规则、更改其范围或者选择 Re-evaluate

      如果规则不报告评估结果,该消息可能也会出现。

    • No resources in scope (范围中没有资源) - Amazon Config 无法对照规则来评估您记录的 Amazon 资源,因为您的任何资源都不在规则范围内。您可以选择哪些资源Amazon Config上的记录设置页面。

    • Evaluations failed (评估失败) - 有关可帮助您确定问题的信息,请选择规则名称以打开其详细信息页面并查看错误消息。

注意

当您使用创建自定义 Lambda 规则时Amazon Config控制台,系统会自动为您创建相应的权限。如果您使用创建自定义 Lambda 规则Amazon CLI,你需要给Amazon Config调用 Lambda 函数,使用aws lambda add-permission命令。有关更多信息,请参阅将基于资源的策略用于Amazon Lambda(Lambda 函数策略)Amazon Lambda开发人员指南.

捐赠之前Amazon Config调用 Lambda 函数的权限,请参阅以下部分的安全最佳实践Amazon Lambda基于资源的策略.

的安全最佳实践Amazon Lambda基于资源的策略

作为安全最佳实践,为了避免向整个服务委托人名称 (SPN) 授予调用您的 Lambda 函数的调用权限,我们强烈建议您在基于 Lambda 资源的策略中使用以下方式限制访问权限sourceARN和/或sourceAccountId在调用请求中。

这些区域有:sourceARNARNAmazon Config调用 Lambda 函数的规则。

这些区域有:sourceAccountId是创建规则的用户的帐户 ID。

在基于资源的 Lambda 策略中限制访问有助于确保Amazon Lambda仅代表预期用户和场景访问您的资源。

要添加基于 SPN 的权限,您需要使用以下 CLI

aws lambda add-permission --function-name rule lambda function name --action lambda:InvokeFunction --statement-id config --principal config.amazonaws.com

添加 SourceAccountId 基于的权限

在创建规则之前,您可以添加sourceAccountId使用以下 CLI 对基于资源的策略的基于权限的策略

aws lambda add-permission --function-name rule lambda function name --action lambda:InvokeFunction --statement-id config --principal config.amazonaws.com --source-account your account ID

要将两者都添加 SourceArn 和 SourceAccountId 基于的权限

创建规则后,您可以添加sourceARN使用以下 CLI 对基于资源的策略授予基于资源的策略的基于权限。这仅允许特定规则 ARN 调用 Lambda 函数。

aws lambda add-permission --function-name rule lambda function name --action lambda:InvokeFunction --statement-id config --principal config.amazonaws.com --source-account your account ID --source-arn ARN of the created config rule

评估其他资源类型

您可以创建自定义 Lambda 规则,对尚未记录的资源类型运行评估Amazon Config. 如果你想评估其他资源类型的合规性,这很有用Amazon Config目前未录制。有关您可以使用自定义 Lambda 规则评估的其他资源类型的列表,请参阅Amazon资源类型参考.

注意

中的列表Amazon CloudFormation用户指南可能包含最近添加的资源类型,这些资源类型尚不可用于在中创建自定义 Lambda 规则Amazon Config.Amazon Config定期添加资源类型支持。

示例

  1. 您想评估账户中的Amazon S3 Glacier 文件库。Amazon S3 Glacier 文件库资源目前未记录Amazon Config.

  2. 你创建一个Amazon Lambda用于评估您的 Amazon S3 Glacier 文件库是否符合您的账户要求的函数。

  3. 您创建了一个名为的自定义 Lambda 规则evaluate-glacier-vaults 然后分配你的Amazon Lambda按规则行事。

  4. Amazon Config调用您的 Lambda 函数,然后根据您的规则评估 Amazon S3 Glacier 文件库。

  5. Amazon Config 返回评估结果,您可以查看您的规则的合规性结果。

注意

您可以查看 Amazon Config 时间线中的配置详细信息,并在 Amazon Config 支持的资源的 Amazon Config 控制台中查找资源。如果您配置 Amazon Config 以记录所有资源类型,则新添加的支持资源将被自动记录。有关更多信息,请参阅支持的资源类型