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

技术问询:ECR镜像推送扫描校验,修复Inspector变更致CI/CD故障

解决方案:适配ECR扫描迁移至AWS Inspector后的CI/CD流水线

核心问题分析

AWS将ECR镜像扫描功能迁移至AWS Inspector后,原有的ECR原生扫描结果查询API(如aws ecr describe-image-scan-findings)不再返回新扫描数据,需通过Inspector的API获取漏洞结果,这直接导致原有流水线依赖ECR扫描结果的逻辑失效。

调整后的完整流程实现

1. 推送Docker镜像至ECR

保持原有镜像推送逻辑不变,确保镜像成功上传:

# 登录ECR
aws ecr get-login-password --region <your-region> | docker login --username AWS --password-stdin <account-id>.dkr.ecr.<your-region>.amazonaws.com
# 构建并推送镜像
docker build -t <repo-name>:<tag> .
docker tag <repo-name>:<tag> <account-id>.dkr.ecr.<your-region>.amazonaws.com/<repo-name>:<tag>
docker push <account-id>.dkr.ecr.<your-region>.amazonaws.com/<repo-name>:<tag>

2. 触发并等待AWS Inspector扫描完成

Inspector默认会自动扫描新推送的ECR镜像(需提前在Inspector中启用ECR镜像扫描规则包),需轮询等待扫描完成:

  • 获取目标镜像ARN:
IMAGE_ARN=$(aws ecr describe-images --repository-name <repo-name> --image-ids imageTag=<tag> --query 'imageDetails[0].imageArn' --output text)
  • 循环检查扫描状态:
while true; do
    SCAN_STATUS=$(aws inspector2 list-scan-findings --filter '{"resourceArn": [{"comparison": "EQUALS", "value": "'$IMAGE_ARN'"}]}' --query 'findings[0].scanStatus.status' --output text)
    if [ "$SCAN_STATUS" = "COMPLETE" ]; then
        break
    elif [ "$SCAN_STATUS" = "FAILED" ]; then
        echo "扫描失败,终止构建"
        exit 1
    fi
    echo "扫描进行中,等待10秒..."
    sleep 10
done

3. 检查Critical级漏洞并终止构建

从Inspector结果中筛选Critical级漏洞,存在则终止流水线:

CRITICAL_COUNT=$(aws inspector2 list-scan-findings --filter '{"resourceArn": [{"comparison": "EQUALS", "value": "'$IMAGE_ARN'"}], "severity": [{"comparison": "EQUALS", "value": "CRITICAL"}]}' --query 'findings | length(@)' --output text)
if [ "$CRITICAL_COUNT" -gt 0 ]; then
    echo "检测到${CRITICAL_COUNT}个Critical级漏洞,终止构建"
    exit 1
else
    echo "未检测到Critical级漏洞,构建继续"
fi

必要的IAM权限配置

确保CI/CD流水线使用的IAM角色具备以下权限:

  • ecr:GetAuthorizationToken
  • ecr:DescribeImages
  • inspector2:ListScanFindings
  • 若需手动触发扫描,额外添加inspector2:StartScan

注意事项

  • 提前在AWS Inspector中启用对应区域的ECR镜像扫描,并配置包含漏洞扫描的规则包
  • 可根据实际扫描时长调整轮询间隔,避免过短导致API调用超限
  • 若使用GitHub Actions、GitLab CI等托管流水线,可将上述逻辑封装为步骤,结合平台内置重试机制优化等待逻辑

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.15 19:27:14