在使用Docker之前,请从我们公司的IT部门获得这些要求清单。我们希望使用Docker加快开发速度,并允许我们的开发人员仅在内部使用Docker使用Flask-Redis解决方案。这种用法是否全部必要?
- 请勿以root用户身份运行软件!
- 改为创建用户(或使用用户名称空间)。
- 准备软件,以便将root挂载为只读文件(并在运行文件受限制的情况下使用tmpfs)。
- 请勿在Docker集线器上信任社区映像(即使使用公共Dockerfile)。在官方基础图像上构建图像。
- 始终在新的基础映像上进行构建(例如,在构建之前docker pull [image])。
- 使用最少的基本映像(例如alpine)-仅安装必要的库。
- 请勿将机密存储到Dockerfile。请改用Docker机密(ENV –变量是一种不良做法,可能会泄漏信息)。
- 添加用于编排的HEALTHCHECK命令。
- 请勿安装不必要的软件(例如出于调试或测试目的)。
- 创建强化的docker-compose.yml和Dockerfile模板,以分发给软件项目。
- 由一名具有安全/操作知识的人员查看对Dockerfile的更改。
- 确保稍后生成图像时,它与以前完全相同。
- 使用CI管道构建Docker映像。
- 定期更新容器。
- 在Dockerfile的末尾使用apt-get更新+ apt-get升级。
- 使用docker-compose代替手动docker run命令。
- 添加默认标志:删除不必要的功能,限制新特权(无newprivileges),设置内存限制,在需要时限制cpu使用率,设置只读标志。
- 保持主机内核已更新!
- 拒绝内部容器通信(icc = false)。
- 保持Docker更新。
- 请注意,控制docker守护程序(属于docker组)的用户有效地在主机上具有根。
- 不允许未经授权的访问Docker API!
- 监视和登录。
- 资源保护–安装!如有必要:请勿这样做。如果确实有必要,则:r / o。如果需要读写:限制写入(FS DoS)
- 强化容器:选择操作系统,Alpine,Ubuntu Core?,CoreOS?,SUID(SGID)--security-opt =否新特权,Linux功能--cap-drop,Seccomp(chrome)--security -opt seccomp = yourprofile.json
- 加固主机:仅SSH + NTP –仅允许来自已定义的内部IP,拒绝ip任何
扫描Docker以获得安全性:https://github.com/docker/docker-bench-security
也请参阅以下内容:
https://docs.docker.com/develop/develop-images/dockerfile_best-practices/
https://snyk.io/blog/10-docker-image-security-best-practices/
https://github.com/OWASP/Docker-Security