ランタイム セキュリティ分析情報

1. はじめに

このラボでは、アプリケーションを Cloud Run と GKE クラスタにデプロイし、ソフトウェア デリバリー シールド セキュリティでデプロイに関するセキュリティ分析情報を表示します。

学習内容

  • Artifact Registry セキュリティ分析情報
  • Cloud Run のセキュリティ分析情報
  • GKE Security Posture

2. 設定と要件

Cloud プロジェクトの設定

  1. Google Cloud Console にログインして、プロジェクトを新規作成するか、既存のプロジェクトを再利用します。Gmail アカウントも Google Workspace アカウントもまだお持ちでない場合は、アカウントを作成してください。

b35bf95b8bf3d5d8.png

a99b7ace416376c4.png

bd84a6d3004737c5.png

  • プロジェクト名は、このプロジェクトの参加者に表示される名称です。Google API では使用されない文字列です。この値はいつでも更新できます。
  • プロジェクト ID は、すべての Google Cloud プロジェクトにおいて一意でなければならず、不変です(設定後は変更できません)。Cloud コンソールでは一意の文字列が自動生成されます。通常、それが何であるかは関係ありません。ほとんどの Codelab では、プロジェクト ID を参照する必要があります(通常は PROJECT_ID として識別されます)。生成された ID が気に入らない場合は、別のランダムな ID を生成できます。または、ご自身でお試しになることもできます。このステップを終えた後は変更できず、プロジェクト期間中は維持されます。
  • なお、3 つ目の値は、一部の API で使用される [プロジェクト番号] です。これら 3 つの値について詳しくは、こちらのドキュメントをご覧ください。
  1. 次に、Cloud のリソースや API を使用するために、Cloud コンソールで課金を有効にする必要があります。この Codelab の操作をすべて行って、費用が生じたとしても、少額です。このチュートリアルの終了後に課金が発生しないようにリソースをシャットダウンするには、作成したリソースを削除するか、プロジェクト全体を削除します。Google Cloud の新規ユーザーは、300 米ドル分の無料トライアル プログラムをご利用いただけます。

環境設定

検索バーの右側にあるアイコンをクリックして Cloud Shell をアクティブにします。

ecdc43ada29e91b.png

Cloud Shell から、このラボに必要な API を有効にします。

gcloud services enable run.googleapis.com \
  cloudbuild.googleapis.com \
  artifactregistry.googleapis.com \
  container.googleapis.com \
  containersecurity.googleapis.com

承認するよう求められたら、[承認] をクリックします。] をクリックしてください。

6356559df3eccdda.png

成功すると次のようなメッセージが表示されます。

Operation "operations/acf.p2-327036483151-73d90d00-47ee-447a-b600-a6badf0eceae" finished successfully.

次のコマンドを実行して、GKE クラスタを非同期で作成します。これはこのラボで後ほど使用します。

gcloud beta container clusters create gke-cluster \
    --zone us-central1-a \
    --async

3. 申請の準備

まず、HTTP リクエストに応答する Express ベースのシンプルな Node.js アプリケーションを準備します。

Cloud Shell で、starter-nodejs という名前の新しいディレクトリを作成し、そのディレクトリに移動します。

mkdir starter-nodejs
cd starter-nodejs

次のコマンドを実行して、package.json ファイルを作成します。

cat > ./package.json << EOF
{
  "name": "cloudrun-starter-app",
  "version": "1.0.0",
  "description": "Node.js Starter Application",
  "main": "index.js",
  "scripts": {
    "start": "node index.js"
  },
  "author": "",
  "license": "Apache-2.0",
  "dependencies": {
    "express": "^4.18.2"
  }
}
EOF

上記のファイルには、スクリプトを開始するコマンドと、Express ウェブ アプリケーション フレームワークへの依存関係が含まれています。

次に、同じディレクトリに以下のコマンドを実行して index.js ファイルを作成します。

cat > ./index.js << EOF
const express = require('express');
const app = express();

app.get('/', (req, res) => {
  console.log('Received a request.');
  res.send("Hello Cloud Run!");
});

const port = process.env.PORT || 8080;

