核心是全局启用docker_content_trust=1强制拉取时校验签名,绑定可信签发者(如cosign限定oidc身份),禁用镜像加速器与:latest标签,并通过daemon级--signature-verification及admission controller实现运行时准入拦截。

配置 Docker 镜像拉取的信任策略,核心是让不安全镜像在拉取阶段就被拦截,而不是等运行时才发现问题。这需要从环境变量、签名验证、仓库准入和运行时控制四个层面协同生效。
全局启用内容信任(DCT)
这是最基础也最关键的一步:强制所有拉取操作校验签名。
- 临时启用:执行
export DOCKER_CONTENT_TRUST=1 - 永久生效:写入
~/.bashrc或系统级/etc/environment - 首次拉取会自动初始化信任数据库,信任 Docker Hub 官方根密钥;私有仓库需提前导入可信根证书
- 启用后,遇到未签名镜像(如
nginx:alpine若未被官方签名)会直接报错:no trust data for ...
绑定可信签发者身份
仅检查“有没有签名”不够,还要确认“谁签的才可信”,防止攻击者用自签名伪造。
- 使用 Cosign 时,验证命令中明确限定 OIDC 签发者和身份正则,例如只接受 GitHub Actions 在 main 分支构建的镜像:
cosign verify --certificate-oidc-issuer https://token.actions.githubusercontent.com \--certificate-identity-regexp "https://github.com/myorg/.*/.github/workflows/.*@refs/heads/main" \registry.example.com/app:v1.2.0- 对 DCT 环境,用
notaryCLI 管理 Targets 密钥,并将其与 CI 系统强绑定,禁止人工推送
堵住常见绕过路径
很多不安全镜像不是绕过验证,而是利用配置漏洞跳过验证机制。
- 禁用不可信镜像加速器:检查
/etc/docker/daemon.json中的registry-mirrors,移除社区维护的公共代理 - 避免使用
:latest标签:DCT 对标签签名后禁止覆盖,但:latest易被恶意重推,应改用带哈希的固定引用,如FROM ubuntu:22.04@sha256:abc123 - 禁用
--disable-content-trust参数:CI/CD 流水线中严禁在docker pull或docker build中显式跳过验证
运行时再加一道准入控制
即使宿主机启用了 DCT,也要防范临时关闭或容器引擎绕过。
- Docker daemon 启动时添加
--signature-verification参数,强制开启守护进程级签名校验 - Kubernetes 环境下,在 Admission Controller 层配置
ImagePolicyWebhook或Gatekeeper策略,拦截未签名或签发者不匹配的镜像拉取请求 - 私有仓库(如 Harbor)开启“内容信任”策略,并配置项目级签名强制策略,拒绝未签名镜像推送











