JavaScriptを有効にしてください

Chatbotが200を超えるEventBridgeイベントに対応したけど…

 ·  ☕ 4 分で読めます

Chatbotで通知できる対象が大幅に増えたけど、試したらコレジャナイ感。

はじめに

アップデートの内容については、DevelopersIOの記事を読むと良いと思います。

ざっくり言うと、Chatbotは一部のサービスの通知しかできなかったけど、EventBridgeと連携できるようになった事で通知できるサービスが大幅に増えました!という事です。
今までSlackに通知するだけのLambdaを書く事がそれなりにありましたが、今後はかなり少なくなるでしょう。

と思っていました…

要点

  • とりあえず通知できるようになっただけ。通知される情報は不十分かも。
    • サービス次第では、イベントの情報が全くと言っていいほど分からない。
  • 通知内容は各サービス1つ1つ試してみないと分からない。

使えたら良いなくらいに思って、あまり期待しない方がいいと思います。

Amazon EventBridgeについて

そもそもEventBridgeはサードパーティのイベントが処理できるらしい、という事くらいしか知らなかったので調べました。
CloudWatch Eventsはそれなりに使っていましたが。

ですが、ほとんど考える必要は無かったです。
EventBridgeではイベントバスというものでイベントが大きく分類され、その下にルールがぶら下がるのですが、AWSサービスのイベントはdefaultイベントバスに入ってきます。

AWSサービスのイベントを処理する分には、イベントルールの上にdefaultイベントバスがある以外はCloudWatch Eventsと変わりません。
加えて言うと、CloudWatchのコンソールで作ったルールは、EventBridgeコンソールでも表示されます。逆もまたしかり

CloudWatch Eventsがこれ
CloudWatchEventsコンソール

EventBridgeがこっち
EventBridgeコンソール

今回の用途では、全く同じものと考えて良さそうです。

検証内容

ECRイメージスキャンの結果をLambdaでSlack通知していたので、変更できないか検証しました。

設定

下記のイベントパターンをChatBot用のSNSに飛ばすように設定します。

1
2
3
4
5
6
7
{
  "detail-type": ["ECR Image Scan"],
  "detail": {
    "scan-status": ["COMPLETE"]
  },
  "source": ["aws.ecr"]
}

イベントの詳細については、こちらのドキュメントの「完了したイメージスキャンのイベント」に記載がありますが、以下の様な形式です。

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
{
    "version": "0",
    "id": "85fc3613-e913-7fc4-a80c-a3753e4aa9ae",
    "detail-type": "ECR Image Scan",
    "source": "aws.ecr",
    "account": "123456789012",
    "time": "2019-10-29T02:36:48Z",
    "region": "us-east-1",
    "resources": [
        "arn:aws:ecr:us-east-1:123456789012:repository/my-repo"
    ],
    "detail": {
        "scan-status": "COMPLETE",
        "repository-name": "my-repo",
        "finding-severity-counts": {
	       "CRITICAL": 10,
	       "MEDIUM": 9
	     },
        "image-digest": "sha256:7f5b2640fe6fb4f46592dfd3410c4a79dac4f89e4782432e0378abcd1234",
        "image-tags": []
    }
}

手順は前述の、DevelopersIOの記事の内容と同じなので割愛します。

通知結果

以下のようにSlackに通知されました。
ECRスキャン通知

なんか、情報少ないのですが?これで全量ですよ。
元のイベントはスキャンの結果、finding-severity-countsのところに脆弱性の重大度毎の件数が出力されます。
ここ重要なとこなのですが、↑では、要するに「このリポジトリでスキャンがされました!キリッ」って報告してるわけです。
えっ結果はよ…?

        "finding-severity-counts": {
	       "CRITICAL": 10,
	       "MEDIUM": 9
	     },

なお、全く同じイベントをSNSでメール通知すると当然全部通知されます。Chatbotが情報を削っているという事です。

どうして…

この時点で、だいぶ悲しい雰囲気が漂ってるのですが…もしかしたら設定で変更できたりしないかなと思ってAWSサポートに問い合わせた結果分かった事。

  • finding-severity-countsの内容が通知されないのは仕様。
  • 通知される情報はサービス毎に異なる。※
  • サービス毎に通知される情報はドキュメント等には記載なし。

※最初、detail以下の情報は通知されない仕様なのかなと思っていたのですが、前述のDevelopersIOの記事では、detailの情報が通知されていますね1

「イベント内容ぽいっちょ捨てるのねん。情報多いと分かり辛いのねん♪」というAWSさんの粋な計らいなのでしょうが
「やめろ、それは必要な情報じゃないか!!」と。
判断できないものはとりあえず全通知の方がマシだったんじゃないですかね…

終わりに

今回の件に限らないですが、新しいサービスやアップデートは引いて見るくらいが良いですね。
おぉ!っと盛り上がってしまってショックも大きかったです。反省


  1. ドキュメントを見ると、TaskやClusterなどはdetailの情報です。 ↩︎

共有