Cloud Run の脆弱性を評価する

Security Command Center の Google Cloudの脆弱性評価を使用すると、実行中の Cloud Run ワークロードでソフトウェアの脆弱性と公開されたシークレットを継続的に検出できます。

始める前に

Google Cloudの脆弱性評価を使用するには、次の要件を満たす必要があります。

  • Container Scanning API(containerscanning.googleapis.com)を有効にして、Artifact Registry リポジトリをホストするプロジェクトで Artifact Analysis コンテナ スキャンを有効にします。Container Scanning API を有効にすると、Artifact Analysis API(containeranalysis.googleapis.com)も有効になります。

    API を有効にするために必要なロール

    API を有効にするには、serviceusage.services.enable 権限が必要です。プロジェクトを作成した場合は、オーナーロール(roles/owner)を介してこの権限がすでに付与されている可能性があります。それ以外の場合は、Service Usage 管理者ロール(roles/serviceusage.serviceUsageAdmin)を介してこの権限を取得できます。ロールを付与する方法を確認する。

    API の有効化

    Google Cloud の脆弱性評価を有効にしても、イメージ リポジトリで Artifact Analysis のコンテナ スキャンは有効になりません。コンテナ イメージをホストするプロジェクトで Container Scanning API を有効にしないと、 Google Cloud の脆弱性評価で Cloud Run リソースの脆弱性や公開されたシークレットの検出結果を生成できません。

  • 組織またはプロジェクトで Security Command Center を有効にする。Premium ティアと Enterprise ティアでは、 Google Cloud の脆弱性評価がデフォルトで有効になっています。スタンダード ティアでは、組織、フォルダ、プロジェクト レベルで Google Cloud の脆弱性評価を手動で有効にする必要があります。

  • コンテナ イメージを、Cloud Run ワークロードと同じ Google Cloud 組織内の Artifact Registry リポジトリに保存します。検証済みの公開 Google コンテナ ミラーを除き、外部組織のイメージはスキャンされません。

Google Cloud の脆弱性評価の仕組み

Cloud Run ワークロードの脆弱性と公開されたシークレットを評価するために、次の 2 つの機能が連携します。

  • Artifact Analysis コンテナ スキャン: Artifact Registry に保存されているコンテナ イメージをスキャンして、既知の共通脆弱性識別子(CVE)と公開されたシークレットを検出し、スキャン結果を Artifact Analysis のオカレンスとして記録します。
  • Google Cloudの脆弱性評価: Artifact Analysis の脆弱性とシークレットのオカレンスを、アクティブな Cloud Run リソースに関連付けます。

Artifact Registry のコンテナ イメージに関する検出結果を報告する静的コンテナ イメージ スキャンとは異なり、 Google Cloud の脆弱性評価では、実行中の Cloud Run ワークロードに検出結果が直接添付されます。 Google Cloud の脆弱性評価は、次のアクションを実行します。

  • ランタイム メタデータを関連付ける: コンテナ イメージ ダイジェストを、アクティブな Cloud Run サービス、ジョブ、またはワーカープールと照合します。
  • リビジョンとサイドカーを特定する: トラフィックを処理している、またはインスタンスを実行しているアクティブなリビジョンと、脆弱性またはシークレットを含むコンテナまたはマルチコンテナ サイドカーを特定します。
  • 検出結果のライフサイクルを管理する: アクティブなリビジョンまたは実行されたジョブが脆弱なイメージを参照している限り、検出結果 ACTIVE を保持します。パッチを適用したリビジョンをデプロイし、トラフィックまたはインスタンスを脆弱なリビジョンから移行すると、検出結果は自動的に INACTIVE に移行します。

サポートされているリソース

Google Cloud の脆弱性評価では、次の Cloud Run リソースの脆弱性と公開されたシークレットが検出されます。

  • Cloud Run サービス(run.googleapis.com/Service): トラフィックを処理するアクティブなリビジョンをモニタリングします。検出結果には、脆弱なイメージを実行している最大 5 つのアクティブなリビジョンの完全なリソース名が一覧表示されます。
  • Cloud Run ジョブ(run.googleapis.com/Job): 過去 14 日以内に正常に開始された最新の実行で使用されたコンテナ イメージに基づいて、バッチジョブを評価します。実行されたことがないジョブや、初期化中に失敗したジョブはスキャンされません。
  • Cloud Run ワーカープール(run.googleapis.com/WorkerPool): アクティブなリビジョンで実行されているインスタンスをモニタリングします。検出結果には、脆弱なイメージを実行しているすべてのアクティブなリビジョンの完全なリソース名が一覧表示されます。

制限事項

Cloud Run サービスまたはワーカープールが、イメージの pull、新しいリビジョンのデプロイ、インスタンスのコールド スタートなしで 30 日以上実行されると、Artifact Analysis は、新しい pull またはデプロイが発生するまで、新しい CVE のスキャンを一時停止します。既存の ACTIVE の検出結果は ACTIVE のままで、Security Command Center のデータ保持ポリシーの対象となります。

検出結果は、Artifact Analysis がイメージをスキャンまたは再分析した場合にのみ表示されます。以前に Artifact Registry に push されたイメージをデプロイしてもスキャンはトリガーされないため、そのワークロードの検出結果は、次の再分析後(約 4 時間以内)に表示されます。

脆弱性とシークレットの検出結果を表示する

Google Cloud コンソールで Cloud Run の脆弱性とシークレットの検出結果を表示する手順は次のとおりです。

  1. Google Cloud コンソールで、Security Command Center の [検出結果] ページに移動します。

    [検出] に移動

  2. プロジェクト セレクタで、組織、フォルダ、またはプロジェクトを選択します。

  3. [クイック フィルタ] パネルの [リソースタイプ] セクションで、run.googleapis.com/Service、run.googleapis.com/Job、または run.googleapis.com/WorkerPool を選択します。

  4. 検出結果をクリックすると、影響を受けるコンテナ名、イメージ ダイジェスト、アクティブなリビジョン URI などの詳細が表示されます。

脆弱性とシークレットの検出結果を修正する

脆弱性またはシークレットの検出結果を修正する手順は次のとおりです。

  1. アプリケーションの依存関係またはベースイメージを、脆弱性をパッチするバージョンに更新するか、コンテナ イメージのファイル システム、Dockerfile、またはソースコードから公開されたシークレットを削除します。
  2. 新しいコンテナ イメージをビルドして Artifact Registry に push します。
  3. サービスの新しいリビジョンをデプロイするか、ジョブまたはワーカープールを更新します。
  4. トラフィック分割またはインスタンス分割を使用する場合は、すべてのトラフィックをルーティングするか、すべてのインスタンスをパッチが適用されたリビジョンに割り当てます。古いリビジョンがトラフィックを処理しなくなったり、インスタンスを実行しなくなったりすると、 Google Cloud の脆弱性評価は検出結果を INACTIVE としてマークします。

次のステップ