ECRリポジトリレベルでイメージスキャンを有効化する

ECRリポジトリレベルでイメージスキャンを有効化する

ECRリポジトリレベルでイメージスキャンを有効化する

ECRリポジトリが提供する機能の1つに、イメージスキャンがあります。

Amazon ECR イメージスキャニングは、コンテナイメージ内のソフトウェアの脆弱性を特定するのに役立ちます。

イメージスキャン

今回はECRリポジトリレベルでイメージスキャンを有効化します。

なお本手順は、現在は非推奨となっております。
推奨された方法でプッシュ時にスキャンを有効化する方法については、以下をご確認ください。

あわせて読みたい
ECRレジストリレベルでイメージスキャンを有効化する 【ECRレジストリレベルでイメージスキャンを有効化する】 ECRリポジトリが提供する機能の1つに、イメージスキャンがあります。 Amazon ECR イメージスキャニングは、コ...

構築する環境

Diagram of enable image scanning at ECR repository level.

ECRを作成します。
リポジトリレベルで、イメージのプッシュ時にスキャンを有効化します。

CloudFormationテンプレートファイル

上記の構成をCloudFormationで構築します。
以下のURLにCloudFormationテンプレートを配置しています。

https://github.com/awstut-an-r/awstut-fa/tree/main/082

テンプレートファイルのポイント解説

本ページでは、リポジトリレベルでプッシュ時にスキャンを有効化する方法を中心に取り上げます。

CloudFormationカスタムリソースを使用して、CloudFormationスタック削除時に、自動的にECRリポジトリ内のイメージを削除する方法については、以下のページをご確認ください。

あわせて読みたい
CFNカスタムリソースでECRイメージを削除する 【CloudFormationカスタムリソースでECRイメージを削除する】 CloudFormationを使ってECRを作成し、そこにイメージをプッシュすると、CloudFormationスタック時にエラー...

ECR

Resources:
  ECRRepository:
    Type: AWS::ECR::Repository
    Properties:
      ImageScanningConfiguration:
        ScanOnPush: true
      RepositoryName: !Ref Prefix
Code language: YAML (yaml)

ImageScanningConfigurationプロパティでイメージスキャンに関する設定を行います。
ScanOnPushプロパティに「true」を設定することで、本機能を有効化できます。

(参考) Dockerfile

FROM amazonlinux
Code language: Dockerfile (dockerfile)

Amazon Linux 2をベースにして、自作のイメージを作成します。

環境構築

CloudFormationを使用して、本環境を構築し、実際の挙動を確認します。

CloudFormationスタックを作成し、スタック内のリソースを確認する

CloudFormationスタックを作成します。
スタックの作成および各スタックの確認方法については、以下のページをご確認ください。

あわせて読みたい
CloudFormationのネストされたスタックで環境を構築する 【CloudFormationのネストされたスタックで環境を構築する方法】 CloudFormationにおけるネストされたスタックを検証します。 CloudFormationでは、スタックをネストす...

各スタックのリソースを確認した結果、今回作成された主要リソースの情報は以下の通りです。

  • ECRリポジトリ:fa-082

作成されたリソースをAWS Management Consoleから確認します。
ECRリポジトリを確認します。

Detail of ECR 1.

Scan frequencyの項目を見ると、「Scan on push」とあります。
本機能が有効化されていることがわかります。

本リポジトリのイメージスキャン機能の詳細を確認します。

Detail of ECR 2.

こちらでもプッシュ時にスキャンが有効化されていることがわかります。
一方でワーニングを見ると、リポジトリ単位では、本機能を有効化することは非推奨であることがわかります。

動作確認

準備が整いましたので、本リポジトリにイメージをプッシュします。
プッシュは以下のコマンドを実行します。

Detail of ECR 3.

イメージのプッシュ後、改めてリポジトリを確認します。

Detail of ECR 4.

Scan statusの項目が「Complete」とあります。
イメージプッシュ時に自動的にスキャンが実行されたことがわかります。

Vulnerabilitiesの項目の「detail」を確認します。

Detail of ECR 5.

検出された脆弱性が深刻度とともに表示されました。

このようにECRリポジトリレベルでプッシュ時のスキャンを有効化することによって、自動的にイメージをスキャンできることを確認しました。

まとめ

ECRリポジトリレベルで、プッシュ時のスキャンを有効化する方法と、その効果を確認しました。