必须启用并配置风险阻断策略,绑定命名空间、设阻断等级为高危及以上、关闭“放通未扫描”,配合推送即扫,才能在拉取时自动拒绝含高危漏洞镜像的跨节点分发。

明确阻断触发条件:依赖扫描结果等级
阻断动作不基于镜像本身属性(如名称、标签),而是严格依据安全扫描报告中的漏洞严重等级。只有当扫描引擎(如Trivy或Clair)识别出Critical(严重)或High(高危)级别的CVE漏洞,且该等级落入策略设定的阻断范围内,才会触发拦截。
- 扫描必须已完成且结果可用;若镜像尚未扫描或扫描失败,默认无结果,此时是否放行取决于“放通未扫描”开关
- 企业版ACR或Harbor中,扫描结果会写入镜像元数据,拉取请求时由策略引擎实时读取比对
- 仅设置“扫描”不等于“阻断”,必须单独配置阻断策略并启用
绑定命名空间并启用策略
阻断策略需关联到具体命名空间(如Harbor中的project,或ACR中的实例/命名空间),所有该空间下的镜像拉取操作都会被强制检查。策略启用后,不是阻止推送,而是阻止下游节点拉取——这正是实现“拒绝跨节点分发”的关键环节。
- 在ACR控制台:进入“安全可信 > 风险阻断”,点击“配置阻断策略”,选择目标命名空间
- 在Harbor UI:进入项目设置 → “Content Trust”或通过API调用
/api/v2.0/projects/{project_name}/prevent创建阻断规则 - 务必勾选“启用”开关,否则策略处于休眠状态
设置精准阻断等级与例外项
策略中“阻断规则”字段决定拦截阈值。设为“严重”则只拦Critical;设为“高危”则Critical+High均被拦——推荐生产环境至少设为High,避免漏掉Log4j类高危漏洞。
- 放通未扫描:建议关闭。否则正在扫描中的镜像可能被提前拉走,失去阻断意义
- 漏洞白名单:慎用。仅用于已知误报且短期无法修复的CVE,需填写标准CVE ID(如CVE-2021-44228),多条用英文逗号分隔
- 策略生效后,Kubernetes节点执行
kubectl apply拉取镜像时,若命中阻断,会直接返回ImagePullBackOff错误,日志中提示“blocked due to vulnerability policy”
确保扫描与分发链路闭环
阻断策略有效,前提是扫描已在镜像生命周期早期完成。推荐两种可靠模式:
- 推送即扫:在Harbor中启用“Automatically scan images on push”,或在ACR中开启交付链的“自动安全扫描”;确保CI/CD流水线推送完成后,扫描已结束并生成结果
- 拉取前强制扫描:部分企业版支持“On-demand scan before pull”,适合扫描耗时长或需离线库更新的场景
- 避免使用
latest标签直推直拉——它绕过版本锁定,也易导致扫描结果与实际拉取镜像不一致











