ECRのイメージスキャンはどちらのタイプを選ぶべきなのか

記事タイトルとURLをコピーする

こんにちは。島村です。
自宅で猫を飼っているんですが、猫好きが加速して猫の絵がプリントされた
グッズや服が増えていることに気づいてしまいました。

衝動買いしないように気をつけたいと思います。

さて、今日はECRのイメージスキャンについて書いていきます。

時間がない人はまとめだけ読んでください

さて、ECRはイメージスキャンの機能があり、イメージの脆弱性を検出することが可能です。
イメージスキャンタイプには基本スキャン、拡張スキャンの2種類がありますが、
どちらかの片方を有効にすることができます。

イメージスキャンタイプをどちらを選べばいいのか、迷われる方も多いのではないでしょうか。
結論から書いてしまうと、どちらを選ぶかは要件次第、という一般的な回答になります。
個人的にはコスト的に問題なければ拡張スキャンをお勧めしたいです。

それでは、イメージスキャンタイプの違いを見ていきましょう

基本スキャン

基本スキャンから見ていきます。

基本スキャン - 検出方法

基本スキャンはClairと呼ばれるオープンソースの脆弱性データベースを使用しています。
https://github.com/quay/clair/blob/main/README.md

脆弱性スキャンした結果、検出された脆弱性の重要度は2つのパターンで判定されます。

1.アップストリームディストリビューションのCVE番号
2.CVSS(共通脆弱性評価システム)スコア
※基本スキャンはCVSS v2 のスコアのみを取得できます。

基本スキャン - 検出範囲

OSパッケージのみになります。
プログラミング言語(python,Ruby,Javaなど)のパッケージ(ライブラリなど)に関する
脆弱性は基本スキャンで検出することができません。

基本スキャン - 検出タイミング

基本スキャンはプッシュ時に全てのリポジトリをスキャンすることができます。
また、任意のタイミングで手動スキャンも実施することができます。
定期的に自動でスキャンをすることはできないですね。

基本スキャン - 検出結果の確認方法

ECRコンソールから確認するか、AWS CLIで取得する必要があります。
AWS CLIは以下のコマンドから取得できます。

aws ecr describe-image-scan-findings --repository-name リポジトリ名 --image-id imageDigest=[イメージダイジェスト] 

CVE番号とCVE番号の脆弱性情報のリンク、重要度だけを取得するコマンドは以下です。

aws ecr describe-image-scan-findings --repository-name リポジトリ名 --image-id imageDigest=[イメージダイジェスト]  --query "imageScanFindings.findings[].[name,uri,severity]" 

検出結果に関しては、SecurityHubなどのセキュリティサービスと統合はできません。

基本スキャン - 検出内容

脆弱性の情報だけが確認できます。
実際の検出画面はこちらです。

内容の説明とCVE番号のリンクだけが表示されていますね。

CVE番号のリンクを押すと、ディストリビューションのページへ遷移します。

基本スキャン - 料金

無料です。
基本スキャン機能を利用する場合の費用はかかりません。

拡張スキャン

次に拡張スキャンを見ていきます。

拡張スキャン - 検出方法

Amazon Inspectorで検出します。
実際にはSnykから脆弱性対応情報などを得ているようです
Snykについては詳細に解説しませんので、興味があれば公式サイトを確認しましょう

go.snyk.io

拡張スキャン - 検出範囲

拡張スキャンでは、OSパッケージだけでなくプログラミング言語パッケージも含めて
検出が可能になります。

アプリケーションレイヤーの脆弱性を確認したい場合には必須ですね。

拡張スキャン - 検出タイミング

拡張スキャンでは継続的なスキャンと、プッシュ時にスキャンが行われます。
継続的なスキャンでは、Inspectorの脆弱性データベースにCVEが追加されたタイミングでスキャンが実施されます
Inspectorコンソールにて継続スキャンが行われる日数を選択することが可能です
選択できる日数は30日、180日、イメージが削除するまでの3つです。
推奨はイメージが削除されるまでで、デフォルトもこの値です。
特別な理由がない限りは変更しなくて良いでしょう。

拡張スキャン - 検出結果の確認方法

続いて検出結果の確認方法です。
拡張スキャンはECRコンソール、AWS CLI/SDK、Inspectorコンソール、SecurityHubコンソールで確認が可能です。

GUIでの見え方は以下の通りです。

ECRコンソール

Inspectorコンソール

SecurityHubコンソール


Inspectorコンソールではかなり細かく情報を得られることができ、対策アクションについても記載があるため
すぐに検討をすることができますね。

AWS CLIでCVE番号とCVE番号の脆弱性情報のリンク、重要度だけを取得するコマンドは以下となります。
基本スキャンとJSONの構造が異なるため、クエリの値を変えています。

aws ecr describe-image-scan-findings --repository-name python --image-id imageDigest=sha256:d0228a84a4ed50a620d1dc5d38aae226db6608d6bd2c9816592823cd73bf4ad9 --query "imageScanFindings.findings[].[name,uri,severity]" 

拡張スキャン - 検出内容

拡張スキャンでは脆弱性情報に加えて、以下の情報が取得できます。

  • 1.修正されたライブラリなどのバージョン情報
  • 2.対策アクション情報
  • 3.CVSSv2/CVSSv3スコア情報

上記の情報は、Inspectorコンソールからのみ情報を取得することができます。
CVSSは脆弱性の重要度をベンダーに依存せずにスコアリングするオープンな評価方法です。
v2とv3では評価項目数が異なりますが、どちらのバージョンでも脆弱性スコアリングが行われ確認することができます。

拡張スキャン - 料金

拡張スキャンの料金を公式ページで確認すると、東京リージョンの料金は以下の通り設定されています。

課金対象 料金
1 か月あたりの Amazon ECR へのプッシュ時に最初にスキャンされたコンテナイメージの数 イメージごとに 0.11USD
1 か月あたりの連続スキャン用に設定された Amazon ECR のコンテナイメージの自動再スキャンの数 再スキャンごとに 0.01USD


継続スキャンを設定せずにプッシュ時のスキャンのみで考えてみましょう。
1ヶ月の間に30個のイメージスキャンを行ったとします。
この場合は0.11USD×30となりますので、料金は3.3USDですね。


次に継続スキャンが有効になっている場合です。
1ヶ月の間に30個のイメージスキャンを行ったとします。
この場合は0.11USD×30となりますので、料金は3.3USDですね。

その月に30イメージに対して、10回の継続スキャンが行われました。
この場合は0.01USD×30×10なので、3USDになります。

まとめ

つらつら書いてきましたが、それぞれスキャンタイプごとに機能を表にまとめました。
料金的にはそこまで高くないと感じたので、拡張スキャンが他のサービスとも 統合ができ、取得できる情報も有益と感じました。

コスト/セキュリティ要件のトレードオフになるかと思いますが、コンテナイメージのセキュリティ対策として 拡張スキャンを活用してみてはいかがでしょうか。

参考

www.ipa.go.jp

aws.amazon.com

docs.aws.amazon.com

aws.amazon.com

島村 輝 (Shimamura Hikaru) 記事一覧はコチラ

最近ECS周りをキャッチアップ中。趣味は車・バイク全般。
一応、AWS12冠です。