Amazon ECR イメージスキャンの結果をDatadog Eventへ通知する
はじめに
Amazon ECR イメージスキャンの結果はマネジメントコンソールから確認できる他、Amazon EventBridgeにイベントとして送信されます。今回はベーシックスキャンの結果をDatadog にEventとして送信してみました。
やること
やることは以下です。1は過去の記事で説明しているのでここでは省略します。
- Datadog Event APIをAPIの送信先として作成する (以前の記事を参照)
- ECR Scanの結果をDatadogにEventとして送信するルールを作成する
ルールを作成する
ルールを作成します。作成手順の詳細でポイントになるのはイベントパターンと入力トランスフォーマーなのでここではピンポイントで紹介します。
ECRから送信されるイベント
ECRから送信されるイベントのサンプルは下記の通りです。EventBrideの編集画面で表示されるサンプルはFindingsがない場合のイベントだったのでドキュメントのサンプルの方がテストはしやすいと思います。
(下記JSONはAmazon ECR のサンプルイベント より)
{ "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-repository-name" ], "detail": { "scan-status": "COMPLETE", "repository-name": "my-repository-name", "finding-severity-counts": { "CRITICAL": 10, "MEDIUM": 9 }, "image-digest": "sha256:7f5b2640fe6fb4f46592dfd3410c4a79dac4f89e4782432e0378abcd1234", "image-tags": [] } }
イベントパターン
イベントパターンは下記の通りです。この例では脆弱性の深刻度の数でフィルタリングするのを想定しています。リポジトリ名やタグでもフィルタリングできると思います。
{ "source": ["aws.ecr"], "detail-type": ["ECR Image Scan"], "detail": { "finding-severity-counts": { "CRITICAL": [{ "numeric": [">", 0] }] } } }
入力トランスフォーマー
Datadog のAPIへ送信するJSONを生成するトランスフォーマーです。
入力パス
{ "critical_count": "$.detail.finding-severity-counts.CRITICAL", "digest": "$.detail.image-digest", "repo": "$.detail.repository-name" }
入力テンプレート
Post Event API の仕様に従って必要なフィールドを設定します。
{ "text": "ECR scan found <critical_count> CRITICAL findings in <repo>/<digest>", "title": "[ECR scan] CRITICAL findings in <repo>", "alert_type": "warning" }
送信結果(イベント)
送信したイベントをDatadogのコンソールで確認できました。
まとめ
気づいたら去年の今頃も同じような記事を書いていました。1年中同じことをやっているわけではないので少し不思議な気持ちです…