【AWS】Amazon ECR ~ 脆弱性診断 / Amazon Inspector ~

■ はじめに

Amazon ECR は、簡単に 脆弱性診断サービス Amazon Inspector が
使えるので、そのことについて、メモっておく

目次

【1】Amazon Inspector
 1)AWS ECR との連携
【2】脆弱性診断の On/Off
 1)Terraform の場合
【3】スキャン開始タイミング
 1)AWS CLI による開始について
【4】スキャン結果の確認方法
 1)エラーになった場合の対処法
【5】使用上の注意
 1)結果が出るまで時間が掛かる
 2)スキャン回数制限について
 3)全結果を見てからエラー対応した方がいい
【6】補足:別の脆弱性診断ツール
 1)Qualys(クオリス)
 2)Trivy
 3)Dockle

【1】Amazon Inspector

* 脆弱性診断を行うAWSサービス

1)AWS ECR との連携

* AWS ECR と統合されており、コンテナイメージを
 既知のソフトウェアの脆弱性やネットワークへの意図しない公開がないかスキャンし
 自動的に検出してくれる

https://docs.aws.amazon.com/ja_jp/AmazonECR/latest/userguide/image-scanning.html

【2】脆弱性診断の On/Off

* めちゃめちゃ簡単にできる

AWS Management Console

[1] 対象のECRリポジトリを選択
[2] [Edit]ボタン押下
[3] 「Image scan settings」欄の「Scan on push」を
 ON(Disabled⇒Enabled)にする
[4] [Save]ボタン押下

1)Terraform の場合

https://dk521123.hatenablog.com/entry/2023/05/23/002314

resource "aws_ecr_repository" "demo_ecr_repository" {
  name = "demo-ecr-repository"
  # The tag mutability setting for the repository. 
  # MUTABLE or IMMUTABLE
  image_tag_mutability = "MUTABLE"

  image_scanning_configuration {
    scan_on_push = true # ★ここで Scan を ON にする
  }
}

【3】スキャン開始タイミング

* Onにした場合、ECR Push後に脆弱性診断が実施される

1)AWS CLI による開始について

* start-image-scan が用意されている
 => ただし、制限がありそう
 (下記「【5】使用上の注意」の「2)スキャン回数制限について」参照)

Amazon ECR ~ AWS CLI
https://dk521123.hatenablog.com/entry/2024/01/05/000000

【4】スキャン結果の確認方法

AWS Management Console

[1] 対象のECRリポジトリを選択
[2] 「Vulnerabilities」欄の「See findings」リンク押下
 => 終わっていれば、結果がでているはず
 => エラーがなければ、「No scan findings <改行> Scan status: COMPLETE」が表示
 => 下記「【5】使用上の注意」の「1)結果が出るまで時間が掛かる」参照

1)エラーになった場合の対処法

[1] 脆弱性結果の一覧で、脆弱性のリンク(e.g. 「CVE-2023-7104」)を押下
 => Inspector のページに飛ばされる
[2] 以下の項目を確認するといいかも、、、
Items Explanation Example
Affected Package (影響しているパッケージ) どこで発生しているかを記載 /opt/lib/xxx.jar
Remediation (修復) 対応案を記載 apt-get update && apt-get upgrade
なお、以下でも同様なことが確認できる
[3] 「Title」欄のリンク(e.g. 「CVE-2023-7104-libsqlite3-0」)を押下
[4] 「Finding ID」のリンク(e.g. 「arn;aws:inspector2:<AWSRegion>:...」)を押下
[5] JSONの結果の中で「remediation」を確認
 => 今回の場合、「"remediation": "apt-get update && apt-get upgrade"」
 => 他にも、「"remediation": "Update xxx to X.X.X"」(xxx: ライブラリ名)などがある

【例】対応前:Dockerfile

FROM flink:1.18.0

【例】対応後:Dockerfile

FROM flink:1.18.0

RUN apt update -y && apt upgrade -y

補足:「Remediation」について

* 「"remediation": "Update xxx to X.X.X"」(xxx: ライブラリ名)と
 記載されている場合、「Affected Package」を見て、
 どのライブラリかを確認した方がいい
 => 例えば、「/opt/lib/xxx.jar」に記載されていて、
  そのライブラリが自分で独自に入れている場合は、
  そのライブラリの更新だけで済むかも。
 => OSに同梱されているライブラリなら、
  apt update/upgradeだけで済むかも

【5】使用上の注意

1)結果が出るまで時間が掛かる

* 「Vulnerabilities」欄の「See findings」リンク押下後に
 スキャン中の場合、「Scan status: PENDING」など表示されるので
 待つ必要がある(パッ見、終わった感じがするので)

2)スキャン回数制限について

* 24時間で1回だけしかスキャン開始されないという制限がある

https://docs.aws.amazon.com/cli/latest/reference/ecr/start-image-scan.html#description

より抜粋

Starts an image vulnerability scan.
[訳] イメージの脆弱性スキャンを開始する

An image scan can only be started once per 24 hours on an individual image.
[訳]イメージスキャンは、独立したイメージで、24時間に1回のみだけである

This limit includes if an image was scanned on initial push.
[訳] この制限は、もし初期Pushでスキャンされたイメージも含んでいます。

3)全結果を見てからエラー対応した方がいい

* 例えば、
 エラー High で「"remediation": "Update xxx to 0.17.0"」とあり
 エラー Medium で「"remediation": "Update xxx to 0.13.0"」(xxx: ライブラリ名)
 という場合があった。
 => このケースだと、High から見ていくので良かったが、
  逆もあり得る(Highの方が低いバージョン)かと思う(?)ので
  エラーは一通り見た後に、どのバージョンまであげるかを
  考えておいた方がいいかなっと思った。

【6】補足:別の脆弱性診断ツール

1)Qualys(クオリス)

* 類似な脆弱性診断サービスとして、Qualys(クオリス)を紹介。

Qualys とは?

* 各種ITシステムの脆弱性を発見・管理するためのクラウドサービス

ドキュメント

* 以下に日本語のドキュメントがある

https://www.qualys.com/documentation/jp/

2)Trivy

* コンテナイメージやGit Repository等の脆弱性をスキャンできるツール

https://www.designet.co.jp/ossinfo/kubernetes/trivy/
https://engineering.nifty.co.jp/blog/14208
https://qiita.com/keomo/items/ff2c76696fe182141389

3)Dockle

* Dockerイメージのベストプラクティス準拠しているか
 チェックしてくれるツール

https://qiita.com/tomoyamachi/items/bb6ac5788bb734c91282
https://dev.classmethod.jp/articles/devio2023-dockle/

関連記事

Amazon ECR ~ 入門編 ~
https://dk521123.hatenablog.com/entry/2020/05/22/165711
Amazon ECR ~ 基本編 ~
https://dk521123.hatenablog.com/entry/2020/05/26/142645
Amazon ECR ~ AWS CLI
https://dk521123.hatenablog.com/entry/2024/01/05/000000
Amazon ECR ~ boto3 ~
https://dk521123.hatenablog.com/entry/2024/01/31/014010
Amazon ECR ~ Dockerイメージを Pull & Push ~
https://dk521123.hatenablog.com/entry/2023/12/02/024631
Terraform ~ AWS ECR ~
https://dk521123.hatenablog.com/entry/2023/05/23/002314
Amazon ECR でのトラブルシューティング
https://dk521123.hatenablog.com/entry/2020/05/24/000000
脆弱性エラー対応時に役立ったDockerコマンド
https://dk521123.hatenablog.com/entry/2024/02/03/020736