如何用REST API生成XRay漏洞报告并筛选最新镜像?
解决方案:筛选XRay漏洞报告中各文件夹的最新版本镜像
XRay的漏洞报告API本身没有直接筛选“文件夹下最新版本镜像”的参数,需要分两步实现:先通过Artifactory API获取每个文件夹下的最新镜像标签,再将这些指定镜像作为资源传入报告请求。
步骤1:获取每个文件夹的最新镜像标签
利用Artifactory的Docker仓库标签列表API,逐个查询每个文件夹(镜像仓库名)的所有标签,筛选出最新版本。
单个文件夹查询示例
以folder1为例,执行以下命令获取其所有标签并提取最新版本(假设版本号为递增的versionX格式):
curl -u <user>:<password> https://artifactory.<org>/api/docker/docker-prod-local/v2/folder1/tags/list | jq -r '.tags | sort | last'
返回结果即为folder1下的最新版本(如version3)。
批量遍历所有文件夹(脚本示例)
如果文件夹数量较多,可以用shell脚本自动遍历并收集所有最新镜像:
#!/bin/bash USER="<user>" PASSWORD="<password>" ARTIFACTORY_URL="https://artifactory.<org>" REPO="docker-prod-local" FOLDERS=("folder1" "folder2" "folder3") # 初始化镜像列表 IMAGE_LIST=() for FOLDER in "${FOLDERS[@]}"; do # 获取该文件夹的最新tag LATEST_TAG=$(curl -u "$USER:$PASSWORD" "$ARTIFACTORY_URL/api/docker/$REPO/v2/$FOLDER/tags/list" | jq -r '.tags | sort | last') # 拼接完整镜像路径 IMAGE_LIST+=("\"$REPO/$FOLDER:$LATEST_TAG\"") done # 生成report.json内容 cat > report-latest.json << EOF { "name": "docker-prod-local-latest-versions", "resources": { "dockerImages": [ $(IFS=, ; echo "${IMAGE_LIST[*]}") ] }, "filters": { "severities": [ "Critical", "High" ] } } EOF
步骤2:用指定镜像生成XRay漏洞报告
使用修改后的report-latest.json(包含所有文件夹的最新镜像)执行原curl命令:
curl -u <user>:<password> https://artifactory.<org>/xray/api/v1/reports/vulnerabilities -H 'Content-Type: application/json' -d @report-latest.json
注意事项
- 如果你的版本号是语义化版本(如
v1.2.3),需要调整排序逻辑,可使用jq的sort_by结合版本号解析函数来正确排序。 - 确保你的Artifactory账号拥有
docker-prod-local仓库的读取权限,以及XRay报告的生成权限。
内容的提问来源于stack exchange,提问作者youttam
相关产品推荐
相关产品推荐

