LoginSignup
5
1

More than 1 year has passed since last update.

新しいECRスキャンで脆弱性結果が見れなくなった話

Last updated at Posted at 2021-12-24

はじめに

今年のre:Invent2021でECRの新しいスキャン設定が可能になりました。
これまではECR単体としてスキャンの機能がありましたが、このアップデートでAmazon Inspectorに統合されて、EC2のスキャン結果とまとめて確認ができるようになりました。

今回は拡張スキャンを使っていて、脆弱性結果が急に見れなくなったので、その手順と理由を調査した結果を書いていきます。

この記事でわかること

  • ECRスキャンが有効化されている状態でInspectorの無効化有効化を行うと過去の脆弱性結果が見れなくなる
  • Inspectorを有効化している状態で、リポジトリ単位で再度Pushすると過去の脆弱性結果が復活する
  • 長期間Inspectorを無効化した状態でどの程度過去の脆弱性結果が残るかは不明

事前準備

ECRリポジトリは事前に作成しておきます。
今回は拡張スキャンを利用するので、ECR自体のイメージスキャンは無効化したままにします。
image.png

ECRのスキャン設定から、拡張スキャンを有効化して、継続スキャンとPush時スキャンが実行されるように設定しておきます。
image.png

もしこの時点でAmazon Inspectorが有効化されていなければ、手動でEnableにしておきます。
image.png

Dashboard等が見れるようになっていればOKです。
image.png

手順

イメージのBuild&Push

Pushする用のイメージとして、以下のDockerfileを作成します。

$ cat Dockerfile
FROM ubuntu:16.04

あとはECRにPushするだけなので、Dockerfileがあるディレクトリで以下のコマンドを実行します。

$ aws ecr get-login-password --region ap-northeast-1 | docker login --username AWS --password-stdin XXXXXXXXXXXX.dkr.ecr.ap-northeast-1.amazonaws.com
$ docker build -t test-repository .
$ docker tag test-repository:latest XXXXXXXXXXXX.dkr.ecr.ap-northeast-1.amazonaws.com/test-repository:latest
$ docker push XXXXXXXXXXXX.dkr.ecr.ap-northeast-1.amazonaws.com/test-repository:latest

image.png

問題なくECR上にイメージがPushされました。
image.png

脆弱性スキャン結果確認

今回の設定ではPush時にスキャンが走るようになっているため、脆弱性項目に調査結果を表示というリンクが作成されていることがわかります。
image.png

そのリンクをクリックしてみると、脆弱性が21個出ていることが見てわかります。
image.png

InspectorのDashboardからも脆弱性を確認できます。
image.png

By container imageタブではイメージタグごとにどの程度脆弱性が出ているのかが一覧でわかるようになっています。
image.png

ここまではECR拡張スキャンの通常の動作確認になります。

問題の手順

ここからは今回発生した脆弱性結果が消えた際の手順になります。

Inspector無効化

まずInspectorのDashboardからInspectorの無効化を行います。
image.png

無効化した後に先ほど確認した脆弱性結果をもう一度ECRから確認してみます。
image.png

すると脆弱性結果は見れなくなっており、APIエラーが発生していました。
Inspectorに統合されているので、無効化すると結果が見れなくなっているというのは正しい動作な気がしますが、APIエラーが発生しているのは謎です。
image.png

Inspector有効化

今度は無効化したInspectorを再度有効化してみます。
image.png

そうすると先ほどまであった脆弱性結果がなくなっており、何もスキャンが実行されていない状態に戻っていました。
image.png

また、ECRリポジトリからみると一見脆弱性結果が残っているように見えますが、
image.png

リンクをクリックすると先ほどと同じAPIエラーが発生し、スキャン結果が見れなくなっていました。
image.png

どうやら、一度Inspectorを無効化してしまうと過去の脆弱性結果は全て消えてしまい、再度有効化したとしても見れなくなってしまうようです。

対応手順

では、どうすれば過去の脆弱性結果を見れるようになるかというと、Inspectorが有効化された状態で同じイメージに対して再度スキャンが実行されれば見れるようになります。

イメージ再Push

先ほど有効化したInspectorをそのままに再度イメージのPushを行うと、
image.png

問題なく脆弱性スキャンが実施され、新しくPushされたイメージタグの脆弱性結果が確認できました。
image.png

そのあとに先ほど見れなかった過去の脆弱性結果を確認すると、APIエラーは発生せずに最初に確認した結果が見れるようになってました。
image.png
image.png

Inspectorから見ても2つのイメージタグの脆弱性結果が一覧に表示されているので、過去分が復活していることがわかります。
image.png

追加検証

別リポジトリへのイメージPush

試しに先ほどと同じAPIエラーが発生する状況を作った上で、
image.png

別のリポジトリにイメージPushした場合でも過去の脆弱性結果が見れるか確認してみます。
image.png

まずは別リポジトリのイメージの脆弱性結果を見てみると、APIエラーが出ていますが同時に結果も見えるという不思議な状態になっていました。
image.png

最初のリポジトリの脆弱性結果は変わらずAPIエラーが出たままとなっていました。
image.png

その状態でInspectorから脆弱性結果を見ると何も表示されていませんでした。
恐らくですが、Inspectorと統合されているECRスキャンを使っている環境で1つ以上APIエラーが発生していた場合、Inspectorのdashboradからの確認もできなくなるようです。
image.png

上記のような場合は、APIエラーが発生していると思われるECRリポジトリで新しくイメージのPushをしてあげるとAPIエラーが消えて参照できるようになったので、リポジトリ単位での対応が必要なようです。
image.png
image.png

おわりに

この挙動がバグなのか正常動作なのかはまだ判断が付いていないですが、ECRスキャンが動いている状態でInspectorを無効化すると想定していない挙動になりそうなので、あまりやらないほうが賢明だと思いました。(まぁそんな状況そうそうないとは思いますが)

5
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
5
1