入力トランスフォーマーを使用して、Amazon SNS 通知を人間が判読できるように EventBridge ルールを作成する方法を教えてください。

所要時間3分
0

Amazon EventBridge ルールを作成して、人間が判別できるカスタムの Amazon Simple Notification Service (Amazon SNS) 通知を開始したいです。

簡単な説明

Amazon SNS イベント通知を人間が判読できるようにするには、EventBridge で入力トランスフォーマーを使用します。入力トランスフォーマーを使用すると、イベントのテキストが EventBridge ルールのターゲットに送信される前にカスタマイズできます。詳細については、「チュートリアル: 入力トランスフォーマーを使用して EventBridge のイベントを変換する」を参照してください。

入力トランスフォーマーからカスタムイベントテキストを受信するためのターゲットとして、SNS トピックを設定することができます。AWS CloudTrail がキャプチャするセキュリティグループ関連の API コールと一致する EventBridge ルールを作成することもできます。このルールは、関連する API 呼び出しと一致するイベントパターンを使用して設定されます。

以下の解決策には、独自の EventBridge ルールを作成し、Amazon SNS 通知を人間が判読できるようにするために使用できる 2 つのサンプルイベントが含まれています。

解決策

Amazon EC2 状態変更に関するイベントの例

次の例では、入力トランスフォーマーからカスタムイベントのテキストを受信するターゲットとして SNS トピックを設定します。このイベントは、EventBridge イベントバスに JSON 形式で発行される Amazon Elastic Compute Cloud (Amazon EC2) の状態変更です。

{
  "version": "0",
  "id": "2ad63080-2526-d42c-4983-123456789",
  "detail-type": "EC2 Instance State-change Notification",
  "source": "aws.ec2",
  "account": "0123456789",
  "time": "2023-05-17T16:30:32Z",
  "region": "us-east-1",
  "resources": [
    "arn:aws:ec2:us-east-1:0123456789:instance/i-12345abcdefg"
  ],
  "detail": {
    "instance-id": "i-12345abcdefg",
    "state": "running"
  }
}

入力トランスフォーマーには次のセクションがあります。

  • 入力パス: JSON パスを使用して元のイベントソースの値を参照する変数を定義する場所。
  • テンプレート: ターゲットに渡す情報のテンプレート。

入力パス

入力パスを作成するには、「入力変換の例」を参照してください。この例では、次の入力パスを使用します。

{
  "timestamp": "$.time",
  "instance": "$.detail.instance-id",
  "state": "$.detail.state"
}

テンプレート

この例では、次のテンプレートを使用します。

例 1:

"Instance <instance> is in <state> state"

例 2:

"At <timestamp>, Instance <instance> changed its state to <state>. "

上記のテンプレート例では、次の形式でターゲットにメッセージを送信します。

例 1:

"Instance i-12345abcdefg is in running state"

例 2:

"At 2023-05-17T16:30:32Z, Instance i-12345abcdefg changed its state to running. "

入力トランスフォーマーを使用するように EventBridge を設定する

SNS トピックにカスタムメッセージを送信するように EventBridge を設定するには、次の手順を実行します。

注: これらの手順は、「Amazon EventBridge のイベントに反応するルールを作成する」に記載された入力トランスフォーマーの設定手順に従っています。

  1. Amazon EC2 状態変更イベント用の EventBridge ルールを定義します。

  2. イベントパターンをビルドします。作成方法セクション[メソッド] で、[カスタムパターン (JSON エディタ)] を選択します。

  3. [イベントパターン] で、Amazon EC2 状態変更イベント用に次の JSON の例を入力します。

    {
      "source": [
        "aws.ec2"
      ],
      "detail-type": [
        "EC2 Instance State-change Notification"
      ]
    }
  4. [次へ] を選択します。

  5. [ターゲットタイプ][AWS サービス] を選択します。

  6. [ターゲットを選択][SNS トピック] を選択します。次に、ドロップダウンリストからトピックを選択します。

  7. [その他の設定][ターゲット入力を設定] ドロップダウンリストで、[入力トランスフォーマー] を選択します。次に、[入力トランスフォーマーを設定] を選択します。

  8. [ターゲット入力トランスフォーマー] セクションの [入力パス] に、次の JSON をコピーして貼り付けます。

    {
      "timestamp": "$.time",
      "instance": "$.detail.instance-id",
      "state": "$.detail.state"
    }
  9. [入力テンプレート] に、次の文字列テンプレートをコピーして貼り付けます。

    "Instance <instance> is in <state> state"  "At <timestamp>, Instance <instance> changed its state to <state>. "
  10. [確認]、**[次へ]**の順に選択します。

  11. (オプション) ルールにタグを追加し、**[次へ] **を選択します。

  12. ルールの詳細を確認し、**[ルールを作成]**を選択します。

Amazon EC2 セキュリティグループ API コールのイベント例

次のイベント例では、仮想プライベートクラウド (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"
  }
}

人間が判読できるカスタム通知を作成する方法の例

次の例を使用して、人間が判別できる形式のカスタム通知を EventBridge から JSON 形式で作成します。

  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. [ターゲットタイプ][AWS サービス] を選択します。

  3. [ターゲットを選択][SNS トピック] を選択します。次に、ドロップダウンリストからトピックを選択します。

  4. [その他の設定][ターゲット入力を設定] ドロップダウンリストで、[入力トランスフォーマー] を選択します。次に、[入力トランスフォーマーを設定] を選択します。

  5. [ターゲット入力トランスフォーマー] セクションの [入力パス] に、次の JSON を貼り付けます。通知に使用するキーと値のペアをすべて含めてください。次の例では、ユースケースに合わせて入力パスを変更してください。

    {
      "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"
    }
  6. [入力テンプレート] に、次の文字列テンプレートを貼り付けます。入力パスの値のプレースホルダーを含む文字列を含めてください。この文字列は、人間が判読できる形式の通知テキストです。ユースケースに合わせて次のサンプルの入力テンプレートを変更してください。

    "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>."
  7. [確認]、**[次へ]**の順に選択します。

  8. (オプション) ルールにタグを追加し、**[次へ] **を選択します。

  9. ルールの詳細を確認し、**[ルールを作成]**を選択します。

トラブルシューティング

改行を含むテンプレートを保存したときに Invalid InputTemplate エラーが表示される場合は、各行を二重引用符で閉じます。次の例を参照してください。

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

ルールが実行されてもターゲットを呼び出せない場合は、EventBridge のデッドレターキューを設定して、入力トランスフォーマーに関連するエラーを受信するようにします。

EventBridge は、入力パスマップで最大 100 の変数をサポートしています。10 個を超える変数を抽出するには、イベント全体を AWS Lambda 関数に渡します。この関数を記述して変数を解析し、発行に必要な形式でメッセージ本文を作成します。その後、Amazon SNS に発行するために必要な形式でメッセージ本文を作成します。詳細については、「Lambda 関数を使用して Amazon SNS トピックにメッセージを発行する方法を教えてください。」を参照してください。

AWS公式
AWS公式更新しました 4ヶ月前
コメントはありません

関連するコンテンツ