linuxea:gitlab-ci之docker-bench-security


在前面的两篇中,记录了gitlab-ci构建构建docker镜像安全漏洞扫描,但在github上还有一个不错的项目
--> Docker Bench for Security

  • Docker Bench for Security是一个脚本,用于检查有关在生产中部署Docker容器的许多常见最佳实践。附:DOCKER安全性和最佳实践

这其中, 检查的东西很多样化,包括:资源限制,明文密码,swarm以及其他的一些辅助性质或者参考价值的信息。

阅读本章,你将了解Docker Bench for Security在gitlab-ci中的集成实践,这将有助于推动gitlab-cI自动化。

I. 运行Docker Bench

有提供现成的Docker容器镜像,我们直接拿来使用。

请注意,此容器正以大量特权运行- 共享主机的文件系统,pid和网络命名空间,因为基准测试的部分应用于正在运行的主机。不要忘记根据你的操作系统调整共享卷,例如它可能不使用systemd

docker run -it --net host --pid host --userns host --cap-add audit_control \
    -e DOCKER_CONTENT_TRUST=$DOCKER_CONTENT_TRUST \
    -v /var/lib:/var/lib \
    -v /var/run/docker.sock:/var/run/docker.sock \
    -v /usr/lib/systemd:/usr/lib/systemd \
    -v /etc:/etc --label docker_bench_security \
    docker/docker-bench-security

默认情况下,会检查所有的容器项目和镜像,我们要通过选项来规避一些我们想要的结果:

  -b           optional  Do not print colors
  -h           optional  Print this help message
  -l FILE      optional  Log output in FILE
  -c CHECK     optional  Comma delimited list of specific check(s)
  -e CHECK     optional  Comma delimited list of specific check(s) to exclude
  -i INCLUDE   optional  Comma delimited list of patterns within a container name to check
  -x EXCLUDE   optional  Comma delimited list of patterns within a container name to exclude from check
  -t TARGET    optional  Comma delimited list of images name to check
  • type

一共会检查如下几项,我们通过-c参数:-c docker_daemon_configuration 来检查我们想要一个函数的结果。如果你的粒度更小 ,可以使用:-c check_2。而这些参数可以在这个项目的functions_lib.sh找到。

[INFO] 1 - Host Configuration
[INFO] 2 - Docker daemon configuration
[INFO] 3 - Docker daemon configuration files
[INFO] 4 - Container Images and Build File
[INFO] 5 - Container Runtime
[INFO] 6 - Docker Security Operations
[INFO] 7 - Docker Swarm Configuration

示例:

仅仅检查-c docker_daemon_configuration,并且镜像只是registry.linuxea.com/dev/linuxeabbs:latest

[root@linuxea.com ~]# docker run -it --net host \
--pid host \
--userns host \
--cap-add audit_control   \
-e DOCKER_CONTENT_TRUST=$DOCKER_CONTENT_TRUST  \
-v /var/lib:/var/lib  \
-v /var/run/docker.sock:/var/run/docker.sock  \
-v /usr/lib/systemd:/usr/lib/systemd     \
-v /etc:/etc \
--label docker_bench_security     \
docker/docker-bench-security -t registry.linuxea.com/dev/linuxeabbs:latest -c docker_daemon_configuration

在或者检查某一个小项

II. 添加到管道

参数:

  • -t 指定镜像
  • -c 指定CIS,只检查指定的项目
  • -l 结果输出到文件(似乎不好用,用tee代替)

添加新的项

3/3 DockerBench_Security:
  <<: *bash_init
  script:
    - docker_bench_security
  artifacts:
    name: "$CI_JOB_STAGE-$CI_COMMIT_REF_NAME"    
    paths: [docker_bench_security.log]

函数部分

  function docker_bench_security() {
    export PROJECT_NAME=$(echo "$CI_PROJECT_PATH_SLUG" |awk -F- '{print $2}')
    export IMAGE_TAG_LATEST="$REPOSITORY_URL"/"$PROJECT_NAME":latest      
    docker run -i --rm --net host \
      --pid host \
      --userns host \
      --cap-add audit_control   \
      -e DOCKER_CONTENT_TRUST=$DOCKER_CONTENT_TRUST  \
      -v /var/lib:/var/lib  \
      -v /var/run/docker.sock:/var/run/docker.sock  \
      -v /usr/lib/systemd:/usr/lib/systemd     \
      -v /etc:/etc \
      --label docker_bench_security     \
      docker/docker-bench-security -t "$IMAGE_TAG_LATEST" -c container_images |tee docker_bench_security.log
  }

运行部分结果如下:

III. 延伸阅读

IV. 阅读更多

0 分享

您可以选择一种方式赞助本站

支付宝扫码赞助

支付宝扫码赞助

日期: 2019-03-26分类: 持续集成

标签: devops, Gitlab-ci/cd

发表评论

仅有一条评论

加载中,请稍候...
  1. bloodzer0
    April 19th, 2019 at 04:23 pm

    你好,关于你写的devsecops 这一系列的文章我非常感兴趣,不知道能否加一个微信好友!,如果可以请将微信ID发到邮箱,想跟你多讨论关于DevSecOps的相关东西