如何通过Azure CLI获取存在安全漏洞的容器镜像列表?
获取ACR中存在安全漏洞的带标签镜像
前置说明
Azure容器注册表(ACR)的漏洞扫描基于Trivy,需确保扫描功能已启用(默认可能已开启,若未启用可执行az acr update --name myregistry --scan-enabled true)。
方法1:批量遍历并筛选(适合自定义逻辑)
通过循环遍历所有仓库及标签,检查每个镜像的扫描结果:
# 获取所有仓库名称 REPOS=$(az acr repository list --name myregistry --output tsv) # 遍历每个仓库 for REPO in $REPOS; do # 获取当前仓库的所有标签 TAGS=$(az acr repository show-tags --name myregistry --repository $REPO --output tsv) # 遍历每个标签 for TAG in $TAGS; do # 获取镜像的清单摘要(扫描结果关联清单而非标签) DIGEST=$(az acr repository show --name myregistry --repository $REPO --tag $TAG --query 'digest' --output tsv) # 获取扫描状态 SCAN_STATUS=$(az acr vulnerability scan list-results --name myregistry --repository $REPO --digest $DIGEST --query 'scanStatus' --output tsv) # 仅处理已完成扫描的镜像 if [ "$SCAN_STATUS" = "Completed" ]; then # 获取严重/高危漏洞数量 CRITICAL_COUNT=$(az acr vulnerability scan list-results --name myregistry --repository $REPO --digest $DIGEST --query 'summary.critical' --output tsv) HIGH_COUNT=$(az acr vulnerability scan list-results --name myregistry --repository $REPO --digest $DIGEST --query 'summary.high' --output tsv) # 若存在严重或高危漏洞则输出 if [ "$CRITICAL_COUNT" -gt 0 ] || [ "$HIGH_COUNT" -gt 0 ]; then echo "存在风险的镜像: $REPO:$TAG | 严重漏洞: $CRITICAL_COUNT | 高危漏洞: $HIGH_COUNT" fi fi done done
方法2:单命令高效筛选(适合快速查询)
利用Azure CLI的JMESPath查询直接过滤出有风险的镜像:
az acr vulnerability scan list-results --name myregistry \ --query "[?scanStatus=='Completed' && (summary.critical > 0 || summary.high > 0)].{镜像: repository + ':' + tag, 严重漏洞数: summary.critical, 高危漏洞数: summary.high}" \ --output table
自定义筛选规则
你可以根据需求调整查询条件:
- 包含中危漏洞:将条件改为
summary.critical > 0 || summary.high > 0 || summary.medium > 0 - 仅看严重漏洞:条件改为
summary.critical > 0 - 获取漏洞详情:去掉
--query参数,或修改查询字段为[?条件].{...漏洞详情: vulnerabilities}
内容的提问来源于stack exchange,提问作者Python coder
相关产品推荐
相关产品推荐

