カスタム サービス アカウントを使用する

このガイドでは、以下のシナリオでカスタム サービス アカウントを使用するように Vertex AI を構成する方法について説明します。

カスタム サービス アカウントを使用する場合

Vertex AI は通常、Google Cloud プロジェクトに作成され、管理されるサービス アカウントの権限で実行されます。特定のコンテキストで Vertex AI に別の Google Cloud サービスへのアクセスを許可する場合、Vertex AI のサービス エージェントに特別なロールを追加できます。

ただし、サービス エージェントの権限をカスタマイズすると、きめ細かいアクセス制御が実施されなくなる可能性があります。一般的なユースケースは次のとおりです。

  • Vertex AI のジョブとモデルに対する権限を減らす。デフォルトの Vertex AI サービス エージェントは BigQuery と Cloud Storage にアクセスできます。
  • 異なるジョブに異なるリソースへのアクセスを許可する。1 つのプロジェクトで複数のユーザーがジョブを起動できるようにしながら、各ユーザーのジョブアクセスを特定の BigQuery テーブルまたは Cloud Storage バケットに制限できます。

たとえば、プロジェクト外の別の Google Cloud リソースにアクセスできるようにするには、実行するカスタム トレーニング ジョブを個別にカスタマイズできます。

さらに、サービス エージェントの権限をカスタマイズしても、カスタム トレーニング済みの Model から予測を提供するコンテナで使用可能な権限は変更されません。

カスタム トレーニングを行うたびにアクセスをカスタマイズする場合や、カスタム トレーニング済みの Model 予測コンテナの権限をカスタマイズする場合は、カスタム サービス アカウントを使用する必要があります。

デフォルトのアクセス権

このセクションでは、カスタム トレーニング コンテナで使用可能なデフォルトのアクセス権と、カスタム トレーニング済みの Model リソースの予測コンテナについて説明します。カスタム サービス アカウントを使用すると、特定の CustomJobHyperparameterTuningJobTrainingPipelineDeployedModel リソースに対するアクセス権をオーバーライドします。

コンテナのトレーニング

CustomJobHyperparameterTuningJob、またはカスタム TrainingPipeline を作成すると、Google Cloud プロジェクトの Vertex AI カスタム コード サービス エージェントを使用してトレーニング コンテナがデフォルトで実行されます。

別の Google Cloud リソースへのアクセス権を付与する方法など、詳細については、AI Platform カスタムコード サービス エージェントをご覧ください。

予測コンテナ

カスタム トレーニング済みの ModelEndpoint にデプロイすると、Vertex AI で管理されているサービス アカウントを使用して予測コンテナが実行されます。このサービス アカウントは、Vertex AI サービス エージェントとは異なります。

予測コンテナがデフォルトで使用するサービス アカウントには、AIP_STORAGE_URI 環境変数に保存された URI で Vertex AI が使用できるモデル アーティファクトの読み取り権限が必要です。サービス アカウントに他の権限を付与しないでください。サービス アカウントの権限はカスタマイズできません。

カスタム サービス アカウントを構成する

以降のセクションでは、Vertex AI で使用するカスタム サービス アカウントの設定方法を説明します。また、サービス アカウントを使用するように CustomJobHyperparameterTuningJobTrainingPipelineDeployedModel を構成する方法についても説明します。Artifact Registry からイメージを pull するようにカスタム サービス アカウントを構成することはできません。Vertex AI は、デフォルトのサービス アカウントを使用してイメージを pull します。

カスタム サービス アカウントを設定する

カスタム サービス アカウントを設定する方法は、次のとおりです。

  1. ユーザーが管理するサービス アカウントを作成します。ユーザー管理のサービス アカウントは、Vertex AI リソースと同じプロジェクトまたは別のプロジェクトに作成できます。

  2. 新しいサービス アカウントに IAM ロールを付与します。これにより、カスタム トレーニングと予測中に Vertex AI が使用する Google Cloud サービスとリソースにアクセスできるようになります。

  3. 省略可: ユーザー管理のサービス アカウントがトレーニング ジョブとは異なるプロジェクトにある場合、トレーニング ジョブに接続できるように、ユーザー管理サービス アカウントを構成します。

  4. 省略可: 予測のユーザー管理のサービス アカウントも使用する場合は、サービス アカウント管理者のロール(roles/iam.serviceAccountAdmin)を以下のとおり、Vertex AI を使用しているプロジェクトの Vertex AI サービス エージェントに付与する必要があります。

    gcloud iam service-accounts add-iam-policy-binding \
      --role=roles/iam.serviceAccountAdmin \
      --member=serviceAccount:AI_PLATFORM_SERVICE_AGENT \
      CUSTOM_SERVICE_ACCOUNT
    

    次のように置き換えます。

    • AI_PLATFORM_SERVICE_AGENT: プロジェクトの Vertex AI サービス エージェントのメールアドレス。次の形式になります。

      service-PROJECT_NUMBER@gcp-sa-aiplatform.iam.gserviceaccount.com

      Vertex AI サービス エージェントを確認するには、Google Cloud コンソールの [IAM] ページに移動します。

      [IAM] に移動

    • CUSTOM_SERVICE_ACCOUNT: このセクションの最初の手順で作成した新しいユーザー管理のサービス アカウントのメールアドレス。

Vertex AI リソースのカスタム サービス アカウントを指定する

リソースに特定のサービス アカウントを使用するように Vertex AI を構成することをサービス アカウントをリソースに「関連付ける」といいます。以降のセクションでは、前のセクションで作成したサービス アカウントを複数の Vertex AI リソースに関連付ける方法について説明します。