app.listen(port, () => {
  console.log('Listening on port', port);
});
EOF

このコードは、PORT 環境変数で定義されたポートをリッスンする基本的なウェブサーバーを作成します。これでアプリは完成しました。このアプリをコンテナ化してデプロイする準備が整いました。

4. Cloud Run アプリケーションをデプロイする

次のコマンドを実行して、アプリケーションをデプロイします。

gcloud run deploy starter-app \
  --source . \
  --region us-central1 \
  --allow-unauthenticated \
  --max-instances=3

Artifact Registry リポジトリの作成を確認します。

Deploying from source requires an Artifact Registry Docker repository to store built containers. A repository named [cloud-run-source-deploy] in region [us-central1] will be created.

Do you want to continue (Y/n)? y

5. Artifact Registry と Cloud Build のセキュリティ分析情報

ビルドが完了するまでに数分かかります。

Cloud Build を開き、最新のビルドのビルド アーティファクトを確認します。

Google Cloud コンソールの Cloud Build UI には、ソフトウェア デリバリー シールドのセキュリティ分析情報パネルがあります。このパネルには、SLSA レベル、依存関係の脆弱性、ビルドの来歴など、ビルドに関連するセキュリティ情報が表示されます。

7d9fd2213f3704c4.png

作成したコンテナ イメージのセキュリティ分析情報を確認します。スキャンされたアーティファクトのリンクをクリックして、Artifact Registry 内のこのイメージの脆弱性の詳細を表示します。

Cloud Shell コンソールに戻り、Cloud Run アプリケーションのデプロイが完了したことを確認します。

Done.
Service [starter-app] revision [starter-app-00001-maw] has been deployed and is serving 100 percent of traffic.
Service URL: https://starter-app-nin5jpgefq-uc.a.run.app

6. Cloud Run のセキュリティ分析情報

Cloud Run にはセキュリティ パネル(プレビュー版)があり、SLSA ビルドレベルのコンプライアンス情報、ビルドの来歴、実行中のサービスで見つかった脆弱性など、ソフトウェア サプライ チェーンのセキュリティ分析情報が表示されます。

Cloud Run を開き、[リビジョン / セキュリティ] タブでセキュリティ分析情報を確認します。

62a9f5d26207e58e.png

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

  • ID と暗号化: デフォルトの Compute Engine サービス アカウントのメールアドレスとデプロイに使用される暗号鍵。
  • SLSA レベル: このビルドは SLSA レベル 3 であり、SLSA 仕様に従ってソフトウェアのビルドプロセスの成熟度レベルを識別します。
  • 脆弱性: アプリケーションの依存関係で見つかった脆弱性。
  • ビルドの詳細: ビルダーやログを表示するためのリンクなど、ビルドの詳細。
  • ビルドの来歴: ビルドの来歴。ビルドに関する検証可能なメタデータのコレクションです。ビルドされたイメージのダイジェスト、入力ソースの場所、ビルド ツールチェーン、ビルドステップ、ビルド期間などの詳細が含まれています。

7. GKE のセキュリティ ポスチャー

GKE はコンテナのセキュリティ対策を評価し、クラスタ設定、ワークロード構成、脆弱性に関するアクティブなガイダンスを提供します。GKE クラスタとワークロードをスキャンして、セキュリティ対策を改善するための実用的な推奨事項を提供するセキュリティ対策ダッシュボード(プレビュー版)が含まれています。

次のステップでは、アプリケーションを GKE クラスタにデプロイし、GKE セキュリティ ポスチャー ダッシュボードでセキュリティ分析情報を確認します。

次のコマンドを実行して、クラスタの準備ができていることを確認します。

gcloud beta container clusters list

出力例:

NAME: gke-cluster
LOCATION: us-central1-a
MASTER_VERSION: 1.24.9-gke.3200
MASTER_IP: 34.29.226.228
MACHINE_TYPE: e2-medium
NODE_VERSION: 1.24.9-gke.3200
NUM_NODES: 3
STATUS: RUNNING

GKE クラスタの認証情報と構成を取得します。

