はじめに
コンテナイメージのセキュリティ診断ツール「Dockle」を正式にリリースしました。コンテナイメージから特に危険な項目をチェックするとともに、イメージに保存されているコマンド履歴をもとにベストプラクティスに沿ったコンテナイメージが作れているかも確認できます。
https://github.com/goodwithtech/dockle導入まで
インストールしたら、あとはイメージ名を指定すればOKです。
他には何も用意する必要がありません。そう、Dockerすら不要です。
$ brew install goodwithtech/dockle/dockle
$ dockle [IMAGE_NAME]
プライベートレジストリにも対応してます。プライベートレジストリのイメージを利用する方法はこちら。
Dockle
の公式イメージも用意してます。利用方法はこちらをご確認ください。
実行結果は、以下のようにでます。
問題なければ 「PASS」が表示されます。
特徴
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を送ってください。