Cloud Run にデプロイしてセキュリティ分析情報を表示する
このクイックスタートでは、コンテナ イメージを Cloud Run にデプロイし、Google Cloud コンソールの [セキュリティ] タブでデプロイのセキュリティ分析情報を表示する方法について説明します。次のことを行います。
- Cloud Deploy を使用してイメージを Cloud Run にデプロイします。 Cloud Deploy は、定義したプロモーション シーケンスでの一連のターゲット環境へのアプリケーションの配信を自動化する、Google Cloud サービスです。
デプロイに関する次のセキュリティ分析情報を表示します。
- デプロイメントのID と暗号化情報。
- ソフトウェア アーティファクトのサプライチェーン レベル(SLSA)のレベル。デプロイの保証レベルを示します。
- ビルド アーティファクトの脆弱性。
- ビルド アーティファクトのソフトウェア部品構成表(SBOM)。
- ビルドの来歴: ビルドに関する検証可能なメタデータのコレクションです。これには、ビルドされたイメージのダイジェスト、入力ソースの場所、ビルド ツールチェーン、ビルドステップ、ビルド時間などの詳細情報が含まれます。
始める前に
- Sign in to your Google Cloud account. If you're new to Google Cloud, create an account to evaluate how our products perform in real-world scenarios. New customers also get $300 in free credits to run, test, and deploy workloads.
- Install the Google Cloud CLI.
-
To initialize the gcloud CLI, run the following command:
gcloud init
-
Create or select a Google Cloud project.
-
Create a Google Cloud project:
gcloud projects create PROJECT_ID
Replace
PROJECT_ID
with a name for the Google Cloud project you are creating. -
Select the Google Cloud project that you created:
gcloud config set project PROJECT_ID
Replace
PROJECT_ID
with your Google Cloud project name.
-
-
Make sure that billing is enabled for your Google Cloud project.
-
Enable the Cloud Build, Artifact Registry, Cloud Deploy, Cloud Run, and Container Scanning APIs:
gcloud services enable cloudbuild.googleapis.com
artifactregistry.googleapis.com clouddeploy.googleapis.com run.googleapis.com containerscanning.googleapis.com - Install the Google Cloud CLI.
-
To initialize the gcloud CLI, run the following command:
gcloud init
-
Create or select a Google Cloud project.
-
Create a Google Cloud project:
gcloud projects create PROJECT_ID
Replace
PROJECT_ID
with a name for the Google Cloud project you are creating. -
Select the Google Cloud project that you created:
gcloud config set project PROJECT_ID
Replace
PROJECT_ID
with your Google Cloud project name.
-
-
Make sure that billing is enabled for your Google Cloud project.
-
Enable the Cloud Build, Artifact Registry, Cloud Deploy, Cloud Run, and Container Scanning APIs:
gcloud services enable cloudbuild.googleapis.com
artifactregistry.googleapis.com clouddeploy.googleapis.com run.googleapis.com containerscanning.googleapis.com
デフォルトの設定を設定する
プロジェクト ID の環境変数を設定します。
export PROJECT_ID=$(gcloud config get project)
Cloud Deploy のデフォルト リージョンを設定します。
gcloud config set deploy/region us-central1
アクセスを許可
デフォルトの Compute Engine サービス アカウントに IAM ロールを付与します。これは、Cloud Deploy が Cloud Run にワークロードをデプロイするために必要です。
gcloud projects add-iam-policy-binding $PROJECT_ID \
--member=serviceAccount:$(gcloud projects describe $PROJECT_ID \
--format="value(projectNumber)")-compute@developer.gserviceaccount.com \
--role="roles/clouddeploy.jobRunner"
gcloud iam service-accounts add-iam-policy-binding $(gcloud projects describe $PROJECT_ID \
--format="value(projectNumber)")-compute@developer.gserviceaccount.com \
--member=serviceAccount:$(gcloud projects describe $PROJECT_ID \
--format="value(projectNumber)")-compute@developer.gserviceaccount.com \
--role="roles/iam.serviceAccountUser" \
--project=$PROJECT_ID
gcloud projects add-iam-policy-binding $PROJECT_ID \
--member=serviceAccount:$(gcloud projects describe $PROJECT_ID \
--format="value(projectNumber)")-compute@developer.gserviceaccount.com \
--role="roles/run.developer"
これらのロールのいずれかを追加できない場合は、プロジェクト管理者にお問い合わせください。
Artifact Registry で Docker リポジトリを作成する
場所
us-central1
に「Docker repository」という説明の付いたcontainers
という新しい Docker リポジトリを作成します。gcloud artifacts repositories create containers --repository-format=docker \ --location=us-central1 --description="Docker repository"
リポジトリが作成されたことを確認します。
gcloud artifacts repositories list
表示されたリポジトリのリストに
containers
が表示されます。
サンプル アプリケーションを準備する
ビルドとデプロイにはサンプルのソースコードが必要です。このセクションでは、Java コードサンプルを含む既存のソース リポジトリのクローンを作成します。
Java コードサンプルを含むリポジトリのクローンを作成します。
git clone https://github.com/googlecloudplatform/software-delivery-shield-demo-java.git cd software-delivery-shield-demo-java/backend
cloudrun.clouddeploy.yaml
を更新して、PROJECT_ID
をプロジェクト ID に置き換えます。sed -i "s/PROJECT_ID/${PROJECT_ID}/g" cloudrun.clouddeploy.yaml
アプリケーションのビルド
Cloud Build を使用して Java アプリケーションをビルドし、コンテナ化します。次のコマンドは、Java アプリケーションをビルドしてコンテナ化し、ビルドしたコンテナを Artifact Registry Docker リポジトリに保存します。
gcloud builds submit --config=cloudbuild.yaml --region=us-central1
ビルドが完了すると、次のような成功ステータス メッセージが表示されます。
DONE ----------------------------------------------------------------------------- ID: 3e08565f-7f57-4449-bc68-51c46cf33d03 CREATE_TIME: 2022-09-19T15:41:07+00:00 DURATION: 54S SOURCE: gs://sds-docs-project_cloudbuild/source/1663602066.777581-6ebe4b2d6fd741ffa18936d7f78055e9.tgz IMAGES: us-central1-docker.pkg.dev/sds-docs-project/containers/java-guestbook-backend:quickstart STATUS: SUCCESS
ビルドされたイメージの SBOM を生成する
SBOM は、アプリケーションの完全なインベントリであり、ソフトウェアが依存するパッケージを特定します。その内容には、ベンダーのサードパーティ ソフトウェア、内部アーティファクト、オープンソース ライブラリが含まれます。
前のセクションでビルドしたイメージの SBOM を生成します。
gcloud artifacts sbom export \
--uri=us-central1-docker.pkg.dev/${PROJECT_ID}/containers/java-guestbook-backend:quickstart
Cloud Deploy を使用して Cloud Run にコンテナをデプロイする
パイプラインとターゲットを Cloud Deploy サービスに登録します。
gcloud deploy apply --file cloudrun.clouddeploy.yaml
これで、ターゲットを持つパイプラインが用意され、最初のターゲットにアプリケーションをデプロイする準備が整いました。
パイプラインが存在することを確認するには、Google Cloud コンソールの [デリバリー パイプライン] ページに移動します。
作成したデリバリー パイプライン
cloudrun-guestbook-backend-delivery
が表示されます。[
cloudrun-guestbook-backend-delivery
] をクリックして進行状況をモニタリングします。[デリバリー パイプラインの詳細] ページが開きます。Cloud Shell で、Cloud Deploy 内にリリースを作成します。
gcloud deploy releases create test-release-007 \ --delivery-pipeline=cloudrun-guestbook-backend-delivery \ --skaffold-file=cloudrun.skaffold.yaml \ --images=java-guestbook-backend=us-central1-docker.pkg.dev/${PROJECT_ID}/containers/java-guestbook-backend:quickstart
新しいリリースが [デリバリー パイプラインの詳細] ページの [リリース] セクションに表示されます。
dev-cluster
の [昇格] ボタンが表示されるまで、[デリバリー パイプラインの詳細] ページで [パイプラインの可視化] ビューをモニタリングします。ページの更新が必要になる場合があります。デリバリー パイプラインの可視化の最初のターゲット
cloudrun-dev
で、[昇格] をクリックします。[リリースの昇格] ダイアログが表示されます。昇格先のターゲットの詳細が表示されます。
[Promote] をクリックします。
これで、リリースは
cloudrun-prod
へのデプロイのためにキューに入れられます。デプロイが完了すると、デリバリー パイプラインの可視化にデプロイ済みと表示されます。
Cloud Deploy でセキュリティ分析情報を表示する
Google Cloud コンソールで Cloud Deploy の [デリバリー パイプライン] ページを開きます。
[デリバリー パイプライン] テーブルで、[cloudrun-guestbook-backend-delivery] をクリックします。
[デリバリー パイプラインの詳細] ページで、[test-release-008] をクリックします。
[リリースの詳細] ページで、[アーティファクト] タブをクリックします。
[ビルド アーティファクト] テーブルで、アーティファクト java-guestbook-backend を含む行を見つけ、対応する [セキュリティ分析情報] 列の下にある [表示] をクリックします。
デプロイ用の [セキュリティ] タブが表示されます。
このタブの [セキュリティ分析情報] セクションには、次の情報が表示されます。
SLSA レベル: このビルドは SLSA レベル 3 を取得しています。[詳細] リンクをクリックして、このセキュリティ レベルの意味を確認してください。
脆弱性: アーティファクトに見つかった脆弱性。イメージ名([java-guestbook-backend])をクリックすると、脆弱性スキャンが完了したアーティファクトが表示されます。
ビルド アーティファクトの依存関係。
ビルドの詳細: ビルダーやログを表示するためのリンクなど、ビルドの詳細。
Cloud Run でセキュリティ分析情報を表示する
Cloud Run の [サービス] ページを開きます。
Cloud Run の [サービス] テーブルで、[guestbook-backend-prod] をクリックします。
[サービスの詳細] ページで、[リビジョン] をクリックします。
[リビジョン] パネルで、[セキュリティ] をクリックします。
デプロイ用の [セキュリティ] タブが表示されます。
このタブの [セキュリティ分析情報] セクションには、次の情報が表示されます。
ID と暗号化: デプロイに使用されるデフォルトの Compute Engine サービス アカウントのメールアドレスと暗号鍵です。
SLSA レベル: このビルドは SLSA レベル 3 を取得しています。[詳細] リンクをクリックして、このセキュリティ レベルの意味を確認してください。
脆弱性: アーティファクトに見つかった脆弱性。イメージ名([java-guestbook-backend])をクリックすると、脆弱性スキャンが完了したアーティファクトが表示されます。
ビルド アーティファクトの依存関係。
ビルドの詳細: ビルダーやログを表示するためのリンクなど、ビルドの詳細。
クリーンアップ
このページで使用したリソースについて、Google Cloud アカウントに課金されないようにするには、Google Cloud プロジェクトとそのリソースをまとめて削除してください。
Container Scanning API を無効にします。
gcloud services disable containerscanning.googleapis.com --force
guestbook-backend-dev
Cloud Run サービスを削除します。gcloud run services delete guestbook-backend-dev --region=us-central1 \ --project=${PROJECT_ID}
guestbook-backend-prod
サービスを削除します。gcloud run services delete guestbook-backend-prod --region=us-central1 \ --project=${PROJECT_ID}
リリースとロールアウトを含む、デリバリー パイプラインを削除します。
gcloud deploy delivery-pipelines delete cloudrun-guestbook-backend-delivery \ --force --region=us-central1 --project=${PROJECT_ID}
このコマンドを実行すると、デリバリー パイプライン自体と、そのパイプライン用に作成されたすべての
release
リソースとrollout
リソースのソフトウェア サプライ チェーン セキュリティが削除されます。Artifact Registry リポジトリを削除します。
gcloud artifacts repositories delete containers \ --location=us-central1 --async
これでクイックスタートの演習はすべて終了です。
次のステップ
- Cloud Run のセキュリティ分析情報の詳細を確認する。
- GKE へのデプロイ時にセキュリティの分析情報を表示する方法を確認する
- ビルドのセキュリティ分析情報を表示する方法を学習する。
- ソフトウェア サプライ チェーンのセキュリティの詳細を確認する。