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

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

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

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

始める前に

  1. Google Cloud アカウントにログインします。Google Cloud を初めて使用する場合は、アカウントを作成して、実際のシナリオでの Google プロダクトのパフォーマンスを評価してください。新規のお客様には、ワークロードの実行、テスト、デプロイができる無料クレジット $300 分を差し上げます。
  2. Google Cloud CLI をインストールします。
  3. gcloud CLI を初期化するには:

    gcloud init
  4. Google Cloud プロジェクトを作成または選択します

    • Google Cloud プロジェクトを作成します。

      gcloud projects create PROJECT_ID

      PROJECT_ID は、作成する Google Cloud プロジェクトの名前に置き換えます。

    • 作成した Google Cloud プロジェクトを選択します。

      gcloud config set project PROJECT_ID

      PROJECT_ID は、実際の Google Cloud プロジェクト名に置き換えます。

  5. Google Cloud プロジェクトで課金が有効になっていることを確認します

  6. Cloud Build, Artifact Registry, Cloud Deploy, Cloud Run, and Container Scanning API を有効にします。

    gcloud services enable cloudbuild.googleapis.com artifactregistry.googleapis.com clouddeploy.googleapis.com run.googleapis.com containerscanning.googleapis.com
  7. Google Cloud CLI をインストールします。
  8. gcloud CLI を初期化するには:

    gcloud init
  9. Google Cloud プロジェクトを作成または選択します

    • Google Cloud プロジェクトを作成します。

      gcloud projects create PROJECT_ID

      PROJECT_ID は、作成する Google Cloud プロジェクトの名前に置き換えます。

    • 作成した Google Cloud プロジェクトを選択します。

      gcloud config set project PROJECT_ID

      PROJECT_ID は、実際の Google Cloud プロジェクト名に置き換えます。

  10. Google Cloud プロジェクトで課金が有効になっていることを確認します

  11. Cloud Build, Artifact Registry, Cloud Deploy, Cloud Run, and Container Scanning API を有効にします。

    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-central1containers という名前の Docker リポジトリを作成し、「Docker repository」という説明を指定します。

    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 へのデプロイのためにキューに入れられます。デプロイが完了すると、デリバリー パイプラインの可視化にデプロイされたことが表示されます。

    デプロイのスクリーンショット

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

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

    [Cloud Deploy] ページを開く

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

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

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

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

デプロイ用の Software Delivery Shield の [セキュリティ] パネルが表示されます。

セキュリティ パネルのスクリーンショット

このパネルには、次の情報が表示されます。

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

  • 脆弱性: アーティファクトに見つかった脆弱性。イメージ名(java-guestbook-backend)をクリックして、脆弱性スキャンされたアーティファクトを確認します。

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

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

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

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

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

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

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

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

デプロイ用の Software Delivery Shield の [セキュリティ] パネルが表示されます。

セキュリティ パネルのスクリーンショット

このパネルには、次の情報が表示されます。

  • 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
    

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

次のステップ