AI アプリケーションのインフラストラクチャの保護

1. はじめに

概要

このラボでは、AI 開発環境のインフラストラクチャに対する一般的な脅威を軽減します。この環境のコア コンポーネントを保護するように設計されたセキュリティ管理を実装します。

コンテキスト

あなたは開発チームのセキュリティ チャンピオンであり、一般的な脅威に対する保護と使用時の摩擦の最小化のバランスが取れた環境を構築することを目標としています。

次の表に、緩和策を講じるべき最も重要な脅威を示します。このラボでは、各脅威に次のタスクで対応します。

脅威

緩和策

タスクの対象

悪用されたオープンポートを介したネットワークへの不正な上り(内向き)トラフィック。

プライベート VPC を作成し、パブリック IP アドレスではなく Google Cloud を介してプロキシされた単一ユーザーに Vertex AI のアクセスを制限します。

安全なネットワーク基盤を構成する

権限過多の認証情報を使用して、侵害されたコンピューティング インスタンスから権限を昇格させる。

最小権限のサービス アカウントを作成して Vertex AI インスタンスに割り当てます。

セキュアな Vertex AI Workbench インスタンスをデプロイする

コンピューティング リソースのインスタンスの乗っ取りにより、システムが改ざんされる。

root アクセスを無効にしてセキュアブートを有効にすることで、インスタンスを強化します。

セキュアな Vertex AI Workbench インスタンスをデプロイする

ストレージの構成ミスによるトレーニング データとモデルの偶発的な公開。

バケットに公開アクセスの防止を適用し、バケットレベルの均一なアクセス制御を使用します。

安全な Cloud Storage バケットをデプロイする

データセットとモデル アーティファクトの悪意のある削除または改ざん、偶発的な削除または改ざん。

復元のためにオブジェクトのバージョニングを有効にし、すべてのアクティビティの不変の監査証跡のためにデータアクセス ログを有効にします。

安全な Cloud Storage バケットをデプロイする

クイック リファレンス

このラボでは、次の名前付きリソースを使用します。

コンポーネント

名前

VPC 名

genai-secure-vpc

サブネット名

genai-subnet-us-central1

Cloud Router

genai-router-us-central1

Cloud NAT

genai-nat-us-central1

サービス アカウント

vertex-workbench-sa

Vertex AI インスタンス

secure-genai-instance

ストレージ バケット

secure-genai-artifacts-[PROJECT_ID]

学習内容

このラボでは、次の方法について学びます。

  • プライベート ネットワーキングを備えた安全な VPC をプロビジョニングして、不要なトラフィックを軽減します。
  • ブートキットと権限昇格から Vertex AI Workbench インスタンスを強化します。
  • Cloud Storage バケットを保護して、モニタリングされていないデータ転送と誤って公開されるリスクを軽減します。

2. プロジェクトの設定

Google アカウント

個人の Google アカウントをお持ちでない場合は、Google アカウントを作成する必要があります。

仕事用または学校用アカウントではなく、個人アカウントを使用します。

Google Cloud コンソールにログインする

個人の Google アカウントを使用して Google Cloud コンソールにログインします。

課金を有効にする

5 ドル分の Google Cloud クレジットを利用する(省略可)

このワークショップを実施するには、クレジットが設定された請求先アカウントが必要です。独自の請求を使用する予定の場合は、この手順をスキップできます。

  1. こちらのリンクをクリックし、個人の Google アカウントでログインします。次のような出力が表示されます。クレジットのページはこちらをクリック
  2. [クレジットにアクセスするにはこちらをクリック] ボタンをクリックします。お支払いプロファイルを設定するページが表示されます。お支払い情報の設定ページ
  3. [確認] をクリックします。

これで、Google Cloud Platform 無料トライアルの請求先アカウントに接続されました。

請求の概要のスクリーンショット

個人用の請求先アカウントを設定する

Google Cloud クレジットを使用して課金を設定した場合は、この手順をスキップできます。

個人用の請求先アカウントを設定するには、Cloud コンソールでこちらに移動して課金を有効にします

