Amazon Inspectorを利用したコンテナ脆弱性スキャン

# はじめに

MEGAZONE 株式会社 のテック陣「MEGAZONEのゆかいな仲間たち」がおくる、Megazone Japan Advent Calendar 2023 の4日目のエントリーです。

AWS上でコンテナイメージを扱う場面はそれなりにありますが、コンテナセキュリティまで意識できているかというと「うーん・・・」という方は多いのではと勝手に思っています。

Amazon Inspectorを利用した継続的なコンテナイメージスキャンを御紹介します。

# 目次

1. Amazon Inspectorについて
2. コンテナスキャンの有効化
3. 動作テスト

# 1. Amazon Inspectorについて

https://aws.amazon.com/jp/inspector/ 

- Amazon Inspector は、ソフトウェアの脆弱性や、意図しないネットワークエクスポージャーについて、継続的に AWS ワークロードをスキャンする脆弱性管理サービスです。

- 利用を開始すると、Amazon Elastic Compute Cloud (Amazon EC2) インスタンス、Amazon Elastic Container Registry (Amazon ECR) 内のコンテナイメージ、AWS Lambda 関数を自動的かつ大規模に検出し、直ちに評価を開始して既知の脆弱性がないかを確認します。

- Amazon Inspector は、共通脆弱性識別子 (CVE) 情報を、ネットワークアクセスや悪用される可能性などの要素と相関させることにより、各検出結果について高度にコンテキスト化されたリスクスコアを計算します。このスコアは、極めて重大な脆弱性に優先順位を付け、是正対応の効率を向上させるために使用されます。

#### ちなみに・・

### ベーシックスキャン
https://docs.aws.amazon.com/ja_jp/AmazonECR/latest/userguide/image-scanning.html

- Amazon ECRには、ベーシックスキャンが備わっています。
- Amazon ECR は、オープンソースの Clair プロジェクトの共通脆弱性識別子 (CVE) データベースを使用します。
- ベーシックスキャンでは、プッシュ時にスキャンするようにリポジトリを設定します。手動スキャンを実行すると Amazon ECR によってスキャン結果のリストが提供されます。

### 拡張スキャン

https://docs.aws.amazon.com/inspector/latest/user/scanning-ecr.html

- Amazon Inspector は、Amazon ECRに保存されているコンテナイメージをスキャンしてソフトウェアの脆弱性を探し、パッケージの脆弱性の調査結果を生成します。
- Amazon Inspectorが提供する拡張スキャンにより、レジストリレベルでオペレーティングシステムとプログラミング言語パッケージの両方の脆弱性スキャンの利点が得られます。
- 「新しいコンテナイメージがプッシュされるたび」もしくは「Amazon Inspector が新しい共通脆弱性および暴露 (CVE) 項目をデータベースに追加し、その CVE がそのコンテナイメージに関連する場合」脆弱性スキャンを開始します。

脆弱性の情報は日々アップデートされ、セキュリティの専門家でもない限り、情報を追い続けることは難しい。
その点でAWSマネージドのセキュリティサービスと連携させながら、継続的なイメージスキャンを行える拡張スキャン(Inspectorとの連携)は非常に魅力的な選択肢だと思います。

# 2. コンテナスキャンの有効化

### Inspectorを有効化

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2697264/a637e8c9-5172-7c56-b06f-947d06830d6a.png)

Inspectorを有効化します。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2697264/f5039dd7-fdef-2d75-53bd-cdfb6cc68b81.png)

InspectorのSummary画面が表示できていることを確認します。

### ECRコンソール上の操作

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2697264/01868eb9-1467-df6c-1aff-c60ba2aa2201.png)

- ECRコンソール画面で「Private registry」⇒「Scanning」を選択。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2697264/7ad24052-341d-71bf-e141-1f9e00abbe66.png)

- スキャン設定画面で「Enhanced scanning」「Continuously scan all repositories(すべてのリポジトリを継続的にスキャンする)」にチェックを入れる。すべてのリポジトリに対して、Amazon Inspectorの完全なスキャン範囲が有効になります。


![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2697264/5fb2088d-d3d4-0415-1e3a-0e7f62c7cd64.png)

拡張設定が有効になりました。

### Inspectorコンソール上の設定確認

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2697264/84555b84-9747-04ab-1f34-4db65573cc04.png)

- Inspectorコンソール⇒Settings⇒ECR scanning settingsで、スキャン期間を選択します。
- 「Lifetime」を選択した場合は、イメージが削除されるまで自動再スキャンを続けます。

ここまでで初期設定は完了です。

# 3. 動作テスト

# ECRリポジトリにイメージをPUSH

```
$ docker pull nginx:1.19.7
```

- 任意の名前でECRリポジトリを作成。
- テストとして上記のイメージをECRリポジトリにPUSHしました。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2697264/6da4ef7a-c649-2209-4a26-9aca73cdecc0.png)


- イメージPUSH後に、InspectorコンソールでFindingsが更新されていることを確認できます。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2697264/65ffdf09-c289-8d3c-7bd6-ac8465be2fd4.png)

大漁・・


# さいごに

以上のように複雑な設定は必要なく、スキャン設定をすることが可能です。
是非お試しください。