コレクションでコンテンツを整理 必要に応じて、コンテンツの保存と分類を行います。

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

意図的に脆弱性があるコンテナを GKE クラスタにデプロイする方法と、セキュリティ体制ダッシュボードで脆弱性に関する分析情報を取得する方法について説明します。GKE セキュリティ体制ダッシュボードには、既知のオペレーティング システムの脆弱性に関する情報が表示されます。Go または Java パッケージの脆弱性の言語スキャンが必要な場合は、アプリケーションの構築とセキュリティ分析情報の表示をご覧ください。

目標

  • Cloud Build を使用して、コンテナ化されたアプリケーションをビルドし、Artifact Registry に push します。
  • Google Cloud Deploy でデリバリー パイプラインを作成します。
  • アプリケーションをステージング GKE クラスタにデプロイし、本番環境クラスタに昇格させます。
  • Google Cloud コンソールのセキュリティ体制ダッシュボードを使用して、デプロイされたアプリケーションの脆弱性に関する分析情報を表示します。

始める前に

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

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

      gcloud projects create PROJECT_ID
    • 作成した Cloud プロジェクトを選択します。

      gcloud config set project PROJECT_ID
  4. Cloud プロジェクトに対して課金が有効になっていることを確認します。詳しくは、プロジェクトで課金が有効になっているかどうかを確認する方法をご覧ください。

  5. Artifact Registry, Cloud Build, Google Cloud Deploy, Google Kubernetes Engine, Container Security, and Container Analysis API を有効にします。

    gcloud services enable artifactregistry.googleapis.comcloudbuild.googleapis.comclouddeploy.googleapis.comcontainer.googleapis.comcontainersecurity.googleapis.com containeranalysis.googleapis.com
  6. Google Cloud CLI をインストールして初期化します。
  7. Google Cloud プロジェクトを作成または選択します。

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

      gcloud projects create PROJECT_ID
    • 作成した Cloud プロジェクトを選択します。

      gcloud config set project PROJECT_ID
  8. Cloud プロジェクトに対して課金が有効になっていることを確認します。詳しくは、プロジェクトで課金が有効になっているかどうかを確認する方法をご覧ください。

  9. Artifact Registry, Cloud Build, Google Cloud Deploy, Google Kubernetes Engine, Container Security, and Container Analysis API を有効にします。

    gcloud services enable artifactregistry.googleapis.comcloudbuild.googleapis.comclouddeploy.googleapis.comcontainer.googleapis.comcontainersecurity.googleapis.com containeranalysis.googleapis.com

このチュートリアルを終了した後、作成したリソースを削除すると、それ以上の請求は発生しません。詳細については、クリーンアップをご覧ください。

環境を準備する

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

    export PROJECT_ID=$(gcloud config get project)
    
  2. Google Cloud Deploy のデフォルトの Google Cloud リージョンを設定します。

    gcloud config set deploy/region us-central1
    
  3. このタスクのサンプルコードを含む GitHub リポジトリのクローンを作成します。

    git clone https://github.com/googlecloudplatform/software-delivery-shield-demo-java.git
    cd ~/software-delivery-shield-demo-java/backend
    
  4. GKE の IAM サービス アカウントを作成する

    使用するクラスタ

    gcloud iam service-accounts create sds-runtime \
        --display-name="SDS with GKE service account"
    
  5. IAM サービス アカウントに権限を付与します。

    gcloud projects add-iam-policy-binding $PROJECT_ID \
        --member=serviceAccount:sds-runtime@${PROJECT_ID}.iam.gserviceaccount.com \
        --role="roles/container.nodeServiceAccount"
    gcloud projects add-iam-policy-binding $PROJECT_ID \
        --member=serviceAccount:sds-runtime@${PROJECT_ID}.iam.gserviceaccount.com \
        --role="roles/clouddeploy.jobRunner"
    gcloud projects add-iam-policy-binding $PROJECT_ID \
        --member=serviceAccount:sds-runtime@${PROJECT_ID}.iam.gserviceaccount.com \
        --role="roles/container.developer"
    gcloud projects add-iam-policy-binding $PROJECT_ID \
        --member=serviceAccount:sds-runtime@${PROJECT_ID}.iam.gserviceaccount.com \
        --role="roles/artifactregistry.reader"
    
  6. デフォルトの Compute Engine サービス アカウントに GKE クラスタへのアクセス権を付与します。Google Cloud Deploy は、このアクセスを使用して、デリバリー パイプライン内のクラスタにアプリをデプロイします。

    PROJECT_NUMBER="$(gcloud projects describe ${PROJECT_ID} --format='get(projectNumber)')"
    gcloud projects add-iam-policy-binding ${PROJECT_NUMBER} \
        --member=serviceAccount:${PROJECT_NUMBER}-compute@developer.gserviceaccount.com \
        --role=roles/container.developer
    

イメージ用の Artifact Registry リポジトリを作成する

  1. リポジトリを作成します。

    gcloud artifacts repositories create containers \
        --repository-format=docker \
        --location=us-central1 \
        --description="SDS with GKE repository"
    
  2. リポジトリが存在することを確認します。

    gcloud artifacts repositories list \
        --location=us-central1 \
        --filter="REPOSITORY:containers"
    

    作成した containers リポジトリが出力に表示されます。

GKE クラスタを作成する

