如何使用输入转换器为 API 调用设置人类可读的 EventBridge 通知?

上次更新时间:2021 年 12 月 9 日

我想在 Amazon EventBridge 中收到有关 Amazon Elastic Compute Cloud (Amazon EC2) 安全组 API 调用的人类可读的通知。如何使用输入转换器自定义通知?

简短描述

您可以创建 EventBridge 规则以匹配 AWS CloudTrail 捕获的与安全组相关的 API 调用。该规则配置有与相关 API 调用匹配的事件模式

使用输入转换器自定义传递给目标的文本。例如,目标可能是 Amazon Simple Notification Service (Amazon SNS) 主题或 AWS Lambda 函数。这样做可将原始 JSON 事件转换为人类可读的通知。有关更多信息,请参阅教程:使用输入转换器自定义 EventBridge 传递给事件目标的内容

解决方法

示例事件

在下面的示例事件中,当用户在 Virtual Private Cloud (VPC) 中使用 CreateSecurityGroup 创建了一个安全组时,系统捕获了一个 CloudTrail 日志事件。然后系统以 JSON 格式将此事件发布到 CloudWatch,如下所示:

{
    "version": "0",
    "id": "41dff147-cfbc-492a-9a98-9dd00d082417",
    "detail-type": "AWS API Call via CloudTrail",
    "source": "aws.ec2",
    "account": "123456789012",
    "time": "2017-07-14T16:36:23Z",
    "region": "us-east-1",
    "resources": [],
    "detail": {
        "eventVersion": "1.05",
        "userIdentity": {
            "type": "Root",
            "principalId": "123456789012",
            "arn": "arn:aws:iam::123456789012:root",
            "accountId": "123456789012",
            "accessKeyId": "ASIAIRP4G1234567891Q",
            "userName": "iamuser",
            "sessionContext": {
                "attributes": {
                    "mfaAuthenticated": "false",
                    "creationDate": "2017-07-14T16:27:38Z"
                }
            }
        },
        "eventTime": "2017-07-14T16:36:23Z",
        "eventSource": "ec2.amazonaws.com",
        "eventName": "CreateSecurityGroup",
        "awsRegion": "us-east-1",
        "sourceIPAddress": "72.21.196.64",
        "userAgent": "console.ec2.amazonaws.com",
        "requestParameters": {
            "groupName": "test",
            "groupDescription": "test",
            "vpcId": "vpc-54a4232d"
        },
        "responseElements": {
            "_return": true,
            "groupId": "sg-82d531f3"
        },
        "requestID": "a4609e55-69ac-4a2d-8057-843dc8b4658b",
        "eventID": "7774b898-59c1-48a5-9c41-af1bcaa04612",
        "eventType": "AwsApiCall"
    }
}

示例解决方法

以下面的示例解决方法为模型,以 JSON 格式从 EventBridge 创建人类可读的自定义通知。

1.    为安全组相关的 API 调用创建 EventBridge 规则。对于 Event Pattern(事件模式),选择 Build custom event pattern(生成自定义事件模式)。请务必根据您的使用案例修改示例事件模式。请注意,虽然示例通知是针对 CreateSecurityGroup 的,下面的示例事件模式包含了所有安全组相关的 API 调用操作:

{
  "source": [
    "aws.ec2"
  ],
  "detail-type": [
    "AWS API Call via CloudTrail"
  ],
  "detail": {
    "eventSource": [
      "ec2.amazonaws.com"
    ],
    "eventName": [
      "CreateSecurityGroup",
      "AuthorizeSecurityGroupEgress",
      "AuthorizeSecurityGroupIngress",
      "DeleteSecurityGroup",
      "RevokeSecurityGroupEgress",
      "RevokeSecurityGroupIngress",
      "DescribeStaleSecurityGroups",
      "DescribeSecurityGroups",
      "DescribeSecurityGroupReferences"
    ]
  }
}

2.    对于规则的 Target(目标),选择 Configure input(配置输入)下的 Input Transformer(输入转换器)。

3.    在第一个输入框中,配置您的 Input Path(输入路径)。其中应包含将您的通知中使用的任何键值对。请务必根据您的使用案例修改以下示例输入路径:

{"sgname":"$.detail.requestParameters.groupName","sourceip":"$.detail.sourceIPAddress","vpcid":"$.detail.requestParameters.vpcId","action":"$.detail.eventName","sgid":"$.detail.responseElements.groupId","time":"$.detail.eventTime","region":"$.detail.awsRegion","user":"$.detail.userIdentity.userName","reqid":"$.detail.requestID"}

注意:EventBridge 目前支持在输入路径图中最多使用 100 个变量。要提取 10 个以上的变量,请将整个事件传送到一个 Lambda 函数。您可以编写此函数来解析所有必需的变量,并以发布所需的格式构建消息正文。然后,按照发布到 Amazon SNS 所需的格式构建消息正文。

4.    在第二个输入框中,配置 Input Template(输入模板)。其中应包含一个用占位符来代表您的输入路径值的字符串。此字符串是您的通知的人类可读文本。请务必根据您的使用案例修改以下示例输入模板:

"User <user>  has executed API call <action> from source IP <sourceip> on security group <sgid>/<sgname> that belongs to vpc <vpcid> in region <region> at time(UTC) <time>. The Request ID is <reqid>."

注意:如果您在保存含有换行符的模板时收到 Invalid InputTemplate(输入模板无效)的错误消息,请确保每行都以上双引号结尾。例如:

"<type> <arn> has executed action API <action> on Security Group <sgid> located in AWS region <region> at <time> (UTC)."
"Event Details:"
"Request ID: <requestid>"
"Event ID: <eventid>"
"Event Source: <eventsource>"
"Event Type: <eventtype>"

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

6.    指定规则的名称和描述。

7.    选择 Create rule(创建规则)。


这篇文章对您有帮助吗?


您是否需要账单或技术支持?