
Docker Bench for Securityは、本番環境でDockerコンテナをデプロイする際の一般的なベストプラクティスを数十項目チェックするスクリプトです。

Docker Bench for Securityは、Dockerコンテナを本番環境にデプロイする際の一般的なベストプラクティスを数十項目チェックするスクリプトです。テストはすべて自動化されており、CIS Docker Benchmark v1.6.0をベースにしています。
このオープンソースユーティリティを公開することで、Dockerコミュニティが自らのホストとDockerコンテナをこのベンチマークに対して簡単に自己評価できるようにしています。
| リリース | CIS |
|---|---|
| 1.6.0 | 1.6.0 |
| 1.5.0 | 1.5.0 |
| 1.3.6 | 1.4.0 |
| 1.3.5 | 1.2.0 |
| 1.3.3 | 1.1.0 |
| 1.3.0 | 1.13.0 |
次のように、ベースホストから直接スクリプトを実行できます。
git clone https://github.com/docker/docker-bench-security.git
cd docker-bench-security
sudo sh docker-bench-security.sh
注意:
jqはオプションですが推奨される依存関係です。
自分でビルドしてコンテナを実行する場合は、次の2つのオプションがあります。
git clone https://github.com/docker/docker-bench-security.git
cd docker-bench-security
docker build --no-cache -t docker-bench-security .
その後、下記のような適切な docker run コマンドを実行します。
git clone https://github.com/docker/docker-bench-security.git
cd docker-bench-security
docker-compose run --rm docker-bench-security
docker/docker-bench-security イメージは古くなっており、手動でのビルドが必要です。詳細は #405 を参照してください。
このコンテナは、ベンチマークの一部が実行中のホストに適用されるため、多くの権限(ホストのファイルシステム、PID、ネットワーク名前空間の共有)で実行されることに注意してください。
docker run --rm --net host --pid host --userns host --cap-add audit_control \
-e DOCKER_CONTENT_TRUST=$DOCKER_CONTENT_TRUST \
-v /etc:/etc:ro \
-v /usr/bin/containerd:/usr/bin/containerd:ro \
-v /usr/bin/runc:/usr/bin/runc:ro \
-v /usr/lib/systemd:/usr/lib/systemd:ro \
-v /var/lib:/var/lib:ro \
-v /var/run/docker.sock:/var/run/docker.sock:ro \
--label docker_bench_security \
docker-bench-security
共有ボリュームは、お使いのオペレーティングシステムに合わせて調整することを忘れないでください。 いくつかの例を示します。
docker.service と docker.secret ファイルはデフォルトで
/lib/systemd/system フォルダにあります。docker run --rm --net host --pid host --userns host --cap-add audit_control \
-e DOCKER_CONTENT_TRUST=$DOCKER_CONTENT_TRUST \
-v /etc:/etc:ro \
-v /lib/systemd/system:/lib/systemd/system:ro \
-v /usr/bin/containerd:/usr/bin/containerd:ro \
-v /usr/bin/runc:/usr/bin/runc:ro \
-v /usr/lib/systemd:/usr/lib/systemd:ro \
-v /var/lib:/var/lib:ro \
-v /var/run/docker.sock:/var/run/docker.sock:ro \
--label docker_bench_security \
docker-bench-security
/etc/hostname ファイルが存在しないため、最初に作成する必要があります。また、macOS の Docker Desktop には /usr/lib/systemd や上記の Docker バイナリがありません。sudo touch /etc/hostname
docker run --rm --net host --pid host --userns host --cap-add audit_control \
-e DOCKER_CONTENT_TRUST=$DOCKER_CONTENT_TRUST \
-v /etc:/etc \
-v /var/lib:/var/lib:ro \
-v /var/run/docker.sock:/var/run/docker.sock:ro \
--label docker_bench_security \
docker-bench-security
Docker bench を実行するには、Docker 1.13.0 以降が必要です。
ディストリビューションに auditctl が含まれていない場合、監査テストでは代わりに /etc/audit/audit.rules にルールが存在するかどうかを確認します。
-b optional 色を表示しない
-h optional このヘルプメッセージを表示する
-l FILE optional ログ出力を FILE に出力する(Docker で実行する場合はコンテナ内)
-u USERS optional 信頼する Docker ユーザー(カンマ区切りリスト)
-c CHECK optional 実行する特定のチェック ID(カンマ区切りリスト)
-e CHECK optional 除外する特定のチェック ID(カンマ区切りリスト)
-i INCLUDE optional チェック対象とするコンテナまたはイメージ名のパターン(カンマ区切りリスト)
-x EXCLUDE optional チェックから除外するコンテナまたはイメージ名のパターン(カンマ区切りリスト)
-t LABEL optional チェック対象とするコンテナまたはイメージ内のラベル(カンマ区切りリスト)
-n LIMIT optional JSON 出力で、アイテム(コンテナ、イメージなど)のリストを報告する際に、報告するアイテム数を LIMIT に制限する。デフォルト 0(制限なし)。
-p PRINT optional 修正措置の表示を無効にする。デフォルト: 修正措置を表示する。
デフォルトでは、Docker Bench for Security スクリプトは利用可能なすべての CIS テストを実行し、現在のディレクトリの log フォルダに docker-bench-security.log.json と docker-bench-security.log のログを生成します。
Docker コンテナを使用する場合、ログファイルはコンテナ内の /usr/local/bin/log/ に作成されます。ホストからアクセスするには、コンテナ実行後にログを保存するためのボリュームをマウントする必要があります。
CIS ベースのチェックは check_<section>_<number> という名前で、例えば check_2_6 となります。コミュニティ提供のチェックは check_c_<number> という名前です。
sh docker-bench-security.sh -c check_2_2 は、チェック 2.2 Ensure the logging level is set to 'info' のみを実行します。
sh docker-bench-security.sh -e check_2_2 は、2.2 Ensure the logging level is set to 'info' を除くすべての利用可能なチェックを実行します。
sh docker-bench-security.sh -e docker_enterprise_configuration は、docker_enterprise_configuration グループを除くすべての利用可能なチェックを実行します。
sh docker-bench-security.sh -e docker_enterprise_configuration,check_2_2 は、docker_enterprise_configuration グループと 2.2 Ensure the logging level is set to 'info' を除くすべての利用可能なチェックを実行します。
sh docker-bench-security.sh -c container_images,container_runtime は、container_images と container_runtime のチェックのみを実行します。
sh docker-bench-security.sh -c container_images -e check_4_5 は、4.5 Ensure Content trust for Docker is Enabled を除く container_images のチェックのみを実行します。
チェックを送信する際は、なぜそれが追加するのに妥当なテストであるかを説明し、その情報を裏付ける公式ドキュメントを添付してください。