
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는 선택 사항이지만 권장되는 종속성입니다.
컨테이너를 직접 빌드하고 실행하려면 두 가지 옵션이 있습니다:
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 선택 사항 색상을 출력하지 않음
-h 선택 사항 이 도움말 메시지 출력
-l FILE 선택 사항 FILE에 로그 출력, Docker를 사용하는 경우 컨테이너 내부
-u USERS 선택 사항 신뢰할 수 있는 Docker 사용자(쉼표로 구분)
-c CHECK 선택 사항 특정 검사 ID 목록(쉼표로 구분)
-e CHECK 선택 사항 제외할 특정 검사 ID 목록(쉼표로 구분)
-i INCLUDE 선택 사항 검사할 컨테이너 또는 이미지 이름 내 패턴 목록(쉼표로 구분)
-x EXCLUDE 선택 사항 검사에서 제외할 컨테이너 또는 이미지 이름 내 패턴 목록(쉼표로 구분)
-t LABEL 선택 사항 검사할 컨테이너 또는 이미지 내 라벨 목록(쉼표로 구분)
-n LIMIT 선택 사항 JSON 출력에서 항목(컨테이너, 이미지 등) 목록을 보고할 때, 보고할 항목 수를 LIMIT으로 제한합니다. 기본값 0 (제한 없음).
-p PRINT 선택 사항 수정 조치 출력 비활성화. 기본값: 수정 조치 출력.
기본적으로 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 로깅 수준이 'info'로 설정되었는지 확인 검사만 실행합니다.
sh docker-bench-security.sh -e check_2_2는 2.2 로깅 수준이 '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 검사를 제외한 모든 사용 가능한 검사를 실행합니다.
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는 container_images 검사 중 4.5 Docker에 대한 Content trust가 활성화되었는지 확인을 제외한 검사만 실행합니다.
검사를 제출할 때는 해당 검사가 추가하기에 합당한 이유와 공식 문서를 포함한 정보를 제공하시기 바랍니다.