11
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

【CFnテンプレ付】Inspector通知をSlackで「見やすく」!EventBridge InputTransformerの活用術

Last updated at Posted at 2025-09-24

はじめに

GMOコネクトの永田です。

AWS Inspector v2によるECR Scan結果のSlack通知を「いい感じ」にしたいと相談があり、対応しましたので、その内容をまとめます。

まとめ

  • EventBridgeのInputTransformerを利用すると「いい感じ」にメッセージを加工できる
  • InputTransformer自体は、AWS Management Consoleから操作すると、分かりやすく設定できる
  • AWS Management Consoleで設定したInputTransformerは、CFnにexportできるので便利!

発生していた事象

以下の記事でも紹介されている通り、Inspectorからの通知結果はSlackまで来るには来るのですが、情報量が非常に少ないです。

ECRの場合は、以下の情報だけです。

  • Inspector2 Finding という固定文字列
  • Related resourcesに、検知対象のECR repo imageのhash(arn:aws:ecr:{Region}:{AWSAccount}:repository/{repo}/sha256:{digest} のような形式)

これだと毎回AWSにログインして内容を確認しないといけなく、とても手間です。
(ちなみにSNSTopicのEMailの場合は、もっと色々と情報がのってくる)

ということで改善方法を検討します。

SecurityHub経由でもいいのですが、ついでにSlackに投稿するメッセージをカスタマイズしたかったので、別の方法を探ります。(Lambdaでがんばるという最終案は除く😇)

色々と調べた結果、EventBridgeのInputTransformerが使えそうだということで、調べてみます。

EventBridgeの入力トランスフォーマー(InputTransformer)とは

EventBridgeからSNSTopicなどに通知する前に、通知するイベントを「いい感じ」に加工する設定を入れることができるものになります。

なので、「いい感じ」に必要な情報を含めつつ、前回の記事にも出てきたCustom通知の形式にしてあげると、最終的にSlackに「いい感じ」に通知されそうです。

「いい感じ」に必要な情報の収集設定

ということで、加工元になるイベントのJSONフォーマットを確認しましょう。

といっても、入力トランスフォーマーの設定画面で、一通りのサンプルを見ることができます。とても親切ですね!

スクリーンショット 2025-09-23 20.31.54.png

このJSONを参考に、必要な情報をJSON Pathの形式で列挙していきます。

といってもGPTあたりに聞くと、JSON Pathは作ってくれるので、それを並べる感じです。
いつも通りな雑なpromptだとこんな感じです。

以下のAWS Inspector2 Finding JSONから必要な情報を抜きだすInputTransformerのJSON設定を作成

##### 必要な情報

- CVE ID
- CVE description
- CVSS Score

##### InputTransformerのJSON設定

{
  "vulnerabilityId": <JSONPath>,
  "cveDescription": <JSONPath>,
  "cvssScore": <JSONPath>
}

##### 取得元AWS Inspector2 Finding JSONサンプル

{{Sample JSON貼り付け}}

上記の3つだとInputPathはこんな感じですね。

{
  "vulnerabilityId": "$.detail.packageVulnerabilityDetails.vulnerabilityId",
  "cveDescription": "$.detail.description",
  "cvssScore": "$.detail.inspectorScore"
}

cveDescription などのkeyはこの後のテンプレートに使います。値は先ほどのJSON Pathです。

InputTemplateの設定

AWS ChatbotのCustom通知のフォーマットになるように設定をいれていきます。
<> でInputPathで設定したkeyをいれるだけで、比較的簡単に記載できます。
(見やすさのために改行とインデントいれていますが、実際の設定には不要です)

{
  "version": "1.0",
  "source": "custom",
  "content": {
    "description": "*CVE ID:* <vulnerabilityId>\n*Description:* <cveDescription>\n*Score:* <cvssScore>"
  }
}

一通り設定したら、「出力を生成」で先ほどのサンプルイベントJSONでの変換結果が確認できます。
今回はこんな感じになって、期待通りに変換できてそうですね!

{
  "version": "1.0",
  "source": "custom",
  "content": {
    "description": "*CVE ID:* CVE-2018-25020\n*Description:* Multiple integer overflows in libwebp allows attackers to have unspecified impact via unknown vectors.\n*Score:* 7.8"
  }
}

作成したCloudFormation

色々設定が必要なInputTransformerですが、なんとCloudFormation形式で設定がexportできます!(他のサービスにも欲しいですね😇)

スクリーンショット 2025-09-23 20.49.01.png

ということで、出来上がったCloudFormationは以下になります。

  InspectorCustomNotify:
    Type: AWS::Events::Rule
    Properties:
      Name: InspectorCustomNotify
      EventPattern: '{"source":["aws.inspector2"],"detail-type":["Inspector Finding"]}'
      State: ENABLED
      Description: ''
      EventBusName: default
      Targets:
        - Id: Id133bc168-7cee-4d3b-b7b8-c03b70ae0657
          Arn: !Ref SNSTopicArn
          InputTransformer:
            InputPathsMap:
              cveDescription: $.detail.description
              cvssScore: $.detail.inspectorScore
              vulnerabilityId: $.detail.packageVulnerabilityDetails.vulnerabilityId
            InputTemplate: >-
              {"version":"1.0","source":"custom","content":{"description":"*CVE
              ID:* <vulnerabilityId>\n*Description:* <cveDescription>\n*Score:*
              <cvssScore>"}}

これで、次回以降、スムーズに構築できますね!

(再掲)まとめ

  • EventBridgeのInputTransformerを利用すると「いい感じ」にメッセージを加工できる
  • InputTransformer自体は、AWS Management Consoleから操作すると、分かりやすく設定できる
  • AWS Management Consoleで設定したInputTransformerは、CFnにexportできるので便利!

弊社では、AWSを使ったサービスの開発や技術支援をはじめ、幅広い支援を行っておりますので、何かありましたらお気軽にお問合せください。

お問合せ: https://gmo-connect.jp/contactus/

11
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
11
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?