基于Google Artifact Registry与Jenkins阻止高危/严重漏洞容器部署
最佳实现方案
前提条件
- 已为Google Artifact Registry中的目标容器仓库启用漏洞扫描功能(默认新仓库自动启用,旧仓库需手动开启)。
- Jenkins服务器已配置GCP服务账号权限,允许调用Artifact Registry的漏洞扫描API(需包含
artifactregistry.repositories.listVulnerabilities权限)。
实现步骤
1. 完成GCP身份验证
在流水线执行漏洞检查前,先通过服务账号完成GCP身份认证:
stage('Authenticate to GCP') { steps { script { withCredentials([file(credentialsId: 'gcp-service-account-key', variable: 'GCP_KEY_FILE')]) { sh 'gcloud auth activate-service-account --key-file=${GCP_KEY_FILE}' sh 'gcloud config set project YOUR_GCP_PROJECT_ID' } } } }
2. 检查镜像高危/严重漏洞
使用gcloud命令查询指定镜像的漏洞信息,筛选出高危(HIGH)和严重(CRITICAL)级别的漏洞,若存在则终止流水线:
stage('Check Critical Vulnerabilities') { steps { script { def imageFullPath = 'us-central1-docker.pkg.dev/YOUR_PROJECT/YOUR_REPO/YOUR_IMAGE:YOUR_TAG' // 获取高危/严重漏洞ID列表 def highRiskVulns = sh( script: "gcloud artifacts docker images list-vulnerabilities ${imageFullPath} --filter='severity=(HIGH,CRITICAL)' --format='value(vulnerability.id)'", returnStdout: true ).trim() if (highRiskVulns) { echo "发现高危/严重漏洞:${highRiskVulns}" error "存在高危或严重级别漏洞,终止部署" } else { echo "未检测到高危/严重级别漏洞,继续部署流程" } } } }
3. 嵌入流水线流程
将上述漏洞检查步骤放在镜像推送完成后、K8s部署步骤之前,确保只有通过安全校验的镜像才能进入部署阶段。
额外优化建议
- 缓存扫描结果:同一镜像标签重复构建时,可跳过重复扫描以提升效率。
- 漏洞白名单:对已知且无法修复的低影响高危漏洞,可通过
--filter排除特定漏洞ID,避免误拦截。 - 保存审计报告:将完整漏洞扫描结果保存为Jenkins构建产物,方便后续安全审计。
内容的提问来源于stack exchange,提问作者jastonitas
相关产品推荐
相关产品推荐

