Cloud Build Security Insights を試してみる
こんにちは。
クラウドエースの梅田です。
2022年10月に Cloud Build Security Insights という機能がプレビューとなりました。
本記事では、Supply-chain Levels for Software Artifacts (SLSA) に注目しながら Cloud Build Security Insights で何ができるのかを説明していきたいと思います。
Supply-chain Levels for Software Artifacts (SLSA) とは
そもそも SLSA とは何かを確認したいと思います。
SLSA とはソフトウェアサプライチェーン (ソフトウェアの開発から顧客が使うまでの一連の流れのこと)を保護するためのフレームワークのことです。
SLSA ではソフトウェアサプライチェーンの中で対策すべき箇所を下図のように示しています。
引用元:https://slsa.dev/spec/v0.1/threats
SLSA レベル
SLSA では上記箇所の対策度合いに応じて SLSA レベルというものを定義しています。
SLSA レベルは以下4段階に定義されています。
Level | 説明 |
---|---|
1 | ビルド プロセスは完全にスクリプト化/自動化され、来歴を生成する必要があります。 |
2 | バージョン管理と、認証された来歴を生成するホストされたビルド サービスを使用する必要があります。 |
3 | ソースとビルドのプラットフォームは、ソースの監査可能性と来歴の完全性をそれぞれ保証する特定の基準を満たしています。 |
4 | すべての変更を 2 人でレビューし、密閉された再現可能なビルド プロセスが必要です。 |
引用元:https://slsa.dev/spec/v0.1/levels
Cloud Build Security Insights とは
Cloud Build Security Insights では Cloud Build で生成されたアーティファクトのセキュリティ分析情報を表示することが可能です。
具体的には以下のセキュリティ分析情報を表示してくれます。
項目 | 詳細 |
---|---|
SLSA | SLSA レベルの表示 |
脆弱性 | アーティファクトで見つかった脆弱性の概要と Container Analysis のデータの表示 |
ビルドの詳細 | Build ログへのリンクやビルド時刻の表示 |
ビルドの来歴 | アーティファクトをビルドした際の入力ソースの場所、ビルド引数、ビルド時間などの詳細なメタデータをJSONで表示 |
引用元: https://cloud.google.com/build/docs/view-build-security-insights
Cloud Build Security Insights を触ってみる
以上を踏まえて、早速 Cloud Build Security Insights の機能を確認したいと思います。
サンプルコンテナのイメージを作成し、作成したコンテナのセキュリティ分析情報を確認していきます。
Cloud Build で サンプルコンテナをビルドする
サンプルコンテナは以下リンク先の手順を参考に進めていきます。
前提作業
サンプルコンテナビルドの前提作業として、以下手順により Google Cloud プロジェクト作成、課金の有効化、及び必要な API を有効化します。
- 以下リンク先の「始める前に」を参照して Google Cloud プロジェクトの選択もしくは作成と、課金の有効化、Cloud Build API と Artifact Resistry API を有効化していること。
- 以下リンク先の「脆弱性スキャンを有効にする」を参照して Container Scanning API を有効にする。
サンプルコンテナをビルドする
以下手順によりサンプルコンテナを Cloud Build によりビルドします。
-
コンソール 画面右上のアイコンから Cluod Shell を立ち上げる。
-
quickstart-docker
という名前で新しいディレクトリを作成し、作成したディレクトリに移動する。mkdir quickstart-docker cd quickstart-docker
-
quickstart.sh
を作成する。echo "echo Hello, world! The time is \$(date)." > quickstart.sh
-
quickstart.sh
を実行可能にする。chmod +x quickstart.sh
-
Dockerfile
を作成する。cat << EOS > Dockerfile FROM alpine COPY quickstart.sh / CMD ["/quickstart.sh"] EOS
-
Artifact Resistry で Docker リポジトリを作成する。
gcloud artifacts repositories create quickstart-docker-repo --repository-format=docker \ --location=us-west2 --description="Docker repository"
-
リポジトリが作成されたことを確認する。
gcloud artifacts repositories list
以下のように表示されればOK。
ARTIFACT_REGISTRY REPOSITORY: quickstart-docker-repo FORMAT: DOCKER MODE: STANDARD_REPOSITORY DESCRIPTION: Docker repository LOCATION: us-west2 LABELS: ENCRYPTION: Google-managed key CREATE_TIME: **** UPDATE_TIME: **** SIZE (MB): 0
-
cloudbuild.yaml
を作成する。
この時、ビルドするイメージに来歴メタデータを付与するために、requestedVerifyOption: VERIFIED
オプションを付与する(参考手順には無い手順)。cat << EOS > cloudbuild.yaml steps: - name: 'gcr.io/cloud-builders/docker' args: [ 'build', '-t', 'us-west2-docker.pkg.dev/\$PROJECT_ID/quickstart-docker-repo/quickstart-image:tag1', '.' ] images: - 'us-west2-docker.pkg.dev/\$PROJECT_ID/quickstart-docker-repo/quickstart-image:tag1' options: requestedVerifyOption: VERIFIED EOS
-
ビルドを開始する。
gcloud builds submit --region=us-west2 --config cloudbuild.yaml
ビルドログが表示されるが、最終的に以下のようにSTATUS: SUCCESS
と表示されればOK。
ID: af497ada-25bf-4eeb-b75b-1bd4bc49ddca
CREATE_TIME: 2023-02-03T01:12:21+00:00
DURATION: 18S
SOURCE: gs://ca-umeda-cb-sec-insights-test_cloudbuild/source/1675386738. 141358-06ae1136849141e3a87ea92b95411ee0.tgz
IMAGES: us-west2-docker.pkg.dev/ca-umeda-cb-sec-insights-test/quickstart-docker-repo/ quickstart-image:tag1
STATUS: SUCCESS
出力内容の確認
以下手順によりサンプルコンテナのセキュリティ分析情報を確認します。
-
コンソールの検索から Cloud Build を開く。
-
us-west2
リージョンを選択し、先の手順でビルドしたビルド名を押下する。
-
「ビルドアーティファクト」 を選択し、「表示」を押下する。
-
セキュリティ分析情報が表示されることを確認する。
セキュリティ分析情報結果より SLSA レベル3を満たしていることが確認出来ます。おさらいですが、SLSA レベル3は以下の基準を満たしていることが保証されます。
ソースとビルドのプラットフォームは、ソースの監査可能性と来歴の完全性をそれぞれ保証する特定の基準を満たしています。
また、Cluod Build の公式ドキュメントにも、以下のように SLSA レベル3をサポートしていると明記されています。
Cloud Build は、Software Artifacts のサプライ チェーン レベル(SLSA)レベル 3 の保証を満たすビルド場所の生成をサポートしています。
付録 検証事項
来歴メタデータを付与しないとどうなるか
以下のような来歴メタデータを付与しないビルド設定でビルドを実施した場合どのようになるかを確認したいと思います。
steps:
- name: 'gcr.io/cloud-builders/docker'
args: [ 'build', '-t', 'us-west2-docker.pkg.dev/\$PROJECT_ID/quickstart-docker-repo/quickstart-image:tag1', '.' ]
images:
- 'us-west2-docker.pkg.dev/\$PROJECT_ID/quickstart-docker-repo/quickstart-image:tag1'
結果としては、来歴が不明であるため SLSA レベル3の基準を満たせないため SLSA レベルは不明となることが確認できました。
まとめ
Cloud Build Security Insights 機能により Cloud Build でビルドしたコンテナの SLSA レベルを確認出来ました。
近年 ソフトウェアサプライチェーン攻撃が増加しており、
Google Cloud としても Software Delivery Shield という枠組みでソフトウェアサプライチェーンの保護を強化しています。
この機会にCloud Build Security Insights 機能を試してみてはいかがでしょうか。
参考リンク
Discussion