You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

配置本地Docker镜像仓库仅接受可验证镜像的方法

配置本地Docker仓库仅接受可验证的签名镜像

当然可以在仓库侧配置强制校验,避免客户端侧验证被绕过。以下是几种可行方案:

1. 给原生Docker Registry添加Webhook签名校验

原生的registry:2镜像支持通过Webhook触发事件,你可以搭建一个自定义校验服务,在镜像推送时自动验证签名:

  • 编写一个轻量Webhook服务(用Python/Go均可),接收Registry推送事件,提取镜像的digest和名称。
  • 在服务中执行cosign verify --key <你的公钥路径> <仓库地址>/<镜像名>@<digest>,根据命令退出码判断签名是否合法。
  • 验证通过返回200 OK给Registry,否则返回403 Forbidden,Registry会自动拒绝此次推送。
  • 修改Registry的配置文件(config.yml),添加Webhook配置:
    notifications:
      endpoints:
        - name: cosign-validator
          url: http://<你的Webhook服务地址>/validate
          timeout: 1s
          events:
            - action: push
    

2. 使用Harbor这类支持原生签名校验的仓库

Harbor作为企业级镜像仓库,原生支持内容信任和签名强制验证:

  • 创建Harbor项目后,开启「内容信任」功能。
  • 导入你的Cosign公钥到Harbor的信任根列表。
  • 在项目的「镜像仓库设置」中,配置推送规则为仅接受已签名且验证通过的镜像,未签名或签名无效的推送会直接被拦截。

3. Kubernetes环境下用准入控制器拦截(如果仓库部署在K8s中)

如果你的本地仓库运行在Kubernetes集群内,可以用Kyverno或OPA Gatekeeper这类工具做准入控制:

  • 编写校验规则,针对镜像推送请求,自动调用Cosign验证签名合法性。
  • 规则生效后,未通过签名验证的镜像推送请求会被直接拒绝。

注意:客户端侧的Cosign验证之所以存在被绕过的风险,是因为验证逻辑完全由客户端控制,攻击者可以修改客户端脚本跳过验证直接推送。只有在仓库侧做强制校验,才能从根源上确保只有合法签名的镜像被接收。

内容的提问来源于stack exchange,提问作者Muzammil

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.28 16:38:19