脆弱性スキャンの費用を管理する

Artifact Analysis の一般提供開始に伴い、脆弱性スキャンは有料サービスになりました。スキャン API を有効にすると、すぐに課金が開始されます。

詳しくは、料金ページをご覧ください。

コストを低く抑えるためのベスト プラクティス

Container Scanning API を有効にすると、push する新しいイメージがすべて自動的にスキャンされます。費用を抑えるには、スキャンしたいコンテナ イメージを別のプロジェクトに分けます。

  • 新しい Google Cloud プロジェクトを設定し、そのプロジェクトで Container Scanning API を有効にします。このプロジェクトでは、Artifact Registry と Container Registry(非推奨)の通常の請求料金が発生します。スキャンする画像をこのプロジェクトに push します。

  • CI/CD パイプラインに次の手順を追加します。

    1. Container Scanning が有効になっている Artifact Registry または Container Registry プロジェクトに対応するタグを追加します。

    2. イメージをプロジェクトに push します。

スキャン費用を見積もる

プロジェクト内のイメージの概算コストを計算するには、期間内にプッシュするイメージの数を見積もり、その数にスキャンあたりの料金を掛けます。これを行うには、Cloud Shell でシェル スクリプトを実行します。

  1. プロジェクトで Cloud Shell を開きます。

    Cloud Shell を開く

  2. エディタを開く アイコンをクリックして、次の内容の新しいファイル 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
    

これは単なる見積もりであり、次のような他の要因によって実際の費用は変わる可能性があります。

  • 同じプロジェクト内の異なるマルチ リージョンに同じイメージを push しても、追加コストは発生しません。

  • 同じイメージを 2 つの異なるプロジェクト内の 2 つの異なるリポジトリに push しても追加費用は発生しません。

現在の脆弱性スキャンの費用を確認する

この情報は、請求レポートで確認できます。

次のステップ