ECRでコンテナ脆弱性診断が標準実装されていたので試してみた

※2019/10/29(火)追記：
公式で発表されてました！合わせて、issuesもClosedになっていました。
[Native Container Image Scanning in Amazon ECR](https://aws.amazon.com/jp/blogs/containers/amazon-ecr-native-container-image-scanning/)
[公式ドキュメント](https://docs.aws.amazon.com/ja_jp/AmazonECR/latest/userguide/image-scanning.html)

※2019/10/27(日)追記：
再び利用可能になっていました。
下記のissuesに経緯等が記載されています。
[ECR Image vulnerability scanning #17](https://github.com/aws/containers-roadmap/issues/17)

※2019/10/25(金)追記：
~~本機能は使用出来なくなっているようです。~~

# ECRでスキャン？
今日の業務中にふとECR画面見たら、「スキャン」の表示を見つける。
コンテナの脆弱性診断が実装されてる？
ん？こんなのあったっけ。見落としていただけかな。ということで触ってみた。

# リポジトリ作成
<img width="1084" alt="1.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/254711/046adab8-4815-998c-34fb-4b19c91ad1ec.png">
「プッシュ時にスキャン」画面メニューがある。とりあえず、リポジトリ作成してみる。

<img width="808" alt="2.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/254711/7517d21f-b722-ebcd-2df0-02dd477cb38a.png">
なるほど、`docker push`でコンテナ登録する時にスキャンが走るようだ。有効にしてみる。

<img width="1083" alt="3.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/254711/cc5200ae-fa4e-6cad-c0fa-d3c4045712e0.png">
有効になった。

# コンテナをECRに登録
試しにcentosのコンテナをpushして、スキャンをしてみる。

```sh
# centos:latestのコンテナをローカルに落とす。
docker pull centos:latest

# ECR用のタグを設定
docker tag centos:latest [AWSアカウントID].dkr.ecr.ap-northeast-1.amazonaws.com/centos:1.0

# ECRログイン
$(aws ecr get-login --no-include-email --region ap-northeast-1)

# ECRのcentosリポジトリにpushする。
docker push [AWSアカウントID].dkr.ecr.ap-northeast-1.amazonaws.com/centos:1.0
```

# スキャン完了。そして脆弱性確認へ・・・
<img width="1087" alt="4.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/254711/b8755a00-cfd4-9bd6-bd5c-c5c3bed63e2c.png">

スキャンは完了！脆弱性があるようなので、詳細を見てみる。

<img width="1105" alt="5.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/254711/cadecbb8-2fd3-7ad6-7998-0b7034f7640c.png">
概要で脆弱性の件数とパッケージ毎の脆弱性説明が表示される。
例では重要度が`Critical`はないが、`High`と`Medium`がそれぞれ指摘された。
名前がリンクになっているのでクリックすると・・・

<img width="1438" alt="6.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/254711/ab05748d-d49a-06b0-7242-047ee712909d.png">
指摘毎に対処ページが表示される。便利。

# 脆弱性の対応をしてみる。
パッケージのバージョンアップをすることで、脆弱性指摘が減るか確認してみる。

```docker
FROM centos:latest
LABEL maintainer "portfield"

RUN yum -y update && yum clean all
```
OSアップデートする`Dockerfile`を書く。シンプル。
`centos`ディレクトリにファイルを配置。

```sh
# ECR用でバージョン上げてDockerイメージ作成
docker build -t [AWSアカウントID].dkr.ecr.ap-northeast-1.amazonaws.com/centos:1.1 centos

# ECRのcentosリポジトリにpushする。
docker push [AWSアカウントID].dkr.ecr.ap-northeast-1.amazonaws.com/centos:1.1
```

# 再びスキャン完了。脆弱性確認へ・・・
<img width="1086" alt="7.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/254711/10a48bab-d33c-fe8b-a41e-990fa34534fe.png">
上がOSアップデート前、下がOSアップデート後のDockerイメージ。
脆弱性件数が減っていることから、OSアップデートにより、脆弱性が減ったことが分かる。
詳細も見てみよう。

<img width="1083" alt="8.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/254711/2a99e129-d2fa-a27b-95b4-e08b562009d5.png">
OSアップデートだけでは対処出来なかった脆弱性が表示される。
名前のリンクと説明を頼りに対応しよう。今回は対応しない。。

# スキャンを有効にしていなくてもOK。
<img width="1084" alt="9.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/254711/20d55dde-76fd-2d71-8d1e-14541384a1d7.png">
手動実行出来るので、大丈夫。

<img width="1122" alt="10.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/254711/5380d77d-dc3f-924a-aad8-efcfb34f12b2.png">
このように進行中となり、最終的に完了する。

# まとめ
・以上のように、リポジトリの設定を有効にするだけで、簡単に使用することが出来た。
 CI/CDの一環でソース更新時にDockerイメージを自動作成し、ECRにpushしているケースも多いと思うので、便利に使用出来そう。
・というか、元々あったのだろうか？？？ドキュメント探しても見つからない。。
 裏で何をベースにスキャンしているとか、情報があったら欲しいです。。