教程:使用 CloudWatch Events 监控组织的重要更改 - AWS Organizations
AWS 文档中描述的 AWS 服务或功能可能因区域而异。要查看适用于中国区域的差异,请参阅中国的 AWS 服务入门

教程:使用 CloudWatch Events 监控组织的重要更改

本教程介绍如何配置 CloudWatch Events,以监控对组织进行的更改。首先,学会配置一条规则,当用户调用特定 AWS Organizations 操作时即触发该规则。然后,您可将 CloudWatch Events 配置为触发规则后运行 AWS Lambda 函数,并将 Amazon SNS 配置为发送一封电子邮件,其中包含有关该事件的详细信息。

下图演示了本教程的主要步骤。

步骤 1:配置跟踪和事件选择器

在 AWS CloudTrail 中创建称为 trail 的日志。对其进行配置,捕获所有 API 调用。

步骤 2:配置 Lambda 函数

创建 AWS Lambda 函数,将事件的详细信息记录到 S3 存储桶中。

步骤 3:创建向订阅者发送电子邮件的 Amazon SNS 主题

创建一个 Amazon SNS 主题,向其订阅者发送电子邮件,然后自己订阅该主题。

步骤 4:创建 CloudWatch Events 规则

创建一条规则,要求 CloudWatch Events 将指定 API 调用的详细信息传递给 Lambda 函数,并发送给 SNS 主题的订阅者。

步骤 5:测试您的 CloudWatch Events 规则

运行某项监控操作,测试您的新规则。在本教程中,所监控的操作是创建组织部门 (OU)。您可以查看 Lambda 函数创建的日志条目,并查看 Amazon SNS 发送给订阅者的电子邮件。

提示

您还可以将本教程用作配置类似操作的指南,如在账户创建完成时发送电子邮件通知。因为创建账户是异步操作,所以在默认情况下,在完成时不会通知您。有关将 AWS CloudTrail 和 CloudWatch Events 与 AWS Organizations 配合使用的更多信息,请参阅AWS Organizations 中的日志记录和监控

先决条件

本教程假定:

  • 您可以从组织的主账户中以 IAM 用户的身份登录 AWS 管理控制台。IAM 用户必须有权在 CloudTrail 中创建和配置日志,在 Lambda 中创建和配置函数,在 Amazon SNS 中创建和配置主题以及在 CloudWatch 中创建和配置规则。有关授予权限的更多信息,请参阅 IAM 用户指南中的访问管理,或参阅要配置访问权限的服务的指南。

  • 您可以访问现有的 Amazon Simple Storage Service (Amazon S3) 存储桶(或有权限创建存储桶),用于接收在第一步配置的 CloudTrail 日志。

重要

目前,AWS Organizations 只在美国东部(弗吉尼亚北部)区域托管(尽管它面向全球提供)。要执行本教程中的步骤,您必须配置 AWS 管理控制台,才能使用该区域。

步骤 1:配置跟踪和事件选择器

在此步骤中,您登录主账户并在 AWS CloudTrail 中配置日志(称为 trail)。您还需配置跟踪的事件选择器,以捕获所有读/写 API 调用,这样 CloudWatch Events 就有了可以触发的调用。

创建跟踪

  1. 以组织主账户的管理员身份登录 AWS,然后通过 https://console.amazonaws.cn/cloudtrail/ 打开 CloudTrail 控制台。

  2. 在控制台右上角的导航栏中,选择 美国东部(弗吉尼亚北部) 区域。如果您选择其他区域,AWS Organizations 不会在 CloudWatch Events 配置设置中作为一个选项出现,CloudTrail 也不会捕获 AWS Organizations 的相关信息。

  3. 在导航窗格中,选择 Trails

  4. 选择 Create trail (创建跟踪)

  5. 对于 Trail name (跟踪名称),输入 My-Test-Trail

  6. 执行下列选项之一来指定 CloudTrail 将日志提交到的位置:

    • 如果您已有一个存储桶,选择 Create a new S3 bucket (创建新 S3 存储桶) 旁边的 No (否),然后从 S3 bucket (S3 存储桶) 列表中选择存储桶名称。

    • 如果您需要创建存储桶,请选择 Create a new S3 bucket (创建新 S3 存储桶) 旁边的 Yes (是),然后在 S3 bucket (S3 存储桶) 中输入新存储桶的名称。

      注意

      S3 存储桶的名称必须是全球唯一的。

  7. 选择 Create

  8. 选择您刚刚创建的 My-Test-Trail 跟踪。

  9. 选择 Management events 旁边的铅笔图标。

  10. 对于 Read/Write events,依次选择 AllSaveConfigure

