【処理速度53倍】コンテナ脆弱性スキャンツールTrivyの初回実行速度が高速化されました!
「これは、まじで圧倒的…」
OSSの脆弱性スキャンツールとして界隈では有名な「Trivy」。以前からもお世話になっていたのですが、初回起動処理が長いためキャッシュが効かないCI/CDツールとは相性が悪いという弱点がありました。
それが、バージョン0.2.0からその弱点の初回起動処理の遅さが一気に解消され、既存のCI/CDツールへの取り込みが現実的になりました。
インストールも簡単で、かつワンライナーで実行できる手軽なツールなので、コンテナを運用している人はこれを機に一度試してみることをおすすめします。
初回起動爆速化きたか…!! ( ゚д゚) ガタッ / ヾ __L| / ̄ ̄ ̄/_ \/ /
Trivyとは
GitHubはこちら。
aquasecurity/trivy: A Simple and Comprehensive Vulnerability Scanner for Containers, Suitable for CI
AquaからOSSで提供されているコンテナ脆弱性スキャンツール。作者は日本人のスッキリごん!さん。
作者の方が、Aquaに入社するまでの流れは本人のブログを読めばすべてわかります。はてぶが1900以上ついてる記事なので、見たことがある人も多いんじゃないでしょうか。
趣味で作ったソフトウェアが海外企業に買われるまでの話 - knqyf263's blog
v0.2.0から初回起動が超高速化されました
v0.2.0以前は、脆弱性情報をGitHubに保存してあり、起動時にGit CloneしてローカルでDB構築していました。そのため初回起動が重くキャッシュを基本持たないCIサービスでは非常に時間がかかるものでした。
これが、v0.2.0のリリースでBoltDBをzip化してGitHub Releaseに移行し、データサイズを削減。全体で80%のサイズ削減に成功。これにより、初回実行でも10秒以内に完了するようになっているとのことです。
というわけで、実際にスキャンをかけてみた様子をご覧いれます。
脆弱性スキャン対象イメージをダウンロード
最初に、予めスキャン対象のイメージをクライアントにダウンロードしておきます。手元の環境は以下の通り。
$ sw_vers ProductName: Mac OS X ProductVersion: 10.15.1 BuildVersion: 19B88 $ docker --version Docker version 19.03.5, build 633a0ea
スキャン対象は、centosで公開されているイメージで一番古いcentos6.6
を利用します。スキャンが捗りそう。
$ docker image pull centos:centos6.6 centos6.6: Pulling from library/centos 5dd797628260: Pull complete Digest: sha256:32b80b90ba17ed16e9fa3430a49f53ff6de0d4c76ad8631717a1373d5921fa26 Status: Downloaded newer image for centos:centos6.6
以前のバージョンでのスキャン実行速度の計測
以前のバージョンと比較するため、旧バージョンで実行速度を確認しておきます。
$ trivy --version trivy version 0.1.4
最初に、全てのキャッシュとクライアントデータベースを削除。--reset
オプションを使います。
$ trivy --reset 2019-11-23T18:16:02.052+0900 INFO Resetting...
ほな、計測してみましょう!
$ time trivy centos:centos6.6 Updating vulnerability database... [ ] It will take a while for the first time... centos:centos6.6 (centos 6.6) ============================= Total: 899 (UNKNOWN: 0, LOW: 83, MEDIUM: 634, HIGH: 150, CRITICAL: 32) ====途中省略=== real 7m6.512s user 1m40.775s sys 2m13.785s
というわけで、初回起動では7分6秒程かかっています。これはつらいですな。
ちなみに2回めからは2秒ほどで完了。
$ time trivy centos:centos6.6 real 0m2.301s user 0m0.794s sys 0m0.398s
バージョン0.2.1によるスキャン実行速度の計測
trivyを最新版に更新します。
自分の環境だと、Aqua移譲前の古いFORMULAだったので、一旦アンインストールします。
$ brew uninstall knqyf263/trivy/trivy Uninstalling /usr/local/Cellar/trivy/0.1.4... (5 files, 25.5MB)
再度最新版のインストール。
$ brew install aquasecurity/trivy/trivy
バージョンが、0.2.1
になっていることを確認。
$ trivy --version trivy version 0.2.1
実行前にキャッシュを削除。
$ trivy --reset 2019-11-23T21:27:40.616+0900 INFO Resetting...
さて、いよいよスキャンしてみます。
$ time trivy centos:centos6.6 [============> ] Downloading Full DB file... real 0m7.823s user 0m0.832s sys 0m0.399s
その実行時間7.8秒!こりゃすごい。以前のバージョンの初回実行が7分6秒(426秒)なので、およそ54倍高速化しています。
ちなみに2回めの実行結果はこちら。2回目も0.05秒と非常に早くなっています。
$ time trivy centos:centos6.6 real 0m0.572s user 0m0.419s sys 0m0.130s
lightモードでさらに初回起動を早く
ちなみに、v.0.2.0以降では、新たに--light
オプションが追加されており、このオプションでは脆弱性情報の詳細はダウンロードせず、CVEのバージョンのみを表示します。こちらを使うと、初回起動でも約3秒で実行できました。詳細な脆弱性の情報が不要なCI/CDに組み込んで使うには最適ですね。
$ trivy --reset $ time trivy --light centos:centos6. real 0m2.971s user 0m0.499s sys 0m0.218s
参考までに2回目の実行結果です。
$ time trivy --light centos:centos6. real 0m0.510s user 0m0.362s sys 0m0.113s
バージョンアップ前後での実行時間まとめ
以上、バージョンアップ前後の実行時間をまとめた表がこちら。
実行形態 | v0.1.4 | v0.2.1 | v0.2.1(lightモード) |
---|---|---|---|
初回起動 | 426秒 | 7.8秒 | 2.9秒 |
2回目 | 2.3秒 | 0.5秒 | 0.5秒 |
初回起動から圧倒的に早くなっており、キャッシュが効かないCI/CD環境でも非常に使いやすくなっていることがわかります。
AWSブログにもTrivy登場の衝撃
実はめっちゃ自分的にびっくりしたことなんですが、ちょうど今日、AWSブログにもTrivyが取り上げられるという衝撃の出来事がありました。
ご存じの方も多いと思いますが、AWSのコンテナレジストリのECRに、先日脆弱性スキャンが提供されていたんですね(参考:【超待望アップデート】ECRに対する脆弱性スキャン機能が提供されました | Developers.IO)
このECRの脆弱性スキャンは、別のOSSのコンテナ脆弱性スキャンツールであるClairをベースとしたものでした。
以前のAWSブログでもClairは紹介されていたので、「そっかぁ、ECRはClair使ったんだな」と思っていたところ、突然このタイミングでAWSのコンテナヒーローでかつAqua社のVPであるLiz RiceがAWSブログに寄稿したのは大きな驚きです。
あくまで個人の想像ですが、ECRの脆弱性スキャンエンジンの中にTrivyも取り込まれる布石では?と考えたりしています。
オープンソースでどこでも使えるTrivyをCI/CDに組み込んでみよう!
もともとワンライナーで気軽に使えるコンテナ脆弱性スキャンツールとして、Trivyは非常に使いやすいツールでした。ただ、クライアント側に脆弱性データベースをダウンロードするための初回処理が非常に長かったため、SaaSのCI/CDツールなどのような基本キャッシュを持たない環境では使いにくかったです。
今回のアップデートにより、その弱点が解消され、手軽にどこでも使える高機能な脆弱性スキャンツールとして大きな進化を遂げています。
ワンライナーで実行可能、かつエラーコード判定するためのオプションも豊富なため、オプションの組み合わせ次第でどんなシチュエーションに柔軟に対応可能。今までコンテナの脆弱性スキャン、いまいちめんどくさいなぁと思っていた人もこれをきっかけに取り入れてみてはいかがでしょうか。
それでは、今日はこのへんで。濱田(@hamako9999)でした。