教程:使用 CloudWatch Events 监控组织的重要更改
本教程介绍如何配置 CloudWatch Events,以监控对组织进行的更改。首先,学会配置一条规则,当用户调用特定 Amazon Organizations 操作时即触发该规则。然后,您可将 CloudWatch Events 配置为触发规则后运行 Amazon Lambda 函数,并将 Amazon SNS 配置为发送一封电子邮件,其中包含有关该事件的详细信息。
下图演示了本教程的主要步骤。
- 步骤 1:配置跟踪和事件选择器
-
在 中创建称为跟踪Amazon CloudTrail的日志。对其进行配置,捕获所有 API 调用。
- 步骤 2:配置 Lambda 函数
-
创建 Amazon Lambda 函数,将事件的详细信息记录到 S3 存储桶中。
- 步骤 3:创建 Amazon SNS 主题,向订阅者发送电子邮件
-
创建一个 Amazon SNS 主题,向其订阅者发送电子邮件,然后自己订阅该主题。
- 步骤 4:创建 CloudWatch Events 规则
-
创建一条规则,要求 CloudWatch Events 将指定 API 调用的详细信息传递给 Lambda 函数,并发送给 SNS 主题的订阅者。
- 步骤 5:测试您的 CloudWatch Events 规则
-
运行某项监控操作,测试您的新规则。在本教程中,所监控的操作是创建组织部门 (OU)。您可以查看 Lambda 函数创建的日志条目,并查看 Amazon SNS 发送给订阅者的电子邮件。
您还可以将本教程用作配置类似操作的指南,如在账户创建完成时发送电子邮件通知。因为创建账户是异步操作,所以在默认情况下,在完成时不会通知您。有关在 Amazon Organizations 中将 Amazon CloudTrail 和 CloudWatch Events 结合使用的更多信息,请参阅Amazon Organizations 中的日志记录和监控。
Prerequisites
本教程假定:
-
您可以从组织的管理账户中以 IAM 用户的身份登录 Amazon Web Services Management Console。IAM 用户必须有权在 CloudTrail 中创建和配置日志,在 Lambda 中创建和配置函数,在 Amazon SNS 中创建和配置主题,在 CloudWatch 中创建和配置规则。有关授予权限的更多信息,请参阅《IAM 用户指南》中的访问管理,或参阅要配置访问权限的服务的指南。
-
您可以访问现有的 Amazon Simple Storage Service(Amazon S3)存储桶(或有权限创建存储桶),用于接收在第一步配置的 CloudTrail 日志。
目前,Amazon Organizations 只在美国东部(弗吉尼亚北部)区域托管(尽管它面向全球提供)。要执行本教程中的步骤,您必须配置 Amazon Web Services Management Console,才能使用该区域。
步骤 1:配置跟踪和事件选择器
在此步骤中,您登录管理账户并在 Amazon CloudTrail 中配置日志(称为跟踪)。您还需配置跟踪的事件选择器,以捕获所有读/写 API 调用,这样 CloudWatch Events 就有了可以触发的调用。
创建跟踪
-
以组织管理账户的管理员身份登录Amazon,然后通过 https://console.amazonaws.cn/cloudtrail/
打开 CloudTrail 控制台。 -
在控制台右上角的导航栏中,选择美国东部(弗吉尼亚北部)区域。如果您选择其他区域,Amazon Organizations 不会在 CloudWatch Events 配置设置中作为一个选项出现,CloudTrail 也不会捕获 Amazon Organizations 的相关信息。
-
在导航窗格中,选择 Trails。
-
选择 Create trail (创建跟踪)。
-
对于 Trail name (跟踪名称),输入
My-Test-Trail。 -
执行下列选项之一来指定 CloudTrail 将日志提交到的位置:
-
如果您已有一个存储桶,选择 Create a new S3 bucket (创建新存储桶) 旁边的 No (否),然后从 S3 bucket (S3 存储桶) 列表中选择存储桶名称。
-
如果您需要创建存储桶,请选择 Create a new S3 bucket (创建新存储桶) 旁边的 Yes (是),然后在 S3 bucket (S3 存储桶) 中输入新存储桶的名称。
注意 S3 存储桶的名称必须是全球唯一的。
-
-
选择创建。
-
选择您刚刚创建的
My-Test-Trail跟踪。 -
选择 Management events 旁边的铅笔图标。
-
对于 Read/Write events,依次选择 All、Save、Configure。
如果警报规则匹配传入的 API 调用,CloudWatch Events 允许您选择多种不同的方式发送警报。本教程演示了两种方法:调用 Lambda 函数,该函数可记录 API 调用;向 Amazon SNS 主题发送信息,向该主题的订阅者发送电子邮件或短信。在接下来的两个步骤中,您将创建所需的组件:Lambda 函数和 Amazon SNS 主题。
步骤 2:配置 Lambda 函数
在本步骤中,您将创建记录 API 活动的 Lambda 函数,这些活动由您稍后配置的 CloudWatch Events 规则发送给函数。
创建记录 CloudWatch Events 事件的 Lambda 函数
-
从 Amazon Lambda 打开 https://console.amazonaws.cn/lambda/
控制台。 -
如果您是首次使用 Lambda,请在欢迎页面上选择 Get Started Now (立即开始使用);否则,选择 Create a function (创建函数)。
-
在 Create function (创建函数) 页面上,选择 Blueprints (蓝图)。
-
从 Blueprints (蓝图) 搜索框中,为筛选条件输入
hello,然后选择 hello-world 蓝图。 -
选择 Configure(配置)。
-
在 Basic information (基本信息) 页面上,执行以下操作:
-
对于 Lambda 函数名称,在 Name (名称) 文本框中输入
LogOrganizationEvents。 -
对于 Role (角色),选择 Create a custom role (创建自定义角色),然后在 Amazon Lambda requires access to your resources (Amazon Lambda 需要访问您的资源) 页面底部,选择 Allow (允许)。此角色授予您的 Lambda 函数访问所需数据的权限和写入输出日志的权限。
-
选择创建函数。
-
-
在下一页上,编辑 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 字符串。 -
选择保存。
步骤 3:创建 Amazon SNS 主题,向订阅者发送电子邮件
在此步骤中,您将创建 Amazon SNS 主题,向订阅者发送电子邮件信息。请将该主题作为您稍后创建的 CloudWatch Events 规则的“目标”。
创建 Amazon SNS 主题,向订阅者发送电子邮件
-
从 https://console.amazonaws.cn/sns/v3/
打开 Amazon SNS 控制台。 -
在导航窗格中,选择 Topics。
-
选择 Create new topic (创建新主题)。
-
对于 Topic name (主题名称),输入
OrganizationsCloudWatchTopic。 -
对于 Display name (显示名称),输入
OrgsCWEvnt。 -
选择 Create topic (创建主题)。
-
-
现在,您可以创建该主题的订阅。选择您刚刚创建的主题的 ARN。
-
选择 Create subscription。
-
在 Create subscription (创建订阅) 页面上,为 Protocol (协议) 选择 Email (电子邮件)。
-
对于 Endpoint (终端节点),输入您的电子邮件地址。
-
选择 Create subscription (创建订阅)。Amazon 将向前一步中指定的电子邮件地址发送电子邮件。收到这封电子邮件后,选择电子邮件中的 Confirm subscription (确认订阅) 链接,验证您已成功接收到这封电子邮件。
-
返回控制台并刷新页面。Pending confirmation 消息消失,现已替换为有效的订阅 ID。
-
步骤 4:创建 CloudWatch Events 规则
现在,您的账户中存在所需的 Lambda 函数,您可以创建 CloudWatch Events 规则,在满足该规则的条件时调用该函数。
要创建 CloudWatch Events 规则
-
从 https://console.amazonaws.cn/cloudwatch/
打开 CloudWatch 控制台。 -
和以前一样,您必须将控制台设置为美国东部(弗吉尼亚北部)区域,或有关 Organizations 的信息不可用。在控制台右上角的导航栏中,选择美国东部(弗吉尼亚北部)区域。
-
在导航窗格中,选择 Rules (规则),然后选择 Create rule (创建规则)。
-
对于 Event source (事件源),执行以下操作:
-
选择 Event pattern。
-
选择 Build event pattern to match events by service。
-
对于 Service Name,选择 Organizations。
-
对于 Event Type (事件类型),选择 Amazon API Call via CloudTrail (通过 CloudTrail 进行的 Amazon API 调用)。
-
选择 Specific operation(s) (特定操作),然后输入您希望监控的 API:CreateAccount 和 CreateOrganizationalUnit。您还可以选择所需的任何其他内容。有关可用 Amazon Organizations API 的完整列表,请参阅 Amazon Organizations API 参考。
-
-
在 Targets (目标) 下,对于 Function (函数),选择您在上一过程中创建的函数。
-
在 Targets (目标) 下,选择 Add target (添加目标)。
-
在新目标行中,选择下拉标题,然后选择 SNS topic (SNS 主题)。
-
对于 Topic (主题),选择您在上一过程中创建的名为 OrganizationCloudWatchTopic 的主题。
-
选择 Configure details。
-
在 Configure rule details (配置规则详细信息) 页面上,对于 Name (名称),输入
OrgsMonitorRule,将 State (状态) 保持选中状态,然后选择 Create rule (创建规则)。
步骤 5:测试您的 CloudWatch Events 规则
在此步骤中,您将创建一个组织部门(OU),然后观察 CloudWatch Events 规则生成日志条目,并向您发送有关事件详细信息的电子邮件。
查看 CloudWatch Events 日志条目
-
从 https://console.amazonaws.cn/cloudwatch/
打开 CloudWatch 控制台。 -
在导航窗格中,选择 Logs (日志)。
-
在 Log Groups (日志组) 下,选择与您的 Lambda 函数关联的组:/aws/lambda/LogOrganizationEvents。
-
每个组包含一个或多个流,应该有一个今天的组。选择这个组。
-
查看日志。您应该可以看到与以下内容类似的行:
-
选择条目中间的行,查看收到事件的完整 JSON 文本。您可以在输出的
requestParameters和responseElements部分查看 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" } } -
检查您的电子邮件账户是否收到来自 OrgsCWEvnt 的邮件(您的 Amazon SNS 主题的显示名称)。电子邮件正文中包含与上一步所示的日志条目相同的 JSON 文本输出。
清理:删除您不再需要的资源
为避免产生费用,您应删除本教程要求您创建,而您也不希望保留的全部 Amazon 资源。
清理您的 Amazon 环境
-
使用 CloudTrail 控制台
删除您通过步骤 1 创建的、名为 My-Test-Trail的跟踪。 -
如果您在步骤 1 中创建了 Amazon S3 存储桶,请使用 Amazon S3 控制台
将其删除。 -
使用 Lambda 控制台
删除您通过步骤 2 创建的、名为 LogOrganizationEvents的函数。 -
使用 Amazon SNS 控制台
删除您通过步骤 3 创建的、名为 OrganizationsCloudWatchTopic的 Amazon SNS 主题。 -
使用 CloudWatch 控制台
删除您通过步骤 4 创建的、名为 OrgsMonitorRule的 CloudWatch 规则。 -
使用 Organizations 控制台
删除您通过步骤 5 创建的、名为 TestCWEOU的 OU。
就是这样。在本教程中,您配置了 CloudWatch Events,以监控对组织的更改。您配置了一条规则,当用户调用特定 Amazon Organizations 操作时即触发该规则。该规则运行 Lambda 函数来记录事件,并发送包含该事件详细信息的电子邮件。