カスタム トレーニング リソースとサービス アカウントを関連付ける

カスタム トレーニング中に新しいサービス アカウントを使用するように Vertex AI を構成するには、カスタム トレーニングの開始時に表示される CustomJobSpec メッセージの serviceAccount フィールドに、サービス アカウントのメールアドレスを指定します作成するカスタム トレーニング リソースの種類に応じて、API リクエスト内のこのフィールドの配置が異なります。

  • CustomJob を作成する場合CustomJob.jobSpec.serviceAccount にサービス アカウントのメールアドレスを指定します。

    詳細については、CustomJob の作成をご覧ください。

  • HyperparameterTuningJob を作成する場合HyperparameterTuningJob.trialJobSpec.serviceAccount にサービス アカウントのメールアドレスを指定します。

    詳細については、HyperparameterTuningJob の作成をご覧ください。

  • ハイパーパラメータ調整なしのカスタム TrainingPipeline を作成する場合は、TrainingPipeline.trainingTaskInputs.serviceAccount にサービス アカウントのメールアドレスを指定します。

  • ハイパーパラメータ調整を行うカスタム TrainingPipeline を作成する場合は、TrainingPipeline.trainingTaskInputs.trialJobSpec.serviceAccount にサービス アカウントのメールアドレスを指定します。

オンライン予測を行うコンテナにサービス アカウントを関連付ける

新しいサービス アカウントを使用するようにカスタム トレーニング済みの Model 予測コンテナを構成するには、ModelEndpoint にデプロイするときに、サービス アカウントのメールアドレスを指定します。

コンソール

Google Cloud コンソールを使用したモデルのデプロイの手順を行います。モデル設定を指定するときに、[サービス アカウント] プルダウン リストからサービス アカウントを選択します。

gcloud

Vertex AI API を使用したモデルのデプロイの手順を行います。gcloud ai endpoints deploy-model コマンドを実行するときに、--service-account フラグを使用してサービス アカウントのメールアドレスを指定します。

後述のコマンドデータを使用する前に、次のように置き換えます。

  • ENDPOINT_ID: エンドポイントの ID。
  • LOCATION_ID: Vertex AI を使用するリージョン。
  • MODEL_ID: デプロイするモデルの ID。
  • DEPLOYED_MODEL_NAME: DeployedModel の名前。DeployedModelModel の表示名を使用することもできます。
  • MACHINE_TYPE: 省略可。このデプロイの各ノードで使用するマシンリソース。デフォルトの設定は n1-standard-2 です。マシンタイプの詳細。
  • MIN_REPLICA_COUNT: このデプロイの最小ノード数。ノード数は、予測負荷に応じてノードの最大数まで増減できますが、この数より少なくすることはできません。
  • MAX_REPLICA_COUNT: このデプロイの最大ノード数。ノード数は、予測負荷に応じてこのノード数まで増減に応じて増減できますが、最大値を超えることはできません。
  • CUSTOM_SERVICE_ACCOUNT: サービス アカウントのメールアドレス。たとえば SA_NAME@PROJECT_ID.iam.gserviceaccount.com

gcloud ai endpoints deploy-model コマンドを実行します。

Linux、macOS、Cloud Shell

gcloud ai endpoints deploy-model ENDPOINT_ID \
  --region=LOCATION \
  --model=MODEL_ID \
  --display-name=DEPLOYED_MODEL_NAME \
  --machine-type=MACHINE_TYPE \
  --min-replica-count=MIN_REPLICA_COUNT \
  --max-replica-count=MAX_REPLICA_COUNT \
  --traffic-split=0=100 \
  --service-account=CUSTOM_SERVICE_ACCOUNT

Windows(PowerShell)

gcloud ai endpoints deploy-model ENDPOINT_ID `
  --region=LOCATION `
  --model=MODEL_ID `
  --display-name=DEPLOYED_MODEL_NAME `
  --machine-type=MACHINE_TYPE `
  --min-replica-count=MIN_REPLICA_COUNT `
  --max-replica-count=MAX_REPLICA_COUNT `
  --traffic-split=0=100 `
  --service-account=CUSTOM_SERVICE_ACCOUNT

Windows(cmd.exe)

gcloud ai endpoints deploy-model ENDPOINT_ID ^
  --region=LOCATION ^
  --model=MODEL_ID ^
  --display-name=DEPLOYED_MODEL_NAME ^
  --machine-type=MACHINE_TYPE ^
  --min-replica-count=MIN_REPLICA_COUNT ^
  --max-replica-count=MAX_REPLICA_COUNT ^
  --traffic-split=0=100 ^
  --service-account=CUSTOM_SERVICE_ACCOUNT
 

API

Vertex AI API を使用したモデルのデプロイの手順を行います。projects.locations.endpoints.deployModel リクエストを送信する場合は、deployedModel.serviceAccount フィールドをサービス アカウントのメールアドレスに設定します。

コードから Google Cloud サービスにアクセスする

前のセクションの手順でカスタム サービス アカウントを使用するように Vertex AI を構成すると、トレーニング コンテナまたは予測コンテナは、そのサービス アカウントがアクセス権を持つ Google Cloud サービスとリソースにアクセスできます。

Google Cloud サービスにアクセスするには、トレーニング コードまたは予測提供コードを作成し、アプリケーションのデフォルト認証情報(ADC)を使用して、アクセスするリソースのプロジェクト ID またはプロジェクト番号を明示的に指定します。他の Google Cloud サービスにアクセスするコードを作成する方法も確認してください。

次のステップ

  • Vertex AI のアクセス制御について学習する。
  • 特定の IAM 権限とサポートされるオペレーションについて学習する。