前回はコンテナ脆弱性スキャナ Trivyのお話でしたが!!
今回はコンテナのイメージセキュリティチェック「Dockle」についてブログします。
ちなみにセキュリティチェックなら「VulsとかTrivyあるけども、何が違うの?」と疑問に思いますが、そもそも用途が違うので、勘違いしないようにしましょう。今回そこらへんも紹介しながらブログしたいと思います。
■Whats Dockle?
https://github.com/goodwithtech/dockle
https://qiita.com/tomoyamachi/items/8e042e4269427bb3b326
- 作者は@tomoyamachi 氏
- コンテナ内の危険な項目をチェック
- CISベンチマーク、Dockerベストプラクティスに基づいたイメージなのかチェック
- CIにも組み込めれる
- 様々なOSに対応
ちなみにVuls祭り #5でもLTされてましたので以下ぜひ!
例えば、独自で作ったコンテナイメージに無駄なものが入っているとか、信ぴょう性があるのかをチェックして、支援とアドバイスをもらえるOSSとなっています。これは盲者。ちなみに他のセキュリティチェックツールとの比較表が以下になります。
https://github.com/goodwithtech/dockle#checkpoints-comparison
圧倒的にできることが多い!!!インストール方法は以下。
■Install
https://github.com/goodwithtech/dockle#installation
- homebrew
1 |
$ brew install goodwithtech/dockle/dockle |
- RHEL/CentOS
1 2 3 4 5 |
$ VERSION=$( curl --silent "https://api.github.com/repos/goodwithtech/dockle/releases/latest" | \ grep '"tag_name":' | \ sed -E 's/.*"v([^"]+)".*/\1/' \ ) && rpm -ivh https://github.com/goodwithtech/dockle/releases/download/v${VERSION}/dockle_${VERSION}_Linux-64bit.rpm |
- Debian/Ubuntu
1 2 3 4 5 6 |
$ VERSION=$( curl --silent "https://api.github.com/repos/goodwithtech/dockle/releases/latest" | \ grep '"tag_name":' | \ sed -E 's/.*"v([^"]+)".*/\1/' \ ) && curl -L -o dockle.deb https://github.com/goodwithtech/dockle/releases/download/v${VERSION}/dockle_${VERSION}_Linux-64bit.deb $ sudo dpkg -i dockle.deb && rm dockle.deb |
- Windows
1 2 3 4 5 6 7 |
$ VERSION=$( curl --silent "https://api.github.com/repos/goodwithtech/dockle/releases/latest" | \ grep '"tag_name":' | \ sed -E 's/.*"v([^"]+)".*/\1/' \ ) && curl -L -o dockle.zip https://github.com/goodwithtech/dockle/releases/download/v${VERSION}/dockle_${VERSION}_Windows-64bit.zip $ unzip dockle.zip && rm dockle.zip $ ./dockle.exe [IMAGE_NAME] |
- Use Docker
1 2 3 4 5 6 |
$ VERSION=$( curl --silent "https://api.github.com/repos/goodwithtech/dockle/releases/latest" | \ grep '"tag_name":' | \ sed -E 's/.*"v([^"]+)".*/\1/' \ ) && docker run --rm -v /var/run/docker.sock:/var/run/docker.sock \ goodwithtech/dockle:v${VERSION} [YOUR_IMAGE_NAME] |
■Start Check
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 |
$ dockle wordpress:5-php7.3-apache WARN - CIS-DI-0001: Create a user for the container * Last user should not be root 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 PASS - CIS-DI-0007: Do not use update instructions alone in the Dockerfile PASS - CIS-DI-0008: Remove setuid and setgid permissions in the images PASS - CIS-DI-0009: Use COPY instead of ADD in Dockerfile PASS - CIS-DI-0010: Do not store secrets in ENVIRONMENT variables PASS - CIS-DI-0010: Do not store secret files PASS - DKL-DI-0001: Avoid sudo command PASS - DKL-DI-0002: Avoid sensitive directory mounting PASS - DKL-DI-0003: Avoid apt-get/apk/dist-upgrade PASS - DKL-DI-0004: Use apk add with --no-cache PASS - DKL-DI-0005: Clear apt-get caches PASS - DKL-DI-0006: Avoid latest tag PASS - DKL-LI-0001: Avoid empty password PASS - DKL-LI-0002: Be unique UID PASS - DKL-LI-0002: Be unique GROUP PASS - DKL-LI-0003: Only put necessary files |
おー早速怒られてますね。レベルもFATAL
WARN
INFO
SKIP
PASS
と5段階あるようです。改善方法は以下にまとまっているので参考に。
https://github.com/goodwithtech/dockle#checkpoint-summary
■Continuous Integration (CI)
https://github.com/goodwithtech/dockle#continuous-integration-ci
- CircleCi
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 |
jobs: build: docker: - image: docker:18.09-git steps: - checkout - setup_remote_docker - run: name: Build image command: docker build -t dockle-ci-test:${CIRCLE_SHA1} . - run: name: Install dockle command: | apk add --update curl VERSION=$( curl --silent "https://api.github.com/repos/goodwithtech/dockle/releases/latest" | \ grep '"tag_name":' | \ sed -E 's/.*"v([^"]+)".*/\1/' ) wget https://github.com/goodwithtech/dockle/releases/download/v${VERSION}/dockle_${VERSION}_Linux-64bit.tar.gz tar zxvf dockle_${VERSION}_Linux-64bit.tar.gz mv dockle /usr/local/bin - run: name: Scan the local image with dockle command: dockle --exit-code 1 dockle-ci-test:${CIRCLE_SHA1} workflows: version: 2 release: jobs: - build |
上記だと警告が見つかった場合にCIが失敗するようになっています。.dockleignoreファイル
を使って無視も可能。 結果を表示したい場合は --exit-code
を 0
に指定すればOK。
■Authorization for Private Docker Registry
https://github.com/goodwithtech/dockle#authorization-for-private-docker-registry
- Docker Hub
- Amazon ECR (Elastic Container Registry)
- GCR (Google Container Registry)
- Self Hosted Registry (BasicAuth)
各プライベートDockerレジストリも対応しているので良い!
■まとめ
本番環境でDocker運用している方はTrivyと合わせてコンテナイメージを見直したほうがセキュリティ向上間違いないと感じました。開発環境でもCI使って毎日テストしてイメージ作り直せばセキュリティ担保できるし、エンジニアが対応できる幅も広がりそうです。
面白いので一度使ってみてください!
0件のコメント