Dockle で Docker イメージのセキュリティやベストプラクティスをチェックする
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/[email protected]
- name: Build an image from Dockerfile
run: |
docker build ./ -t my-image
- name: Run Dockle
uses: erzz/dockle-[email protected]
with:
image: my-image
ワークフローを実行すると、項目に違反する内容を検出できた。