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

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

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

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

重要

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

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

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

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

Amazon Lambda 蓝图

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

  • config-rule-change-triggered— 当您的 Amazon 资源配置发生变化时触发。

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

Amazon Config 规则 GitHub 存储库

自定义 Lambda 规则示例函数的公共存储库位于基于 Web 的代码托管和共享服务上 GitHub。示例函数是由 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 Web Services 一般参考》中的 Amazon Config 区域和终端节点

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

  4. 在 “使用蓝图” 页面上,您可以选择 Amazon Config 规则的蓝图函数之一作为起点,也可以通过选择 “跳过” 在没有蓝图的情况下继续操作。

  5. Configure triggers 页面上,选择 Next

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

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

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

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

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

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

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

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

  10. 对于执行角色,选择从 Amazon 策略模板创建新角色

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

  12. 对于策略模板,选择 Amazon Config 规则权限

  13. 验证详细信息,然后选择创建函数

在中创建自定义规则 Amazon Config

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

创建自定义规则
  1. 打开 Amazon Config 控制台,网址为 https://console.aws.amazon.com/config/

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

  3. Rules 页面,选择 Add rule

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

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

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

    注意

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

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

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

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

  8. 如果您的规则的触发器类型包括配置更改,请为 Amazon Config 调用您的 Lambda 函数的更改范围指定以下选项之一:

    • 所有更改-创建、更改或删除记录的任何资源时。 Amazon Config

    • 资源 – 在创建、更改或删除任何与指定类型(或类型和标识符)匹配的资源时。

    • 标签 – 在创建、更改或删除任何包含指定标签的资源时。

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

  10. 参数部分中,指定您的 Amazon Lambda 函数评估的所有规则参数和所需的值。

  11. 选择下一步。在审核并创建页面上,验证您的规则的详细信息,然后选择添加规则函数。您的新规则将显示在规则页面中。

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

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

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

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

    • 范围内没有资源- Amazon Config 无法根据此规则评估您记录的 Amazon 资源,因为您的所有资源都不在该规则的范围内。您可以在设置页面上选择 Amazon Config 记录哪些资源。

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

注意

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

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

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

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

sourceARN是调用 Lambda 函数的 Amazon Config 规则的 ARN。

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 基于权限的权限

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

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

同时添加 SourceAccountId 基于 SourceArn 和的权限

在创建规则之后,可以使用以下 CLI 向基于资源的策略添加基于 sourceARN 的权限。这仅允许特定规则 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 资源类型参考》

注意

为未记录的资源类型创建自定义 Lambda 时 Amazon Config,该规则必须具有定期触发类型。不支持配置更改触发器类型。有关更多信息,请参阅 Amazon Config 规则的评估模式和触发器类型

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

  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 为记录所有资源类型,则将自动记录新支持的资源。有关更多信息,请参阅 支持的资源类型