Cloud Run にデプロイしてセキュリティ分析情報を表示する

このクイックスタートでは、コンテナ イメージを Cloud Run にデプロイし、Google Cloud コンソールの [セキュリティ] タブでデプロイのセキュリティ分析情報を表示する方法について説明します。次のことを行います。

  • Cloud Deploy を使用してイメージを Cloud Run にデプロイします。 Cloud Deploy は、定義したプロモーション シーケンスでの一連のターゲット環境へのアプリケーションの配信を自動化する、Google Cloud サービスです。
  • デプロイに関する次のセキュリティ分析情報を表示します。

    • デプロイメントのID と暗号化情報。
    • ソフトウェア アーティファクトのサプライチェーン レベル(SLSA)のレベル。デプロイの保証レベルを示します。
    • ビルド アーティファクトの脆弱性
    • ビルド アーティファクトのソフトウェア部品構成表(SBOM)
    • ビルドの来歴: ビルドに関する検証可能なメタデータのコレクションです。これには、ビルドされたイメージのダイジェスト、入力ソースの場所、ビルド ツールチェーン、ビルドステップ、ビルド時間などの詳細情報が含まれます。

始める前に

  1. 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.
  2. Install the Google Cloud CLI.
  3. To initialize the gcloud CLI, run the following command:

    gcloud init
  4. 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.

  5. Make sure that billing is enabled for your Google Cloud project.

  6. 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
  7. Install the Google Cloud CLI.
  8. To initialize the gcloud CLI, run the following command:

    gcloud init
  9. 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.

  10. Make sure that billing is enabled for your Google Cloud project.

  11. 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

デフォルトの設定を設定する

  1. プロジェクト ID の環境変数を設定します。

    export PROJECT_ID=$(gcloud config get project)
    
  2. 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 リポジトリを作成する

  1. 場所 us-central1 に「Docker repository」という説明の付いた containers という新しい Docker リポジトリを作成します。

    gcloud artifacts repositories create containers --repository-format=docker \
        --location=us-central1 --description="Docker repository"
    
  2. リポジトリが作成されたことを確認します。

    gcloud artifacts repositories list
    

    表示されたリポジトリのリストに containers が表示されます。

サンプル アプリケーションを準備する

ビルドとデプロイにはサンプルのソースコードが必要です。このセクションでは、Java コードサンプルを含む既存のソース リポジトリのクローンを作成します。

  1. Java コードサンプルを含むリポジトリのクローンを作成します。

    git clone https://github.com/googlecloudplatform/software-delivery-shield-demo-java.git
    cd software-delivery-shield-demo-java/backend
    
  2. cloudrun.clouddeploy.yaml を更新して、PROJECT_ID をプロジェクト ID に置き換えます。

    sed -i "s/PROJECT_ID/${PROJECT_ID}/g" cloudrun.clouddeploy.yaml
    

アプリケーションのビルド

  1. 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 にコンテナをデプロイする

  1. パイプラインとターゲットを Cloud Deploy サービスに登録します。

    gcloud deploy apply --file cloudrun.clouddeploy.yaml
    

    これで、ターゲットを持つパイプラインが用意され、最初のターゲットにアプリケーションをデプロイする準備が整いました。

  2. パイプラインが存在することを確認するには、Google Cloud コンソールの [デリバリー パイプライン] ページに移動します。

    [デリバリー パイプライン] ページを開く

    作成したデリバリー パイプライン cloudrun-guestbook-backend-delivery が表示されます。

  3. [cloudrun-guestbook-backend-delivery] をクリックして進行状況をモニタリングします。[デリバリー パイプラインの詳細] ページが開きます。

  4. 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
    

    新しいリリースが [デリバリー パイプラインの詳細] ページの [リリース] セクションに表示されます。

  5. dev-cluster の [昇格] ボタンが表示されるまで、[デリバリー パイプラインの詳細] ページで [パイプラインの可視化] ビューをモニタリングします。ページの更新が必要になる場合があります。

  6. デリバリー パイプラインの可視化の最初のターゲット cloudrun-dev で、[昇格] をクリックします。

    [リリースの昇格] ダイアログが表示されます。昇格先のターゲットの詳細が表示されます。

  7. [Promote] をクリックします。

    これで、リリースは cloudrun-prod へのデプロイのためにキューに入れられます。デプロイが完了すると、デリバリー パイプラインの可視化にデプロイ済みと表示されます。

    cloudrun-dev から cloudrun-prod への昇格を示すパイプライン

