控制漏洞扫描费用

漏洞扫描在 Artifact Analysis 正式版发布后已变为付费服务。当您启用扫描 API 后,系统会立即开始计费。

如需了解详情,请参阅价格页面

降低费用的最佳做法

当您启用 Container Scanning API 后,系统会自动扫描您推送的每个新映像。为了降低费用,请将您要扫描的容器映像拆分到其他项目。

  • 设置新的 Google Cloud 项目并为该项目启用 Container Scanning API。此项目需要为 Artifact Registry 和 Container Registry(已弃用)支付正常的结算费用。将您要扫描的图片推送到此项目。

  • 在 CI/CD 流水线中添加以下步骤:

    1. 添加与已启用 Container Scanner 的 Artifact Registry 或 Container Registry 项目相对应的标记。

    2. 将映像推送到项目。

估算扫描费用

如需计算项目中映像的大致费用,请估算您在某个时间范围内推送的映像数量,并将该数量乘以每次扫描的价格。您可以通过在 Cloud Shell 中运行 shell 脚本来实现此目的。

  1. 在项目中打开 Cloud Shell。

    打开 Cloud Shell

  2. 点击 Open Editor 图标,然后创建包含以下内容的 cost-estimation.sh 文件:

        #!/bin/bash
    
        # Replace with price from https://cloud.google.com/artifact-analysis/pricing
        PRICE='PRICE'
    
        # Replace with your project data
        GC_PROJECT='PROJECT_REPOSITORY'
        START_DATE='START_DATE'
        END_DATE='END_DATE'
    
        REGION=$(echo $GC_PROJECT | sed -n 's/\/.*//p')
    
        if [ -z "$REGION" ];
        then
            printf "'GC_PROJECT' value must be a valid GCR or AR repository (e.g. gcr.io/corp-staging or us-central1-docker.pkg.dev/myproj/myrepo"
            exit 1
        fi
    
        IFS=$'\n'
        FILTER="timestamp.date('%Y-%m-%d', Z)>'$START_DATE' AND timestamp.date('%Y-%m-%d', Z)<'$END_DATE'"
    
        images=$( gcloud container images list --repository="$GC_PROJECT" | sed -n "/$REGION/p" | sed 's/NAME: //' )
    
        num_images=$(echo $images | wc -w)
    
        printf "Using gcloud to filter $num_images images from $START_DATE to $END_DATE (takes about 1 second per image)\n\n"
    
        total_digests=0
    
        for image in $images; do
        printf "querying $image\n"
        image_digests=$( gcloud container images list-tags --filter="$FILTER" "$image" 2> >(sed "s/Listed 0 items.//" | sed -n "/.\+/p" >&2) | wc -l)
    
        if [[ "$image_digests" -gt 1 ]]; then
            total_digests=$(( total_digests + $image_digests - 1 ))
        fi
        done
    
        total_price=$( python -c "print($total_digests * $PRICE)" )
    
        echo ''
        echo "Number of images: $total_digests"
        echo "Estimated cost: $total_price"
    

    替换以下内容:

    • PRICE价格中显示的自动漏洞扫描价格。
    • PROJECT_REPOSITORY:您的项目代码库。例如 gcr.io/corp-staging
    • START_DATE:是要估算的时间段的开始日期,格式为 Y-m-d。例如 2020-03-01
    • END_DATE:是要估算的时间段的结束日期,格式为 Y-m-d。例如 2020-03-31
  3. 运行脚本:

    bash cost-estimation.sh
    

    它会显示映像总数和总估算费用:

    Number of images: 53
    Estimated cost: 13.78
    

这只是估算值,实际费用可能因其他因素而异,例如:

  • 将同一映像推送到同一项目中不同的多区域不会产生额外的费用。

  • 将同一映像推送到两个不同项目中的两个不同代码库不会产生额外的费用。

查看当前漏洞扫描费用

您可以在结算报告中查看此信息。

后续步骤