Amazon Inspector v2 を利用した Amazon ECR コンテナイメージの脆弱性管理

# はじめに

このエントリでは、Amazon Inspector v2（以下、Inspector とします） の機能の中で、拡張スキャンを利用して Amazon  ECR コンテナイメージの脆弱性をチェックする方法をお伝えします。拡張スキャンが実施されるタイミングや、スキャンの実施期間（新機能の ECR re-scan duration）にも少しだけ触れています。Amazon EventBridge および AWS Security Hub との統合などは触れておりませんので、予めご了承ください。EC2インスタンスの脆弱性管理につきましてはこちらのブログ記事「[Amazon Inspector v2 を利用した脆弱性管理 - 自動ディスカバリ・継続的スキャンなど便利な新機能多数 -](https://sid-fm.com/blog/archive/entry/20211207.html)」をご参照いただければ幸いです。

# 使用方法
### Inspector の有効化
まず Inspector の画面を表示します。 サービスの検索ウィンドウに [Insp] と入力すると次のように表示されるので [Inspector] を選択します。
![insp_001.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2987974/d7492502-a7c5-879e-0380-01735c68fad4.png)
画面右側の [使用を開始する] をクリックします。
![insp_002.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2987974/79d228c1-e368-f5f0-eb78-6a92b63a1b12.png)
画面右側の [Inspector をアクティブ化] をクリックします。
![insp_003.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2987974/2828c682-1ebe-f0ef-331b-0814859a0da4.png)

これで Amazon Inspector の有効化が完了し、EC2 インスタンスや ECR イメージの自動ディスカバリや脆弱性スキャンなどが利用可能となります。

### スキャン設定
Elastic Container Registry の画面を表示します。 サービスの検索ウィンドウに [Elastic Container] と入力すると次のように表示されるので [Elastic Container Registry] を選択します。
![insp_004.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2987974/9e37a95e-f928-dad7-2275-0fac0f7dceca.png)
左メニューの [Scanning] をクリックします。
![insp_005.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2987974/8a839eb0-bf06-0d86-0c18-1aab013c189e.png)
スキャン設定画面が表示されます。スキャンタイプは [拡張スキャン] を選択します。[すべてのリポジトリを継続的にスキャンする] にチェックを入れます。[保存] ボタンをクリックします。（特定のリポジトリをスキャン対象から除外することもできますが、ここではすべてのリポジトリをスキャンの対象とします。）
![insp_006.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2987974/12319a52-9b79-17ee-cc9a-47cb214d4e82.png)
拡張スキャンには追加料金がかかるため、確認のためのダイアログが表示されます。[確認] ボタンをクリックします。
![inspector_ecr_002.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2987974/3e206dc0-7d52-3399-2f9e-dc6809ca50d4.png)
スキャン設定を完了後の画面です。スキャン設定が [拡張版] に、連続フィルターが [*]  なっており、拡張スキャンですべてのリポジトリをスキャンするよう設定されていることが確認できます。
![insp_007.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2987974/413a1574-4d90-ac0b-e237-e7b34846fe34.png)

### プライベートリポジトリの作成
左メニューの [Repositories] を選択し、[リポジトリを作成] ボタンをクリックします。
![insp_008.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2987974/fb6aea19-7c8c-68b7-8b4c-c39738fe290b.png)
今回はプライベートリポジトリを作成するので [プライベート] を選択します。リポジトリ名に適当な名前を入力します。
![insp_009.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2987974/d465a23a-88ce-5f7c-cca7-62feae1846fd.png)
イメージスキャンの設定と暗号化設定はデフォルトの [無効] のままにします。[リポジトリを作成] ボタンをクリックします。
![insp_010.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2987974/f0d10034-d85b-b476-50d3-b9f64d6f7d03.png)
リポジトリが作成されました。
![insp_011.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2987974/94ec1c0d-ce0d-4415-5459-a9cf6dec3b1c.png)

### Dockerの認証
手元のDockerイメージをECRのリポジトリへプッシュするには、まずDockerの認証が必要となります。ここではECRプライベートレジストリへDockerを認証させるためにCLIを使用することにします。手元の環境で次のコマンドを実行してください。

```console:AWS CLI
$ aws ecr get-login-password --region <myregion> | docker login --username AWS --password-stdin <my_account_id>.dkr.ecr.<myregion>.amazonaws.com
```

```console:AWS Tools for Windows PowerShell：
$ (Get-ECRLoginCommand).Password | docker login --username AWS --password-stdin <my_account_id>.dkr.ecr.<myregion>.amazonaws.com
```

（※ myregion や my_account_id は適宜変更してください。）

### Dockerイメージのプッシュ
まずECRリポジトリへプッシュするために必要なタグを付与します。

```console:
$ docker tag <image_id> <my_account_id>.dkr.ecr.<muregion>.amazonaws.com/<repository_name>:<ubuntu-20.04>
```

次にリポジトリにDockerイメージをプッシュします。
```console:
$ docker push <my_account_id>.dkr.ecr.<myregion>.amazonaws.com/<repository_name>:<ubuntu-20.04>
```

（※ <...>部分は適宜変更してください。）

リポジトリの状況を確認するため、リポジトリ名のリンクをクリックしてください。
![insp_012.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2987974/129078aa-3fb8-bf91-c17e-37e23bee69ff.png)

リポジトリにイメージがプッシュされていることが確認できました。
![insp_013.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2987974/e7fde1e4-a45d-05a6-c55a-350ea689c9b6.png)

### スキャン結果の確認
リポジトリが拡張スキャンの対象となっている場合、プッシュされたイメージはすぐスキャンされます。[調査結果を表示] をクリックすることで、スキャンの結果を表示できます。
![insp_014.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2987974/d7abcd72-6c5d-3f01-ec90-ea8338984034.png)
検出された脆弱性の概要と詳細が表示されます。
![insp_015.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2987974/959d862a-80ac-36b9-7aab-60e67d810f83.png)
CVE番号をクリックすることで、脆弱性のより詳細な内容が表示されます。
![insp_016.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2987974/47db1acc-8d59-c30f-e814-d6d70417e030.png)

Amazon Inspector の画面では、コンテナイメージごとのサマリやリポジトリごとのサマリを表示することができます。
![insp_017.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2987974/ae251741-2739-4dcd-057d-aaed91a953a7.png)
![insp_018.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2987974/25564f90-7497-38c1-10e2-0acb86e1812e.png)


### 拡張スキャンの実施タイミング
イメージのプッシュ時と、Inspectorの脆弱性データベースに新たなCVE番号が追加された際に実行されます。

### 拡張スキャンの実施期間
以前は30日までとなっていましたが、[30日/180日/ライフタイム] の中から選択できるようになりました。デフォルトは [ライフタイム] です。 この設定を変更するには Inspector の [設定] -> [全般] を開き、ECR re-scan duration 設定を変更してください。
![insp_019.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2987974/4575c13c-df6b-25e7-c8e6-7d48dd6d2e5b.png)

# まとめ
Amazon Inspector v2 を利用して Amazon ECR コンテナイメージの脆弱性をスキャンする方法をご紹介しました。コンテナイメージのプッシュ時だけでなく、脆弱性データベースに新たなCVE番号が追加されるごとに再スキャンが実行されるため、常に最新の状況を把握できます。ぜひ活用をご検討ください。

# 参照
- [Amazon ECR コンテナイメージをAmazon Inspector でスキャンする](https://docs.aws.amazon.com/ja_jp/inspector/latest/user/scanning-ecr.html)