注意事項:

  • このラボを完了するのにかかる Cloud リソースの費用は 1 米ドル未満です。
  • このラボの最後の手順に沿ってリソースを削除すると、それ以上の料金は発生しません。
  • 新規ユーザーは、300 米ドル分の無料トライアルをご利用いただけます。

プロジェクトの作成(省略可)

このラボで使用する現在のプロジェクトがない場合は、こちらで新しいプロジェクトを作成します。

3. API を有効にする

Cloud Shell を構成する

プロジェクトが正常に作成されたら、次の手順で Cloud Shell を設定します。

Cloud Shell を起動する

shell.cloud.google.com に移動し、承認を求めるポップアップが表示されたら、[承認] をクリックします。

プロジェクト ID を設定する

Cloud Shell ターミナルで次のコマンドを実行して、正しいプロジェクト ID を設定します。<your-project-id> は、上記のプロジェクト作成手順でコピーした実際のプロジェクト ID に置き換えます。

gcloud config set project <your-project-id>

これで、Cloud Shell ターミナルで正しいプロジェクトが選択されていることがわかります。

Vertex AI Workbench と Cloud Storage を有効にする

このラボのサービスを使用するには、Google Cloud プロジェクトで Compute Engine、Vertex AI Workbench、IAM、Cloud Storage の API を有効にする必要があります。

  1. ターミナルで API を有効にします。
gcloud services enable compute.googleapis.com notebooks.googleapis.com aiplatform.googleapis.com iam.googleapis.com storage.googleapis.com

または、コンソールでそれぞれのページに移動して [有効にする] をクリックして、これらの API を有効にすることもできます。

4. 安全なネットワーク基盤を構成する

このタスクでは、すべてのサービスに対して分離されたネットワーク環境を作成します。プライベート ネットワークを使用してデータフローを制御することで、公開リソースと比較してインフラストラクチャの攻撃対象領域を大幅に削減する多層防御を構築できます。この安全なネットワーク基盤は、AI アプリケーションを不正アクセスから保護するために不可欠です。

VPC とサブネットを作成する

このステップでは、Virtual Private Cloud(VPC)とサブネットを設定します。これにより、不正なネットワーク侵入に対する最初の防御線となる分離されたネットワーク環境が作成されます。

  1. Google Cloud コンソールで、[VPC ネットワーク] > [VPC ネットワーク] に移動します。Google Cloud コンソールの上部にある検索バーを使用して「VPC ネットワーク」を検索し、選択します。
  2. [VPC ネットワークを作成] をクリックします。
  3. [名前] に「genai-secure-vpc」と入力します。
  4. [サブネット作成モード] で [カスタム] を選択します。
  5. [新しいサブネット] で、次のプロパティを指定してサブネットを作成します。

    プロパティ

    値(入力または選択)

    名前

    genai-subnet-us-central1

    地域

    us-central1

    IP アドレス範囲

    10.0.1.0/24

    限定公開の Google アクセス

    オン

  6. [作成] をクリックします。

Cloud NAT ゲートウェイを作成する

Cloud NAT ゲートウェイを使用すると、プライベート インスタンスはパブリック IP アドレスなしでアウトバウンド接続(ソフトウェア アップデートなど)を開始できます。つまり、パブリック インターネットからプライベート インスタンスへの接続を開始することはできません。

  1. まず、Cloud Router を作成します。Google Cloud コンソールの上部にある検索バーを使用して「Cloud Router」を検索し、選択します。
  2. [ルーターを作成] をクリックします。
  3. 次の設定で Cloud Router を構成します。

    プロパティ

    値(入力または選択)

    名前

    genai-router-us-central1

    ネットワーク

    genai-secure-vpc(作成した VPC ネットワーク)

    地域

    us-central1

  4. [作成] をクリックします。
  5. 次に、[ネットワーク サービス] > [Cloud NAT] に移動します。Google Cloud コンソールの上部にある検索バーを使用して「Cloud NAT」を検索し、選択します。
  6. [開始] をクリックします。
  7. 次の設定で Cloud NAT ゲートウェイを構成します。

    プロパティ

    値(入力または選択)

    ゲートウェイの名前

    genai-nat-us-central1

    VPC ネットワーク

    genai-secure-vpc(作成した VPC ネットワーク)

    地域

    us-central1

    Cloud Router

    genai-router-us-central1(セットアップしたばかりのルーター)

  8. [作成] をクリックします。

