容器安全——AI教你学Docker
1.10 容器安全详解
容器安全是保障云原生、微服务、DevOps 等现代应用架构安全运行的核心环节。Docker 容器安全应从镜像、权限、发布、网络、运行时等多层面进行防护。
一、镜像安全扫描
1. 目的
- 检查镜像中是否存在系统漏洞、恶意软件、不安全配置等隐患,防止安全威胁随着镜像流入生产环境。
2. 常用工具
1) Trivy
- 简介:Aqua Security 开源的轻量级容器安全扫描工具,支持扫描镜像、文件系统、Git 仓库等。
- 特点:速度快,支持 CVE 漏洞库、敏感信息、依赖风险扫描。
- 用法:
trivy image nginx:latest trivy fs . # 扫描本地项目
- 集成:支持与 CI/CD、Harbor、K8s Admission Controller 集成。
2) Clair
- 简介:CoreOS(RedHat)开源的容器安全扫描服务,适合与私有仓库对接。
- 特点:支持自动扫描仓库中的镜像,定期同步漏洞库。
- 用法:通常后台服务,无命令行,需集成到 Harbor、Quay 等平台。
3) 其他工具
- Anchore、Snyk、Harbor 内置扫描等。
二、最小权限原则
最小权限原则(Principle of Least Privilege,PoLP)要求只赋予容器、进程、用户最低限度的权限,减少攻击面。
1. 设置非 root 用户(USER)
- 默认容器进程以 root 用户运行,安全风险高。
- 推荐在 Dockerfile 中添加:
RUN useradd -m appuser USER appuser
- 或用官方基础镜像自带的非 root 用户(如 node:alpine)。
2. Linux Capability 限制(–cap-drop/–cap-add)
- Linux 权限划分为多种 Capabilities,容器默认有一部分,减少后更安全。
- 常用参数:
--cap-drop ALL
:去除全部,再按需--cap-add
- 例:
docker run --cap-drop ALL --cap-add NET_BIND_SERVICE ...
- 常用 Capabilities 列表:官方文档
3. 安全配置文件
a) seccomp(安全计算模式)
- 限制容器系统调用(Syscall),防止利用内核漏洞。
- Docker 默认启用 seccomp 配置,可自定义:
docker run --security-opt seccomp=unconfined ... # 或自定义 seccomp 配置
b) AppArmor(应用安全配置,仅限 Ubuntu/Debian)
- 通过配置文件限制容器的访问能力。
- 使用时需在宿主机预先定义 profile:
docker run --security-opt apparmor=my-profile ...
c) SELinux(安全增强 Linux,仅限 CentOS/RedHat)
- 基于标签的强制访问控制。
- 启用:
docker run --security-opt label:type:container_t ...
- 配合卷挂载、宿主机操作有更强的粒度控制。
三、镜像签名与可信发布
1. 镜像签名
- 防止镜像被篡改,确保拉取和部署的镜像来源可信。
- 技术方案:
- Docker Content Trust(DCT)/ Notary:基于公私钥机制签名与验证镜像。
export DOCKER_CONTENT_TRUST=1 docker push myrepo/myimage:tag # 自动签名 docker pull myrepo/myimage:tag # 验证签名
- Sigstore/cosign、Harbor 签名等现代方案。
- Docker Content Trust(DCT)/ Notary:基于公私钥机制签名与验证镜像。
2. 镜像仓库安全
- 配置私有仓库 HTTPS,开启认证与访问控制。
- 只允许拉取官方或可信源镜像,定期清理过期/不安全镜像。
- 利用 Harbor、Quay 等企业级仓库的签名与扫描功能。
四、网络安全与隔离
1. 网络隔离
- 建议将不同安全域的服务部署到不同的 Docker 网络。
- 默认自定义 bridge 网络间隔离,未显式连接的容器无法互通。
2. 最小开放原则
- 只映射和开放必需端口(-p),避免暴露敏感服务。
- 结合宿主机防火墙(iptables/firewalld)限制访问源。
3. 生产环境建议
- 避免使用 --network host 提升隔离性。
- Overlay 网络可启用加密,保护跨主机流量。
4. 网络安全组与云原生安全
- 在云环境下,结合安全组、VPC、Service Mesh(如 Istio)等多层防护。
五、其他安全建议
- 定期更新基础镜像和业务镜像,修补已知漏洞。
- 使用 .dockerignore,杜绝敏感文件(如私钥、证书)被打入镜像。
- 监控容器运行时行为(如 Falco),及时发现异常。
- 最小化基础镜像(如用 scratch、alpine),减少攻击面。
- 禁止或限制特权容器(–privileged),非必要不启用。
六、参考资料
- Docker 官方安全文档
- Trivy 项目主页
- Clair 项目主页
- Docker Content Trust
- Harbor 容器镜像仓库