dev-cluster という名前のステージング クラスタと prod-cluster という名前の本番環境クラスタという 2 つの GKE クラスタを作成し、両方のクラスタで脆弱性スキャンを有効にします。

gcloud beta container clusters create-auto dev-cluster \
    --region=us-central1 \
    --release-channel=rapid \
    --service-account=sds-runtime@${PROJECT_ID}.iam.gserviceaccount.com \
    --enable-workload-vulnerability-scanning
gcloud beta container clusters create-auto prod-cluster \
    --region=us-central1 \
    --release-channel=rapid \
    --service-account=sds-runtime@${PROJECT_ID}.iam.gserviceaccount.com \
    --enable-workload-vulnerability-scanning

クラスタの作成が完了するまでに最大 5 分かかります。また、Google Cloud コンソールを使用して、既存の GKE クラスタを更新して、ワークロードの脆弱性スキャンを有効にすることもできます。

イメージをビルドする

Cloud Build を使用してイメージをビルドして送信します。

gcloud builds submit --region us-central1 --config cloudbuild.yaml

ビルドが完了すると、出力は次のようになります。

DONE
-----------------------------------------------------------------------------
ID: 3e23094f-7f57-4449-bc68-51c37hn34d03
CREATE_TIME: 2022-09-19T15:41:07+00:00
DURATION: 54S
SOURCE: gs://my-project_cloudbuild/source/1663602066.777581-6ebe4b2d6fd741ffa18936d7f.tgz
IMAGES: us-central1-docker.pkg.dev/PROJECT_ID/containers/java-guestbook-backend:quickstart
STATUS: SUCCESS

Google Cloud Deploy を使用してイメージを GKE にデプロイする

  1. プロジェクト ID を使用して、Google Cloud Deploy 構成ファイルを更新します。

    sed -i "s/PROJECT_ID/${PROJECT_ID}/g" clouddeploy.yaml
    
  2. パイプラインとターゲットを登録します。

    gcloud deploy apply --file=clouddeploy.yaml
    
  3. パイプラインが存在することを確認するには、Google Cloud コンソールの [デリバリー パイプライン] ページに移動します。

    [デリバリー パイプライン] に移動

    パイプラインのリストに新しいパイプライン guestbook-app-delivery が表示されます。

  4. 進行状況をモニタリングするパイプラインの名前をクリックします。[デリバリー パイプラインの詳細] ページが開きます。

  5. Google Cloud Deploy で新しいリリースを作成します。

    gcloud deploy releases create guestbook-release-001 \
        --delivery-pipeline=guestbook-app-delivery \
        --images=java-guestbook-backend=us-central1-docker.pkg.dev/${PROJECT_ID}/containers/java-guestbook-backend:quickstart
    

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

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

  7. dev-cluster 可視化で [昇格] をクリックします。

  8. [リリースのプロモーション] ペインで、[昇格] をクリックして、本番環境クラスタへの昇格を確認します。

  9. リリースが成功したことを確認するには、[リリース] セクションを確認します。[最終ロールアウト ステータス] 列に、Successfully deployed to prod-cluster が表示されます。

脆弱性を表示します

このセクションでは、セキュリティ体制ダッシュボードを使用して、OS の脆弱性の分析情報を表示します。ダッシュボードに、実行中のワークロードに存在する脆弱性に関する情報が表示されます。

  1. Google Cloud コンソールの [Security Posture] ページに移動します。

    [Security Posture] に移動

  2. スキャン結果を表示するには、ページを更新してください。最初のスキャンが完了するまでに最大 15 分かかります。

  3. [セキュリティ体制] ページで、[重大度別の脆弱性] セクションを確認します。このセクションでは、デプロイされたワークロードに影響する上位の CVE について説明します。

  4. 詳しくは、[すべての脆弱性の問題を表示] をクリックします。[懸念事項] タブが開き、[脆弱性] 懸念タイプにフィルタが適用されます。以下の表に、各脆弱性とその影響の概要を示します。

  5. 特定の脆弱性の詳細について、表内の懸念名をクリックします。[脆弱性] ペインが開きます。このペインでは、次の操作を実行できます。

    • 影響を受けるバージョン、パッケージ、CVSS スコアなど、CVE の詳細な説明を読む。
    • ドキュメントやパッチのバージョン情報など、リスクを軽減する推奨アクションを確認する。
    • [影響を受けるワークロード] タブで、脆弱性の影響を受ける特定のワークロードを表示する。

クリーンアップ

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

リソースを個別に削除する

  1. Google Cloud Deploy パイプラインを削除します。

    gcloud deploy delivery-pipelines delete guestbook-app-delivery --force
    
  2. GKE クラスタを削除します。

    gcloud container clusters delete dev-cluster \
        --region=us-central1
    gcloud container clusters delete prod-cluster \
        --region=us-central1
    
  3. Artifact Registry リポジトリを削除します。

    gcloud artifacts repositories delete containers \
        --location=us-central1
    
  4. IAM サービス アカウントを削除します。

    gcloud iam service-accounts delete sds-runtime@${PROJECT_ID}.iam.gserviceaccount.com
    

プロジェクトを削除する

  1. Google Cloud コンソールで、[リソースの管理] ページに移動します。

    [リソースの管理] に移動

  2. プロジェクト リストで、削除するプロジェクトを選択し、[削除] をクリックします。
  3. ダイアログでプロジェクト ID を入力し、[シャットダウン] をクリックしてプロジェクトを削除します。

次のステップ