如果警报规则匹配传入的 API 调用,CloudWatch Events 允许您选择多种不同的方式发送警报。本教程演示了两种方法:调用 Lambda 函数,该函数可记录 API 调用;向 Amazon SNS 主题发送信息,向该主题的订阅者发送电子邮件或短信。在接下来的两个步骤中,您将创建所需的组件:Lambda 函数和 Amazon SNS 主题。

步骤 2:配置 Lambda 函数

在本步骤中,您将创建记录 API 活动的 Lambda 函数,这些活动由您稍后配置的 CloudWatch Events 规则发送给函数。

创建记录 CloudWatch Events 事件的 Lambda 函数

  1. https://console.amazonaws.cn/lambda/ 打开 AWS Lambda 控制台。

  2. 如果您是首次使用 Lambda,请在欢迎页面上选择 Get Started Now (立即开始使用);否则,选择 Create a function (创建函数)

  3. Create function (创建函数) 页面上,选择 Blueprints (蓝图)

  4. Blueprints (蓝图) 搜索框中,为筛选条件输入 hello,然后选择 hello-world 蓝图。

  5. 选择 Configure (配置)

  6. Basic information (基本信息) 页面上,执行以下操作:

    1. 对于 Lambda 函数名称,在 Name (名称) 文本框中输入 LogOrganizationEvents

    2. 对于 Role (角色),选择 Create a custom role (创建自定义角色),然后在 AWS Lambda requires access to your resources (AWS Lambda 需要访问您的资源) 页面底部,选择 Allow (允许)。此角色授予您的 Lambda 函数访问所需数据的权限和写入输出日志的权限。

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

  7. 在下一页上,编辑 Lambda 函数的代码,如以下示例所示:

    console.log('Loading function'); exports.handler = async (event, context) => { console.log('LogOrganizationsEvents'); console.log('Received event:', JSON.stringify(event, null, 2)); return event.key1; // Echo back the first key value // throw new Error('Something went wrong'); };

    该示例代码使用 LogOrganizationEvents 标记字符串记录事件,后跟组成事件的 JSON 字符串。

  8. 选择保存

步骤 3:创建向订阅者发送电子邮件的 Amazon SNS 主题

在此步骤中,您将创建可向订阅者发送电子邮件信息的 Amazon SNS 主题。请将该主题作为您稍后创建的 CloudWatch Events 规则的“目标”。

创建可向订阅者发送电子邮件的 Amazon SNS 主题

  1. https://console.amazonaws.cn/sns/v3/ 打开 Amazon SNS 控制台。

  2. 在导航窗格中,选择 Topics

  3. 选择 Create new topic (创建新主题)

    1. 对于 Topic name (主题名称),输入 OrganizationsCloudWatchTopic

    2. 对于 Display name (显示名称),输入 OrgsCWEvnt

    3. 选择 Create topic (创建主题)

  4. 现在,您可以创建该主题的订阅。选择您刚刚创建的主题的 ARN。

  5. 选择 Create subscription

    1. Create subscription (创建订阅) 页面上,为 Protocol (协议) 选择 Email (电子邮件)

    2. 对于 Endpoint (终端节点),输入您的电子邮件地址。

    3. 选择 Create subscription (创建订阅)。AWS 将向前一步中指定的电子邮件地址发送电子邮件。收到这封电子邮件后,选择电子邮件中的 Confirm subscription (确认订阅) 链接,验证您已成功接收到这封电子邮件。

    4. 返回控制台并刷新页面。Pending confirmation 消息消失,现已替换为有效的订阅 ID。

步骤 4:创建 CloudWatch Events 规则

现在,您的账户中存在所需的 Lambda 函数,您可以创建 CloudWatch Events 规则,在满足该规则的条件时调用该函数。

创建 CloudWatch Events 规则

  1. https://console.amazonaws.cn/cloudwatch/ 打开 CloudWatch 控制台。

  2. 在导航窗格中,选择 Rules (规则),然后选择 Create rule (创建规则)

  3. 对于 Event source (事件源),执行以下操作:

    1. 选择 Event pattern

    2. 选择 Build event pattern to match events by service

    3. 对于 Service Name,选择 Organizations

    4. 对于 Event Type (事件类型),选择 AWS API Call via CloudTrail (通过 CloudTrail 进行的 AWS API 调用)

    5. 选择 Specific operation(s) (特定操作),然后输入您希望监控的 API:CreateAccountCreateOrganizationalUnit。您还可以选择所需的任何其他内容。有关可用 AWS Organizations API 的完整列表,请参阅 AWS Organizations API 参考

  4. Targets (目标) 下,对于 Function (函数),选择您在上一过程中创建的函数。

  5. Targets (目标) 下,选择 Add target (添加目标)

  6. 在新目标行中,选择下拉标题,然后选择 SNS topic (SNS 主题)

  7. 对于 Topic (主题),选择您在上一过程中创建的名为 OrganizationCloudWatchTopic 的主题。

  8. 选择 Configure details (配置详细信息)

  9. Configure rule details (配置规则详细信息) 页面上,对于 Name (名称),输入 OrgsMonitorRule,将 State (状态) 保持选中状态,然后选择 Create rule (创建规则)

步骤 5:测试您的 CloudWatch Events 规则

在此步骤中,您将创建一个组织部门 (OU),然后观察 CloudWatch Events 规则生成日志条目,并向您发送有关事件详细信息的电子邮件。

创建 OU

  1. https://console.amazonaws.cn/organizations/ 打开 AWS Organizations 控制台。

  2. 选择 Organize accounts (组织账户) 选项卡,然后选择 New organizational unit (新建组织部门)

  3. 对于 OU 的名称,输入 TestCWEOU,然后选择 Create organizational unit (创建组织部门)

查看 CloudWatch Events 日志条目

  1. https://console.amazonaws.cn/cloudwatch/ 打开 CloudWatch 控制台。

  2. 在导航窗格中,选择 Logs (日志)

  3. Log Groups (日志组) 下,选择与您的 Lambda 函数关联的组:/aws/lambda/LogOrganizationEvents

  4. 每个组包含一个或多个流,应该有一个今天的组。选择这个组。

  5. 查看日志。您应该可以看到与以下内容类似的行:

  6. 选择条目中间的行,查看收到事件的完整 JSON 文本。您可以在输出的 requestParametersresponseElements 部分查看 API 请求的所有详细信息。

    2017-03-09T22:45:05.101Z 0999eb20-051a-11e7-a426-cddb46425f16 Received event: { "version": "0", "id": "123456-EXAMPLE-GUID-123456", "detail-type": "AWS API Call via CloudTrail", "source": "aws.organizations", "account": "123456789012", "time": "2017-03-09T22:44:26Z", "region": "us-east-1", "resources": [], "detail": { "eventVersion": "1.04", "userIdentity": { ... }, "eventTime": "2017-03-09T22:44:26Z", "eventSource": "organizations.amazonaws.com", "eventName": "CreateOrganizationalUnit", "awsRegion": "us-east-1", "sourceIPAddress": "192.168.0.1", "userAgent": "AWS Organizations Console, aws-internal/3", "requestParameters": { "parentId": "r-exampleRootId", "name": "TestCWEOU" }, "responseElements": { "organizationalUnit": { "name": "TestCWEOU", "id": "ou-exampleRootId-exampleOUId", "arn": "arn:aws:organizations::1234567789012:ou/o-exampleOrgId/ou-exampleRootId-exampeOUId" } }, "requestID": "123456-EXAMPLE-GUID-123456", "eventID": "123456-EXAMPLE-GUID-123456", "eventType": "AwsApiCall" } }
  7. 检查您的电子邮件账户是否收到来自 OrgsCWEvnt 的邮件(您的 Amazon SNS 主题的显示名称)。电子邮件正文中包含与上一步所示的日志条目相同的 JSON 文本输出。

清理:删除您不再需要的资源

为避免产生费用,您应删除本教程要求您创建,而您也不希望保留的全部 AWS 资源。

清理您的 AWS 环境

  1. 使用 CloudTrail 控制台 (https://console.amazonaws.cn/cloudtrail/) 删除您通过步骤 1 创建的、名为 My-Test-Trail 的跟踪。

  2. 如果您在步骤 1 中创建了 Amazon S3 存储桶,请使用 Amazon S3 控制台 (https://console.amazonaws.cn/s3/) 将其删除。

  3. 使用 Lambda 控制台 (https://console.amazonaws.cn/lambda/) 删除您通过步骤 2 创建的、名为 LogOrganizationEvents 的函数。

  4. 使用 Amazon SNS 控制台 (https://console.amazonaws.cn/sns/) 删除您通过步骤 3 创建的、名为 OrganizationsCloudWatchTopic 的 Amazon SNS 主题。

  5. 使用 CloudWatch 控制台 (https://console.amazonaws.cn/cloudwatch/) 删除您通过步骤 4 创建的、名为 OrgsMonitorRule 的 CloudWatch 规则。

就是这样。在本教程中,您配置了 CloudWatch Events,以监控对组织的更改。您配置了一条规则,当用户调用特定 AWS Organizations 操作时即触发该规则。该规则运行 Lambda 函数来记录事件,并发送包含该事件详细信息的电子邮件。