5. 安全な Vertex AI Workbench インスタンスをデプロイする

安全なネットワーク基盤ができたので、安全な VPC 内に強化された Vertex AI Workbench インスタンスをデプロイします。この Workbench インスタンスは開発環境として機能し、AI 開発作業のための安全で分離されたスペースを提供します。前のネットワーク構成により、このインスタンスがパブリック インターネットに直接公開されないようにし、多層防御を構築します。

最小権限のサービス アカウントを作成する

必要な最小限の権限で専用のサービス アカウントを作成すると、最小権限の原則がサポートされます。インスタンスが侵害された場合、この方法では、インスタンスがその機能に明示的に必要なリソースにのみアクセスし、アクションを実行できるようにすることで、「爆発半径」を制限します。

  1. Google Cloud コンソールで、[IAM と管理] > [サービス アカウント] に移動します。Google Cloud コンソールの上部にある検索バーを使用して「サービス アカウント」を検索し、選択します。
  2. [サービス アカウントを作成] をクリックします。
  3. [サービス アカウント名] に「vertex-workbench-sa」と入力します。
  4. [作成して続行] をクリックします。
  5. 次のロールを付与します。
    • Vertex AI User
    • Storage Object Creator
  6. [完了] をクリックします。

Workbench インスタンスを作成する

このステップでは、Vertex AI Workbench インスタンスをデプロイします。このインスタンスは、以前に作成したプライベート VPC 内で実行するように構成されており、パブリック インターネットからさらに分離されています。また、追加のセキュリティ強化対策をインスタンスに直接適用します。

  1. Google Cloud コンソールのナビゲーション メニュー(ハンバーガー メニュー)から、[Vertex AI] > [ワークベンチ] に移動します。Google Cloud コンソールの上部にある検索バーを使用して「ワークベンチ」を検索し、サブタイトルに「Vertex AI」と表示されている結果を選択します。
  2. [Create New] をクリックして、次の構成を行います。

    プロパティ

    値(入力または選択)

    名前

    secure-genai-instance

    地域

    us-central1

  3. [詳細オプション] をクリックします。
  4. [マシンタイプ] をクリックし、次のチェックボックスをオンにします。
    • セキュアブート
    • 仮想トラステッド プラットフォーム モジュール(vTPM)
    • 整合性モニタリング
  5. [ネットワーキング] をクリックして、次の構成を行います。

    プロパティ

    値(入力または選択)

    ネットワーク

    genai-secure-vpc

    サブネットワーク

    genai-subnet-us-central1(10.0.1.0/24)

    外部 IP アドレスを割り当て

    Google Cloud のプロキシ経由でのみこのインスタンスにアクセスするため、選択を解除します。

  6. [IAM とセキュリティ] をクリックして、以下を構成します。

    プロパティ

    値(入力または選択)

    ユーザーのメール

    [単一ユーザー] を選択し、現在 Google Cloud へのログインに使用しているメールアドレスを選択します。

    デフォルトの Compute Engine サービス アカウントを使用する

    チェックボックスをオフにします。

    サービス アカウントのメールアドレス

    最小権限のサービス アカウント用に作成したメールアドレスを入力します([PROJECT_ID] は実際の ID に置き換えます)。vertex-workbench-sa@[PROJECT_ID].iam.gserviceaccount.com

    インスタンスに対するルートアクセス

    チェックボックスをオフにします。

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

Vertex AI インスタンスにアクセスする