Cloud Deploy でセキュリティ分析情報を表示する

  1. Google Cloud コンソールで Cloud Deploy の [デリバリー パイプライン] ページを開きます。

    [Cloud Deploy] ページを開く

  2. [デリバリー パイプライン] テーブルで、[cloudrun-guestbook-backend-delivery] をクリックします。

  3. [デリバリー パイプラインの詳細] ページで、[test-release-008] をクリックします。

  4. [リリースの詳細] ページで、[アーティファクト] タブをクリックします。

  5. [ビルド アーティファクト] テーブルで、アーティファクト java-guestbook-backend を含む行を見つけ、対応する [セキュリティ分析情報] 列の下にある [表示] をクリックします。

デプロイ用の [セキュリティ] タブが表示されます。

[セキュリティ] タブ

このタブの [セキュリティ分析情報] セクションには、次の情報が表示されます。

  • SLSA レベル: このビルドは SLSA レベル 3 を取得しています。[詳細] リンクをクリックして、このセキュリティ レベルの意味を確認してください。

  • 脆弱性: アーティファクトに見つかった脆弱性。イメージ名([java-guestbook-backend])をクリックすると、脆弱性スキャンが完了したアーティファクトが表示されます。

  • ビルド アーティファクトの依存関係

  • ビルドの詳細: ビルダーやログを表示するためのリンクなど、ビルドの詳細。

Cloud Run でセキュリティ分析情報を表示する

  1. Cloud Run の [サービス] ページを開きます。

    [Cloud Run サービス] ページを開く

  2. Cloud Run の [サービス] テーブルで、[guestbook-backend-prod] をクリックします。

  3. [サービスの詳細] ページで、[リビジョン] をクリックします。

  4. [リビジョン] パネルで、[セキュリティ] をクリックします。

デプロイ用の [セキュリティ] タブが表示されます。

[セキュリティ] タブ

このタブの [セキュリティ分析情報] セクションには、次の情報が表示されます。

  • ID と暗号化: デプロイに使用されるデフォルトの Compute Engine サービス アカウントのメールアドレスと暗号鍵です。

  • SLSA レベル: このビルドは SLSA レベル 3 を取得しています。[詳細] リンクをクリックして、このセキュリティ レベルの意味を確認してください。

  • 脆弱性: アーティファクトに見つかった脆弱性。イメージ名([java-guestbook-backend])をクリックすると、脆弱性スキャンが完了したアーティファクトが表示されます。

  • ビルド アーティファクトの依存関係

  • ビルドの詳細: ビルダーやログを表示するためのリンクなど、ビルドの詳細。

クリーンアップ

このページで使用したリソースについて、Google Cloud アカウントに課金されないようにするには、Google Cloud プロジェクトとそのリソースをまとめて削除してください。

  1. Container Scanning API を無効にします。

    gcloud services disable containerscanning.googleapis.com --force
    
  2. guestbook-backend-dev Cloud Run サービスを削除します。

    gcloud run services delete guestbook-backend-dev --region=us-central1 \
        --project=${PROJECT_ID}
    
  3. guestbook-backend-prod サービスを削除します。

    gcloud run services delete guestbook-backend-prod --region=us-central1 \
        --project=${PROJECT_ID}
    
  4. リリースとロールアウトを含む、デリバリー パイプラインを削除します。

    gcloud deploy delivery-pipelines delete cloudrun-guestbook-backend-delivery \
        --force --region=us-central1 --project=${PROJECT_ID}
    

    このコマンドを実行すると、デリバリー パイプライン自体と、そのパイプライン用に作成されたすべての release リソースと rollout リソースのソフトウェア サプライ チェーン セキュリティが削除されます。

  5. Artifact Registry リポジトリを削除します。

    gcloud artifacts repositories delete containers \
        --location=us-central1 --async
    

これでクイックスタートの演習はすべて終了です。

次のステップ