gcloud container clusters get-credentials gke-cluster  \
    --region=us-central1-a

次のコマンドを実行して、前の手順でビルドしたイメージを使用してアプリケーションをデプロイします。

export PROJECT_ID=$(gcloud config get-value project)

kubectl run starter-app \
  --image us-central1-docker.pkg.dev/${PROJECT_ID}/cloud-run-source-deploy/starter-app:latest \
  --port 8080

GKE ワークロードには、攻撃対象領域を制限する、強化された構成が理想的です。クラスタ全体のワークロードの確認では、構成の問題がないか手動で大規模に確認するのが難しい場合があります。セキュリティ ポスチャー ダッシュボードを使用すると、複数のクラスタにわたって実行中のすべてのワークロードの構成を自動的にスキャンし、スコア付きの実用的な結果と独自の推奨事項を返して、セキュリティ ポスチャーを強化できます。

ワークロード構成スキャンを有効にします。

gcloud beta container clusters update gke-cluster \
    --region=us-central1-a \
    --enable-workload-config-audit

ワークロード構成のスキャンに加えて、ワークロードの脆弱性スキャンを有効にして、セキュリティ ポスチャー ダッシュボードで結果を確認することもできます。これは、GKE クラスタとワークロードのセキュリティを強化するための独自の情報と推奨事項を提供する一連の機能です。

GKE は、NIST などの公開 CVE データベースからの脆弱性データを使用して、GKE クラスタで実行されているすべての対象 Pod のコンテナ イメージを自動的にスキャンし、既知の脆弱性がないか確認します。

コンテナ イメージに脆弱性が見つかると、GKE によって重大度が割り当てられ、その結果が Google Cloud コンソールのセキュリティ対策ダッシュボードに表示されます。また、GKE は監査とトレーサビリティのために Cloud Logging にエントリを追加します。

ワークロードの脆弱性スキャンを有効にします。

gcloud beta container clusters update gke-cluster \
    --region=us-central1-a \
    --enable-workload-vulnerability-scanning \
    --async

GKE の [セキュリティ対策] ページを開きます。

ワークロードの監査が完了するまで数分待ってから、結果を確認します。

5b1b8158bc55ce67.png

構成に関する懸念事項と影響を受けるワークロードを確認します。

58e6f4b6d8eaa99a.png

[Security Posture] ダッシュボードを使用する理由

[Security Posture] ダッシュボードは、対象となる GKE クラスタに対して有効にできる基本的なセキュリティ対策です。Google Cloud では、次の理由から、すべてのクラスタでセキュリティ対策ダッシュボードを使用することをおすすめします。

  • 中断を最小限に抑える: 機能によって、実行中のワークロードを妨げられることや中断されることはありません。
  • 実行可能な推奨事項: ある場合は、検出された懸案事項を解決するためのアクション アイテムがセキュリティ対策ダッシュボードに表示されます。これらのアクションには、実行できるコマンド、行う構成変更の例、脆弱性を軽減するためのアドバイスが含まれます。
  • 可視化: [Security Posture] ダッシュボードは、プロジェクト全体のクラスタに影響を与える懸念事項の概要を可視化し、進捗状況と各懸念事項の潜在的な影響を示すチャートとグラフを備えています。
  • 独自の結果: GKE では、Google のセキュリティ チームの専門知識と業界標準に基づいて、検出された懸念事項に重大度が割り当てられます。
  • 監査可能なイベントログ: GKE では、検出されたすべての懸念事項が Logging に追加され、レポート機能とオブザーバビリティが向上します。

8. 完了

これで、この Codelab は終了です。

学習した内容

  • Cloud Run と GKE で実行されているビルド アーティファクトとアプリケーションのセキュリティ分析情報情報

クリーンアップ

このチュートリアルで使用したリソースについて、Google Cloud アカウントに課金されないようにするには、リソースを含むプロジェクトを削除するか、プロジェクトを維持して個々のリソースを削除します。

プロジェクトの削除

課金を停止する最も簡単な方法は、チュートリアル用に作成したプロジェクトを削除することです。

最終更新日: 2023 年 3 月 21 日