Edited at

CIで簡単につかえるコンテナのセキュリティ診断「Dockle」


はじめに

コンテナイメージのセキュリティ診断ツール「Dockle」を正式にリリースしました。コンテナイメージから特に危険な項目をチェックするとともに、イメージに保存されているコマンド履歴をもとにベストプラクティスに沿ったコンテナイメージが作れているかも確認できます。

docklelogo.png

https://github.com/goodwithtech/dockle


導入まで

インストールしたら、あとはイメージ名を指定すればOKです。

他には何も用意する必要がありません。そう、Dockerすら不要です。

$ brew install goodwithtech/dockle/dockle

$ dockle [IMAGE_NAME]

各OSでのインストール手順はこちら。

プライベートレジストリにも対応してます。プライベートレジストリのイメージを利用する方法はこちら。

Dockle公式イメージも用意してます。利用方法はこちらをご確認ください。

実行結果は、以下のようにでます。

問題なければ 「PASS」が表示されます。

usage.png


特徴

Dockleの特徴は以下のものです。


  • 必要十分なチェック項目


    • CISベンチマークの項目に対応

    • ベストプラクティスの中でも重要なものに絞ってチェック



  • シンプル


    • イメージ名指定するだけで良い

    • インストールするだけですぐに利用可能



  • DevSecOps


    • CI/CDで利用しやすい




チェックする項目

The Center for Internet Security(CIS)が提供しているCIS BenchmarksのDockerに関する項目の中にあるContainer Images and Build Fileを主に利用しています。 これは、専門家により精査された、セキュリティでチェックすべき項目です。

その他にも、Best practices for writing Dockerfilesの項目もチェック対象に入ります。

上の2つのどちらにもないけど、チェックしてくれるものもあります。

たとえば、先月Alpineのオフィシャルイメージで発見されたような、パスワードがないユーザがいると検知してくれる、などその他にもセキュリティで気になる項目をチェックします。

CVE-2019-5021: Alpine Docker Image ‘null root password’ Vulnerability


他ツールとの比較

類似ツールとして、セキュリティ診断ができるDocker Bench for Security が、DockerfileのベストプラクティスをチェックするツールとしてHadolintがあります。

それぞれのツールでチェックできるCISベンチマークの項目は以下の通りで、Dockleがもっとも多くの範囲をカバーしています。

Dockle
Docker Bench for Security
Hadolint

1. Create a user for the container


2. Use trusted base images for containers
-

3. Do not install unnecessary packages in the container
-
-

4. Scan and rebuild the images to include security patches
-
-
-

5. Enable Content trust for Docker


6. Add HEALTHCHECK instruction to the container image


7. Do not use update instructions alone in the Dockerfile


8. Remove setuid and setgid permissions in the images

-

9. Use COPY instead of ADD in Dockerfile


10. Do not store secrets in Dockerfiles

-

11. Install verified packages only

 -

Dockleでカバーしていない、パッケージまわりの検知については、Trivyを利用することでカバーできます。 こちらもコミッタとして深く関わってます。


DevSecOps

もともとCIでも手軽にチェックできるツールがほしいという出発点なので、CIで利用して、簡単にDevSecOpsを組むこともできます。

Travis CIの設定はこちら

Circle CIの設定はこちら

CIで利用する場合は、dockle --exit-code 1 [IMAGE_NAME] で問題があれば異常終了するようにしつつ、 .dockleignore で無視したい項目を設定することを想定しています。


最後に

今回ツールを作成するにあたり、類似のツールを大量に試しましたが、導入の簡単さも、チェックできる項目の範囲も、Dockleが一番だと自負しています。

ぜひお使いいただき、すてきなDockerLifeを送ってください。

気になる点があれば、Qiita上でコメントするか、GitHubTwitterでコメントください。