ECRリポジトリレベルでイメージスキャンを有効化する
ECRリポジトリが提供する機能の1つに、イメージスキャンがあります。
Amazon ECR イメージスキャニングは、コンテナイメージ内のソフトウェアの脆弱性を特定するのに役立ちます。
イメージスキャン
今回はECRリポジトリレベルでイメージスキャンを有効化します。
なお本手順は、現在は非推奨となっております。
推奨された方法でプッシュ時にスキャンを有効化する方法については、以下をご確認ください。
構築する環境
ECRを作成します。
リポジトリレベルで、イメージのプッシュ時にスキャンを有効化します。
CloudFormationテンプレートファイル
上記の構成をCloudFormationで構築します。
以下のURLにCloudFormationテンプレートを配置しています。
https://github.com/awstut-an-r/awstut-fa/tree/main/082
テンプレートファイルのポイント解説
本ページでは、リポジトリレベルでプッシュ時にスキャンを有効化する方法を中心に取り上げます。
CloudFormationカスタムリソースを使用して、CloudFormationスタック削除時に、自動的にECRリポジトリ内のイメージを削除する方法については、以下のページをご確認ください。
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スタックを作成します。
スタックの作成および各スタックの確認方法については、以下のページをご確認ください。
各スタックのリソースを確認した結果、今回作成された主要リソースの情報は以下の通りです。
- ECRリポジトリ:fa-082
作成されたリソースをAWS Management Consoleから確認します。
ECRリポジトリを確認します。
Scan frequencyの項目を見ると、「Scan on push」とあります。
本機能が有効化されていることがわかります。
本リポジトリのイメージスキャン機能の詳細を確認します。
こちらでもプッシュ時にスキャンが有効化されていることがわかります。
一方でワーニングを見ると、リポジトリ単位では、本機能を有効化することは非推奨であることがわかります。
動作確認
準備が整いましたので、本リポジトリにイメージをプッシュします。
プッシュは以下のコマンドを実行します。
イメージのプッシュ後、改めてリポジトリを確認します。
Scan statusの項目が「Complete」とあります。
イメージプッシュ時に自動的にスキャンが実行されたことがわかります。
Vulnerabilitiesの項目の「detail」を確認します。
検出された脆弱性が深刻度とともに表示されました。
このようにECRリポジトリレベルでプッシュ時のスキャンを有効化することによって、自動的にイメージをスキャンできることを確認しました。
まとめ
ECRリポジトリレベルで、プッシュ時のスキャンを有効化する方法と、その効果を確認しました。