Vertex AI Workbench インスタンスがプロビジョニングされたので、安全にアクセスできます。Google Cloud のプロキシを介して接続するため、インスタンスはプライベートのままで、公共のインターネットに公開されません。これにより、望ましくないトラフィックや悪意のあるトラフィックのリスクを軽減できます。

  1. [Vertex AI > ワークベンチ] に移動します。インスタンスのプロビジョニングが完了したばかりの場合は、すでにこのページが表示されている可能性があります。表示されない場合は、Google Cloud コンソールのナビゲーション メニュー(ハンバーガー メニュー)または検索バーを使用して移動します。
  2. リストで secure-genai-instance という名前のインスタンスを探します。
  3. インスタンスの右側にある [JupyterLab を開く] リンクをクリックします。

ブラウザで新しいタブが開き、インスタンスにアクセスできます。Google Cloud を介してアクセスできますが、インスタンスは公共のインターネットに公開されないため、不要なトラフィックや悪意のあるトラフィックのリスクを軽減できます。

6. 安全な Cloud Storage バケットをデプロイする

次に、データセット用の安全な Cloud Storage バケットを作成します。AI トレーニング データ、モデル、アーティファクトが保存される場所です。このバケットに強力なセキュリティ構成を適用することで、機密データの誤った公開を防ぎ、悪意のある削除や改ざん、偶発的な削除や改ざんから保護できます。これにより、貴重な AI アセットの完全性と機密性が確保されます。

バケットを作成して構成する

このステップでは、Cloud Storage バケットを作成し、初期セキュリティ設定を適用します。これらの設定により、公開アクセスの防止が適用され、バケットレベルの均一なアクセス制御が有効になります。これは、データにアクセスできるユーザーを制御するうえで重要です。

  1. Google Cloud コンソールで、[Cloud Storage] > [バケット] に移動します。Google Cloud コンソールの上部にある検索バーを使用して「バケット」を検索し、選択します。
  2. [作成] をクリックします。
  3. [スタートガイド] で、[名前] を secure-genai-artifacts-[PROJECT_ID] に設定します。[PROJECT_ID] は実際の Google Cloud プロジェクト ID に置き換えます。
  4. [データの保存場所の選択] に進み、次の項目を構成します。

    プロパティ

    値(入力または選択)

    ロケーション タイプ

    リージョン

    地域

    us-central1

  5. [データの保存方法を選択する] に進み、デフォルト設定をそのままにします。
  6. [オブジェクトへのアクセスを制御する方法を選択する] に進み、デフォルト設定を維持します。

    プロパティ

    値(入力または選択)

    理由

    公開アクセスの防止

    [公開アクセスの防止を適用する] を選択したままにします。

    公開アクセスの防止は、オブジェクトがインターネットに公開される可能性のある IAM の変更をすべてオーバーライドします。

    アクセス制御

    [均一] を選択したままにします。

    ACL はきめ細かい制御、つまり最小権限の原則に適したオプションのように見えますが、他の IAM 機能と組み合わせると複雑さと予測不可能性が生じます。意図しないデータ漏洩を防ぐための均一なバケットレベルのアクセスのトレードオフとメリットを検討します。

  7. [オブジェクト データを保護する方法を選択する] に進み、デフォルト設定をそのまま使用します。

    プロパティ

    値(入力または選択)

    理由

    削除(復元可能)ポリシー(データ復旧用)

    [削除(復元可能)ポリシー(データ復旧用)] を選択したままにします。

    バケット内のコンテンツが誤って削除された場合や、悪意のあるユーザーによって削除された場合でも、削除(復元可能)を使用すると、保持期間内にコンテンツを復元できます。

    オブジェクトのバージョニング(バージョン管理用)

    [オブジェクトのバージョニング(バージョン管理用)] を選択します。

    オブジェクトのバージョニングを使用すると、攻撃者がエクスプロイト コードを含むファイルで安全なファイルを置き換えるなど、誤って上書きされたり、悪意のある上書きが行われたりした場合に復元できます。

    オブジェクトあたりのバージョン上限数

    3

    これは任意の値ですが、費用が増加する可能性があります。以前のバージョンにロールバックするには、1 より大きい値にする必要があります。攻撃者が複数の上書きを試みる可能性がある場合は、より堅牢なバックアップ戦略のバージョン管理が必要になることがあります。

    非現行バージョンの有効期限

    7

    古いバージョンを保持する期間は 7 日間が推奨されますが、長期保存の場合はこれより長くなることがあります。

  8. [作成] をクリックします。
  9. [公開アクセスの防止] というポップアップが表示されたら、デフォルトのボックス([このバケットに対する公開アクセス禁止を適用する])を選択したまま [確認] をクリックします。

