サプライ チェーン証明書と SLSA を使用して GKE の透明性を高めるための Google Cloud の取り組み
Abdelfettah Sghiouar
Senior Cloud Developer Advocate
Elias Levy
Principal Engineer
※この投稿は米国時間 2025 年 1 月 25 日に、Google Cloud blog に投稿されたものの抄訳です。
お使いの Kubernetes ソフトウェアには何が含まれているでしょうか?デプロイするソフトウェア コンポーネントの出所を理解することは、リスクを軽減し、アプリケーションの信頼性を確保するうえで非常に重要です。そのためには、ソフトウェア サプライ チェーンについて知る必要があります。
Google Cloud は、ソフトウェア サプライ チェーンの透明性を高めるツールと機能の提供に取り組んでいます。そしてこのたび、ソフトウェア アーティファクトのためのサプライ チェーン レベル(SLSA)フレームワークを使用して、Google Kubernetes Engine コンポーネントの完全性を検証できるようになりました。
SLSA は、ソフトウェア コンポーネントの完全性を証明するのに役立つ一連の基準です。Google Cloud は、GKE の Container-Optimized OS(COS)仮想マシン(VM)イメージで使用できる SLSA 検証概要証明書(VSA)を GitHub に公開しました。さらに、Google Compute Engine(GCE)監査ログの機能を強化して VM イメージ ID が含まれるようにし、GKE Kubernetes コントロール プレーン GCE 監査ログをお客様のプロジェクトにルーティングするようにしました。これにより、GKE クラスタで使用される VM イメージを、SLSA VSA を使用して検証できるようになります。
GCE 監査ログに関する改善
Google Compute Engine の監査ログにおいて、インスタンスがイメージから作成される際に、インスタンス作成イベント(挿入、一括挿入、更新オペレーションなど)に関連するレコードに GCE イメージ ID が含まれるようになりました。これにより、各イメージ インスタンスに一意かつ不変の ID が含まれるため、イメージが削除されて同じ名前で再作成された場合でも、各インスタンスの起動に使用された正確なイメージを把握できます。
この ID は、以下で説明する SLSA VSA を使用してイメージの出所と完全性を検証する際に、イメージを一意に識別するために使用されます。これは、セキュリティおよびコンプライアンスを目的とした貴重な監査証跡となります。
metadeta フィールドの usedResources に、attachDisks フィールドを新しく追加しました。このフィールドには、アタッチされたディスクについて、ソースイメージ名、ソースイメージ ID、またブートディスクとして使用されたかどうかが記録されます。この情報は、ログ エクスプローラで次のようなクエリを使用して確認できます。
VM イメージ ID フィールドを持つ GCE インスタンス挿入監査ログレコード
GKE コントロール プレーンの監査ログと完全性ログがプロジェクトに転送されるように
バージョン 1.29 以降を実行する新しい GKE クラスタで、挿入、一括挿入、更新オペレーションのコントロール プレーン GCE 監査ログレコードと、その Shielded VM の完全性ログが、GKE クラスタをホストしているお客様のプロジェクトに転送されるようになりました。
新しい metadata フィールドを確認することで、コントロール プレーン VM インスタンスのログレコードを識別できます。ログを表示するには、ログ エクスプローラで次のようなクエリを使用します。
さらに、転送されるログの metadata に、parentResource マップを新しく追加しました。このマップは、parentResourceType(値は「gke_cluster」)と parentResourceId(値はクラスタのハッシュ)の 2 つのフィールドを持ちます。これにより、1 つのプロジェクトに複数のクラスタが含まれている場合に、転送されたログレコード内の VM がどのクラスタに属しているかがわかります。
この改善により、コントロール プレーン VM の作成に使用された VM イメージと、インスタンスの完全性ステータスを可視化でき、GKE クラスタの監査と保護をより強固に行えるようになります。
KCP VM インスタンスの監査ログレコードをお客様のプロジェクトに転送
SLSA VSA で GKE における VM イメージの検証を強化
Google Kubernetes Engine(GKE)は、GKE の Container-Optimized OS(COS)ベースの VM イメージで使用できる SLSA 検証概要証明書(VSA)を公開することで、サプライ チェーンのセキュリティの大幅な向上を実現しました。この証明書は、Google Cloud の GKE VSA GitHub リポジトリで利用できます。この取り組みにより、使用している GKE VM イメージの完全性と出所に関する暗号的証明が提供され、改ざんされていないこと、および信頼できるソースが出所であることを確認できるようになります。
GKE VM インスタンスで使用されている COS VM イメージ用の VSA を見つけるには、GitHub リポジトリのルートにある次のフォルダを確認します。
-
gke-master-images:78064567238
フォルダ: Kubernetes コントロール プレーン VM イメージ用の VSA が含まれています。 -
gke-node-images:238739202978
フォルダ: ノード VM イメージ用の VSA が含まれています。
監査ログにあるイメージ ID を使用して、該当する VSA を探すことができます。たとえば、gke-node-images:238739202978/gke-12811-gke1044000-cos-109-17800-218-52-c-pre:3031893369549136349.intoto.jsonl
は、ID が 3031893369549136349
のノード VM イメージの VSA です。
slsa-verifier による独自の検証
オープンソースの slsa-verifier ツールを使用して、GKE VM イメージの信頼性を独自に検証できます。このツールを使用すると、GCE イメージの名前および ID、VSA、Google の VSA 公開署名鍵を組み合わせて、GKE VM イメージの完全性を検証できます。
公開鍵はこちらです。
VM イメージを検証するには、次のように slsa-verifier を使用します。
詳しくは次のとおりです。
-
VSA_PATH: VSA ファイルのパス
-
VM_IMAGE_PROJECT_NAME: VM イメージをホストしているプロジェクトの名前(例:
gke-node-images
) -
VM_IMAGE_NAME: イメージの名前(例:
gke-12811-gke1044000-cos-109-17800-218-52-c-pre
) -
VM_IMAGE_ID: イメージ ID(例:
30318933695491363493)
-
KEY_PATH: 保存された公開鍵のパス
次のステップ
これらの改善は、安全かつ透明性のあるソフトウェア サプライ チェーンの構築と管理に必要なツールと機能を提供するための Google Cloud の取り組みを反映したものです。GKE コントロール プレーンの完全性を検証する方法の詳細については、ユーザーガイドをご確認ください。GKE クラスタの保護の詳細については、こちらのドキュメントをご確認ください。
-シニア クラウド デベロッパー アドボケイト Abdelfettah Sghiouar</br />-プリンシパル エンジニア Elias Levy