AWS re:Postを使用することにより、以下に同意したことになります 利用規約

入力トランスフォーマーを使用して、人間が読める形式で API コールの EventBridge 通知を設定する方法を教えてください。

所要時間2分
0

Amazon Elastic Compute Cloud (Amazon EC2) のセキュリティグループ API コールで、人が判読できる 通知を Amazon EventBridge で受け取ることを考えています。入力トランスフォーマーを使って通知をカスタマイズする方法を教えてください。

簡単な説明

AWS CloudTrail によってキャプチャされたセキュリティグループ関連の API コールと一致する EventBridge ルールを作成できます。このルールは、関連する 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 ルールを作成します。[イベントパターン] で、[カスタムイベントパターンの作成] を選択します。ユースケースのサンプルイベントのパターンを忘れず変更してください。通知の例は 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.    ルールの [ターゲット] で、[設定入力] の下にある [入力トランスフォーマー] を選択します。

3.    最初の入力ボックスで、[入力パス] を設定します。通知で使用するキーと値のペアを含めます。ご自身のユースケースに合わせて、次の入力パスのサンプルを変更してください。

{"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.    2 番目の入力ボックスで、[入力テンプレート] を設定します。入力パスからの値のプレースホルダーがある文字列を含めます。この文字列は、人が判読できる通知テキストです。ご自身のユースケースに合わせて、次の入力テンプレートのサンプルを変更してください。

"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] を選択します。


関連情報

イベントに反応する Amazon EventBridge ルールの作成

AWS公式
AWS公式更新しました 2年前
コメントはありません