入力トランスフォーマーを使用して、人間が読める形式で API コールの EventBridge 通知を設定する方法を教えてください。
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] を選択します。
関連情報

関連するコンテンツ
- 承認された回答質問済み 3ヶ月前lg...
- 質問済み 4年前lg...
- AWS公式更新しました 2ヶ月前
- AWS公式更新しました 1年前
- AWS公式更新しました 1年前