データ保護とロギングを有効にする

データの不変性と監査可能性を確保するには、オブジェクトのバージョニングを有効にして、バケットのデータアクセス ログを構成します。オブジェクトのバージョニングを使用すると、誤って削除されたり、上書きされたりした場合に復元できます。データアクセス ログは、バケット上のすべてのアクティビティの包括的な監査証跡を提供します。これは、セキュリティ モニタリングとコンプライアンスに不可欠です。

  1. Google Cloud コンソールで、[IAM と管理] > [監査ログ] に移動します。Google Cloud コンソールの上部にある検索バーを使用して「監査ログ」を検索し、選択します。
  2. フィルタ検索を使用して Google Cloud Storage を見つけて選択します。
  3. 表示されたパネルで、[データ読み取り] と [データ書き込み] の両方のチェックボックスをオンにします。
  4. [保存] をクリックします。

7. ラボから現実へ

一時的なラボ環境で一連の手順を完了しましたが、適用した原則と構成は、Google Cloud で実際の AI プロジェクトを保護するためのブループリントです。ここでは、学習した内容を実際の作業に活かし、シンプルなラボから本番環境に対応した設定に移行する方法について説明します。

作成したリソース(プライベート VPC、強化された Workbench インスタンス、安全なバケット)は、新しい AI プロジェクトの安全なスターター テンプレートとして使用できます。目標は、自分自身とチームにとって、この安全な基盤をデフォルトの簡単なパスにすることです。

安全なネットワーク: プライベート ワークスペース

設定での使用方法

新しい AI プロジェクト(「customer-churn-prediction」、「image-classification-model」など)がある場合は、このネットワーク設定を複製します。専用 VPC(churn-pred-vpc)を作成するか、共有の事前承認済みネットワークを使用します。これがプロジェクトの分離された「サンドボックス」になります。構成した Vertex AI Workbench などの開発環境は、この保護された空間内に存在します。安全なプロキシ([JupyterLab を開く])を介して接続し、一般公開のインターネットに公開することはありません。

本番環境に接続する

本番環境では、次の点を考慮して、このコンセプトをさらに発展させます。

  • Infrastructure as Code(IaC): Cloud Console を使用する代わりに、TerraformCloud Deployment Manager などのツールを使用してこのネットワークを定義します。これにより、新しいプロジェクトの安全なネットワーク基盤を数分でデプロイし、再現性と監査可能性を確保できます。
  • 共有 VPC: 大規模な組織では、中央のネットワーキング チームが共有 VPC を管理することがよくあります。デベロッパーには、一元管理された安全なネットワーク内の特定のサブネットにインスタンスとサービスを起動する権限が付与されます。原則は同じです。プライベート スペースで運用されますが、より大規模な共有インフラストラクチャの一部となります。
  • VPC Service Controls: セキュリティを最大限に高めるには、この環境全体を VPC Service Controls 境界で囲みます。これは、Cloud Storage などのサービスにアクセスできるのはプライベート ネットワーク境界内の承認済みリソースのみであることを保証することで、データ流出を防ぐ強力な機能です。

強化されたコンピューティング: 安全な開発とトレーニングのハブ

設定での使用方法

secure-genai-instance は、日常的な AI 開発マシンです。JupyterLab インターフェースを使用して、次の操作を行います。

  • ノートブックでモデルコードを記述してテストします。
  • Python ライブラリ(pip install ...)をインストールします。
  • 中小規模のデータセットでテストします。構成したセキュリティ(パブリック IP なし、最小権限のサービス アカウント、ルートアクセスなし、セキュアブート)は、バックグラウンドで透過的に実行されます。インスタンスが一般的な攻撃に対して強化されているため、AI 作業に集中できます。

