こんにちは。
カスタマーサクセス部の山本です。🐱
2025年5月19日 のアップデートで、Inspector で検出した脆弱性を持つコンテナイメージが、ECS タスク / EKS ポッドで使用中か分かるようになりました。
ECR のコンテナイメージを Inspector でスキャンしている場合に、脆弱性があるコンテナが実際にECS タスク / EKS ポッドで使用されているか分かるということのようです。
自分の検証環境を使って、試してみました。
- 準備1:ECR のプライベートレジストリで拡張スキャンを有効化
- 準備2: Inspector の有効化
- Inspector の画面で push 時のスキャン結果の確認
- ECS サービス上に nginx コンテナを含むタスクを起動。
- 「影響を受けるリソース」に載ることを確認 (2025/6/4 待ち ▶ 6/5 載りました。)
- 検出結果の中から、ECS タスク/ EKS ポッドで使っているものを抽出
- スキャン実施期間の設定にもアップデートが
- 参考リンク
- 余談
準備1:ECR のプライベートレジストリで拡張スキャンを有効化
ECR のプライベートレジストリで「拡張スキャン」を有効化します。
拡張スキャンを有効化すると、Amazon Inspector と統合されます。
「基本スキャン」との違いは以下のブログ記事も参照ください。
ECRのイメージスキャンはどちらのタイプを選ぶべきなのか - サーバーワークスエンジニアブログ
リポジトリの作成とイメージの push
適当なリポジトリを作成し、nginx のシンプルなイメージを push しました。 push コマンドはコンソールから参照できます。
用意した Dockerfile は以下です。
FROM nginx:latest
準備2: Inspector の有効化
Amazon Inspector は EC2 や ECR 、Lambda の脆弱性を検出するサービスです。
有効化すると、EC2 の インスタンスとAMI、ECR のイメージ、Lambda 関数をスキャンします。
「Inspector をアクティブ化」を押します。
Inspector の画面で push 時のスキャン結果の確認
Inspector のサービス画面を見てみましょう。
ECR リポジトリに push した nginx のコンテナイメージにある脆弱性を検出しています。
いままで通り、脆弱性情報にある「影響を受けるリソース」に、対象の ECR リポジトリ名 (コンテナ名) やイメージタグの情報があります。
その下に、Deployed Pods/Tasks
が新しく追加になっています。このイメージで起動中の ECS タスク / EKS ポッドがある場合はここに表示されるようです。
ECS サービス上に nginx コンテナを含むタスクを起動。
詳細は割愛しますが、ECS サービス上に先ほど ECR に push した nginx コンテナのイメージを含むタスクを起動しました。
「影響を受けるリソース」に載ることを確認 (2025/6/4 待ち ▶ 6/5 載りました。)
1 時間くらい待ってみたり、色々な種類のイメージを push したり、色々なタスクを起動したのですが、出ません。気長に待ってみます。
公式ブログによると、1 日 1 回は少なくとも更新するとのこと。
Amazon Inspector は、すべてのアカウントの Amazon ECR 最終プル日のデータと、Amazon ECS タスクまたは Amazon EKS ポッドコンテナで実行されているイメージのデータの両方を監視し、この情報を少なくとも 1 日 1 回更新します。
公式ブログから抜粋
公式ブログによると、Deployed Pods/Tasks
の部分にはタスクとポッド数の合計が出るみたいです。
使用した時間、pull 時間も出るようです。
数をクリックすると、対象のクラスターとタスク/ポッドを表示してくれるようです。
ECR イメージを他の AWS アカウントの ECS/EKS クラスターで使用中の場合も合計に数えてくれるようです。
2025/6/5 載りました
Deployed Pods/Tasks
が 19 になっています。
Last in use
は、ECS サービスにコンテナを起動した日時になっています。
19 という数字をクリックすると、Running Count (稼働中) と Stopped Count (停止済み) があるようです。
Stopped Count があるケース
Running Count があるケース
Workload name
をクリックすると、対象の ECS タスク定義の画面に遷移します。
検出結果の中から、ECS タスク/ EKS ポッドで使っているものを抽出
検出結果に対するフィルターも追加になっています。
起動しているタスク/ポッドの合計が 1 から 100 のものを検索。
100 以上などと設定できるので、影響が大きい脆弱性を探すときに便利ですね。
結果:
スキャン実施期間の設定にもアップデートが
Inspector のスキャン実施期間の設定画面に、Last in-use date
が追加になっています。
この設定は、使用していないイメージのスキャンをし続けて料金が発生しないように、イメージをスキャンする期間を先に決めておくものです。
頻繁に新しいイメージをビルドする場合は短く、同じイメージを使い続ける場合は長めに設定すると良いでしょう。
いつも 14 日以内に新しいイメージを ECR に格納するような場合、14 日に設定しておくと良いでしょう。
今までは 「最後にイメージを pull した日から XX 日間、イメージスキャンを継続する」という設定 Last pull date
しかなかったです。この設定は「最後にイメージを pull した日から XX 日間」の中であれば、脆弱性データベースに新しい脆弱性が登録されたときに再スキャンをする、という感じです。
今回のアップデートでは、「最後にイメージを 使用した日 から XX 日間、イメージスキャンを継続する」という設定 Last in-use date
を選択できるようになりました。
「ECS タスクや EKS ポッドが実際にイメージを使用したとき」に限定できるようになったということですね。
イメージの pull は運用操作などでも発生しうるので、いままでは意図せずスキャン回数が増えてしまったりということがあったようです。
スキャン継続期間を実際の使用期間に合わせることができると、スキャン回数の節約になりそうです。
参考リンク
公式ブログ: Amazon ECR イメージを実行中のコンテナにマッピングすることでコンテナのセキュリティを強化する Amazon Inspector | Amazon Web Services ブログ
リリースニュース: Amazon Inspector enhances container security by mapping ECR images to running containers - AWS
公式ドキュメント(スキャン実施期間の設定):
Configuring the Amazon ECR re-scan duration - Amazon Inspector
公式ドキュメント(スキャンの設定):
Scanning Amazon Elastic Container Registry container images with Amazon Inspector - Amazon Inspector
公式ドキュメントはまだ日本語版は更新されていませんでした。(執筆時点)
余談
Tokyo Grand Trail という 100 マイルのトレイルランニング大会のサポートをしてきました。
大雨のなか 3 日間サポートして、ほぼ一睡もしなかっただけで辛いのに、3 日間も走り続けている選手はすごいなと思いました。