Dockleは、Dockerコンテナイメージのセキュリティチェックや、Dockerファイルのベストプラクティスをチェックできるツールである。
以前調べたhadolintやTrivyをあわせたような機能をもっている。
Dockle をインストールする
Macであればhomebrewを使ってインストールできる。
$ brew install goodwithtech/r/dockle
Dockle を実行する
Dockleは次のコマンドで実行できる。
$ dockle IMAGE_NAME
Docker daemonを起動する必要はないが、Dockerfileのベストプラクティスをチェックしたい場合には、イメージを作っておく必要がある。
たとえば次の内容のDockerファイルをDockleでチェックするとする。
FROM node:latest
その場合は、docker build
で作ったイメージに対してチェックする。
$ docker build ./ -t dockle-example
$ dockle dockle-example
WARN - CIS-DI-0001: Create a user for the container
* Last user should not be root
WARN - DKL-DI-0006: Avoid latest tag
* Avoid 'latest' tag
INFO - CIS-DI-0005: Enable Content trust for Docker
* export DOCKER_CONTENT_TRUST=1 before docker pull/build
INFO - CIS-DI-0006: Add HEALTHCHECK instruction to the container image
* not found HEALTHCHECK statement
INFO - CIS-DI-0008: Confirm safety of setuid/setgid files
* setuid file: urwxr-xr-x bin/su
* setgid file: grwxr-xr-x sbin/unix_chkpwd
* setuid file: urwxr-xr-x usr/bin/passwd
* setgid file: grwxr-xr-x usr/bin/expiry
* setuid file: urwxr-xr-x bin/mount
* setgid file: grwxr-xr-x usr/bin/chage
* setgid file: grwxr-xr-x usr/bin/ssh-agent
* setuid file: urwxr-xr-x usr/bin/chfn
* setuid file: urwxr-xr-x usr/bin/gpasswd
* setuid file: urwxr-xr-x bin/umount
* setuid file: urwxr-xr-x usr/bin/chsh
* setuid file: urwxr-xr-x usr/bin/newgrp
* setgid file: grwxr-xr-x usr/bin/wall
* setuid file: urwxr-xr-x usr/lib/openssh/ssh-keysign
INFO - DKL-LI-0003: Only put necessary files
* Suspicious directory : root/.npm
Dockle のチェック項目と、hadolint や Trivy との違い
チェック項目の詳細は、Checkpointで確認できる。
たとえばCIS-DI-0001
は、コンテナ用のユーザーを作るべしというルールである。
この項目はhadolintではチェックできないが、Dockleではチェックできる。
Dockleでチェックできるルールは、次のプラクティスに基づいている。
CIS
から始まるルール:CIS Docker 1.13.0 Benchmark v1.0.0に沿っているかDKL-DI
から始まるルール:Docker Best Practiceに沿っているかDKL-LI
から始まるルール:Docker Linux Practiceに沿っているか
hadolintでは、Docker Best Practiceに沿っているかをチェックする。
そのため、hadolintでチェックできる内容は、Dockleでもチェックできる。
一方で、TrivyとDockleは、チェックできる脆弱性の対象が異なる。
TrivyではCVEなどの脆弱性データベースに基づいているのに対し、Dockleは、CISベンチマークに基づいている。
GitHub Actions で Dockle を実行する
DockleをGitHub Actionsで動かすためのアクションはいくつか公開されているが、hadolintやTrivyと違って、開発元が公開したActionsはなかった。
この記事では、一番スター数の多いerzz/dockle-actionを使うことにする。
READMEのサンプルに沿って、リポジトリ内のDockerfileをチェックするワークフローファイルを追加する。
name: dockle
on:
pull_request:
paths:
- "Dockefile"
jobs:
lint:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v3
- name: Build an image from Dockerfile
run: |
docker build ./ -t my-image
- name: Run Dockle
uses: erzz/dockle-action@v1
with:
image: my-image
ワークフローを実行すると、項目に違反する内容を検出できた。