Amazon ECRでスキャンフィルタで対象外にしているにも関わらずプッシュ時スキャンがかかる場合はリポジトリ単位の設定を確認しよう
初めに
Amazon ECRではリポジトリ内のイメージに含まれるパッケージに対する脆弱性スキャンが提供されています。
スキャンは2種類あり、Amazon ECR標準の基本スキャン(OSパッケージかつPush時のみスキャン)と、Inspectorと統合された拡張スキャン(プログラミング言語パッケージも含む、Push時スキャンに加えて新しい脆弱性発見時にもスキャン)の2つがあります。
拡張スキャンはスキャン対象に応じて追加料金がかかりますがスキャンの幅が広くなることに加えてInspector側経由で脆弱性の管理や通知の抑制などを統合管理できるメリットがあります。
今回このスキャンに関して一部環境ではPush頻度が高く、料金もさることながら同じ通知が何度も出てオオカミ少年状態になってしまうためその抑制を検討していました。
個別のCVEに対して抑制をかけるのも選択肢ですが、都度の対応は手間なのと同じCVEを強制的に抑制をかけるにしても仕組みを自前で持たないといけないため、今回はスキャンフィルタを使うことでまとまったタイミングでリリースされる環境のみを対象とする方針としました。
設定自体はレジストリ単位で設定可能で、マネジメントコンソールでは左メニューの「機能と設定」の部分から確認できます(執筆時点でのUIの仕様)。

また、具体的な設定としてはスキャン対象を選択するホワイトリスト式で複数指定可能かつワイルドカードの利用ができます。
事前に対象プレビューで具体的にマッチできるリポジトリを確認できるのでありがたいですね。

スキャンフィルタで対象外にしても続く通知
さて上記の設定をしたのですが、数日経ってもInspector上での検知が継続されるという形となっておりました。
前述の通りプレビューで対象は確認しており(設定後も確認可能)問題となっているリポジトリは対象から外れています。
対象から外れてるのでECR上の画面では他に確認する手段が...と思っていたのですが、Inspector側でリソースカバレッジの機能が確認できるようです。
Inspectorで拡張スキャンを有効にしている(Inspectorと統合されている)今回はこちらからも確認可能となります。
(設定上はECRから実施するものでしたので完全に盲点でした)

今回の設定を確認してみたところ、一部のリポジトリは確かにスキャン対象外(手動スキャンのみ)になっているにも関わらず問題のリポジトリはスキャン設定が残っていました。

ただ対象とはなっているものの、拡張スキャンは有効なままで個別に継続スキャンを切っていない状態でも、該当リポジトリのステータスが「アクティブ化済み (継続的)」ではなく「アクティブ化済み(オンプッシュ)」でプッシュ時スキャンの対象のみになっていました。
古い設定(リポジトリ単位でのスキャン設定)が残っていた
一部のリポジトリのみプッシュ時スキャンが有効となっていたためリポジトリ単位での差分を確認していたところ、対象のリポジトリではリポジトリ単位でのスキャン設定が有効化のまま残っていました。
設定自体は各リポジトリの概要の「編集」から確認できます。
結論としてはこの設定を無効化することで今回の問題は解消しました。


現時点では全リポジトリでスキャンがかかるのになぜ個別の設定が?というところですが、それは現在の仕様であり以前はプッシュ時のスキャンは任意で有効にする必要がありました。
これが2021年末ごろにInspectorの統合と合わせて全リポジトリでプッシュ時スキャンがデフォルトになった形となります。
現在のユーザガイドには影も形もないのですが、Internet Archiveの2021年の夏頃まで追ってみるとその痕跡を見れます。

ユーザーガイド系のドキュメントには記載が見当たらないので推定するしかないのですが、レジストリ単位でのスキャンフィルタリングはリポジトリ単位のスキャンと入れ替わる形でリリースされたので、リポジトリ単位側には対応していないのではないかなと思います(リポジトリ単位での設定は後方互換?)。
また、リポジトリ単位での設定は古い設定にも関わらずInspectorに脆弱性が通知される形となっているのですが、これは2025年ごろに古いスキャン方式(Clair)が廃止されAWS_NATIVEに一本化しているため、ここはレジストリ単位でのスキャンの設定の影響を受けてるのではないかな?と推定しています。
終わりに
Amazon ECRのスキャンでレジストリ単位の設定でスキャンを外しているにも関わらずスキャンが継続してしまうケースの一つを整理しました。
古い設定の名残でドキュメントには記載はないものの、IaCやCLIに限らずマネジメントコンソールからも設定可能(非推奨の記載有)とはなっているのでなんらかで設定してしまうのはあるかと思いますし、当然昔からの設定がそのままになっているケースもあります。
注意書きはあるものの一度設定してしまえば深めの階層にあり見つけにくい上に、個別にスキャン対象から除外する以外のケースでは特に害はない関係でなかなか気づかずハマる時もあるかと思いますので、あれ?と思った時にこの記事をふと思い出してもらえればと思います。