本番環境に接続する

通常、本番環境で単一の Workbench インスタンスで大規模なトレーニングを実行することはありません。代わりに、次の方法で作業を本番環境に移行できます。

  • ノートブックからパイプラインへ: ノートブックからコードを取得し、スクリプトに形式化します。このスクリプトは、Vertex AI カスタム トレーニング ジョブまたは Vertex AI パイプラインのステップとして実行されます。
  • コンテナ化: トレーニング コードとその依存関係を Docker コンテナにパッケージ化し、Artifact Registry に保存します。これにより、コードは毎回一貫性のある予測可能な環境で実行されます。
  • サービス アカウントが重要: 作成した vertex-workbench-sa サービス アカウントが重要です。本番環境では、自動化された Vertex AI Training ジョブは、この同じ(または類似の)最小権限のサービス アカウントを使用して実行され、自動化されたジョブに必要な権限のみが付与されます。

安全なストレージ: 中央アーティファクト リポジトリ

設定での使用方法

secure-genai-artifacts バケットは、プロジェクトのデータの信頼できる唯一の情報源です。これは初期データセットだけを対象としたものではありません。このバケットは、次のものを保存するために使用します。

  • 元のトレーニング データと前処理されたトレーニング データ。
  • 長いトレーニング実行中のモデル チェックポイント。
  • 最終的なトレーニング済みモデルのアーティファクト(.pkl.pb、または .h5 ファイル)。
  • 評価結果とログ。適用したセキュリティ設定(公開アクセスの防止、バケットレベルの均一なアクセス、バージョニング、監査ロギング)により、このバケットを漏洩や誤削除から保護された中央ストアとして安心して使用できます。

本番環境に接続する

本番環境で原則を管理し、ガバナンスを適用するには、次のことも検討する必要があります。

  • ライフサイクル ポリシー: コストを管理するには、ライフサイクル ポリシーを設定して、古いモデル バージョンやデータセットを低コストのストレージ クラス(Nearline や Coldline など)に自動的に移動するか、一定期間後に削除します。
  • プロジェクト間の権限: 本番環境パイプラインでは、データ エンジニアリング チームが別の Google Cloud プロジェクトからこのバケットにデータを入力することがあります。有効にした均一なバケットレベルのアクセスにより、複雑な(したがって構成ミスが発生しやすい)ACL を使用せずに、これらのプロジェクト間の IAM 権限をシンプルかつ安全に管理できます。

全体像: セキュリティをデフォルトにする

このモデルを採用することで、セキュリティ体制は後付けから基盤へと移行します。あなたは単なるデベロッパーではなく、チームのセキュリティ チャンピオンです。新しいチームメンバーが参加したときに、安全でない一般公開のマシンを割り当てない。安全な事前構成済みの環境へのアクセス権を付与することで、安全な作業方法が最も簡単な方法になります。このアプローチでは、データ漏洩やシステム侵害の一般的な原因を防ぐことでビジネス リスクを直接的に軽減し、チームが自信を持って革新的な強力な AI アプリケーションを構築できるようにします。

8. 完了

おめでとうございます!AI 開発環境用の多層構造の安全なインフラストラクチャを構築して監査しました。「デフォルト拒否」のファイアウォール ポスチャーで安全なネットワーク境界を作成し、強化されたコンピューティング インスタンスをデプロイし、データバケットを保護し、ログを使用してコントロールが意図したとおりに機能していることを確認しました。

内容のまとめ

このラボでは、次のことを行いました。

  • プライベート ネットワーキングを備えた安全な VPC をプロビジョニングして、不要なトラフィックを軽減しました。
  • ブートキットと権限昇格に対して強化された Vertex AI Workbench インスタンスをデプロイしました。
  • Cloud Storage バケットを保護し、監視されていないデータ転送と誤って公開されるリスクを軽減しました。
  • 最小権限のサービス アカウントを実装して、潜在的な「爆発半径」を制限しました。
  • データ保護と不変の監査証跡のために、オブジェクト バージョニングとデータアクセス ログを有効にしました。