カスタム サービス アカウントを使用したトレーニング

トレーニング アプリケーションを実行するときに、任意のサービス アカウントを使用するように AI Platform Training を構成できます。カスタム サービス アカウントを使用すると、AI Platform Training がデフォルトで使用するサービス アカウントに必要以上に広範な権限を付与することなく、トレーニング コードがアクセスできる Google Cloud リソースをカスタマイズできます。さらに、カスタム サービス アカウントを使用して、コードへのアクセス権を Secret Manager などの追加の Google Cloud サービスに付与できます。

このガイドでは、他の Google Cloud リソースにアクセスするための AI Platform Training リソースの権限を中心に説明します。AI Platform Training リソース自体にアクセスするために必要な権限については、アクセス制御をご覧ください。

Google が管理するサービス アカウントについて

デフォルトでは、AI Platform Training は Google が管理するサービス アカウントを使用してトレーニング ジョブを実行します。このサービス アカウントは、次の形式のメールアドレスにより識別されます。

service-PROJECT_NUMBER@cloud-ml.google.com.iam.gserviceaccount.com

PROJECT_NUMBER は、Google Cloud プロジェクトのプロジェクト番号で置き換えます。

Google Cloud コンソールまたは Google Cloud CLI を使用して、プロジェクトに対応するサービス アカウントを見つけます。

Google Cloud コンソール

Google Cloud コンソールの [IAM] ページに移動し、[Google 提供のロール付与を含める] を選択して、このセクションで前述したメールアドレス形式に一致するプリンシパルを見つけます。このサービス アカウントは、Google Cloud ML Engine Service Agent という名前でもあります。

[IAM] ページに移動

gcloud

gcloud CLI を初期化したシェル環境で次のコマンドを実行します。

gcloud projects get-iam-policy PROJECT_ID \
  --flatten="bindings[].members" \
  --format="table(bindings.members)" \
  --filter="bindings.role:roles/ml.serviceAgent" \
  | grep serviceAccount:

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

このコマンドの出力は次のようになります。

serviceAccount:GOOGLE_MANAGED_SERVICE_ACCOUNT

GOOGLE_MANAGED_SERVICE_ACCOUNT は、自身のプロジェクトの AI Platform にある Google 管理のサービス アカウントのメールアドレスです。

この Google 管理のサービス アカウントには、ほとんどのトレーニング ジョブに適した権限が含まれています。たとえば、同じ Google Cloud プロジェクト内の Cloud Storage バケットに対する読み取りと書き込みが可能です。

他の権限を使用してトレーニング アプリケーションを実行する必要がある場合は、このサービス アカウントに別の Identity and Access Management(IAM)ロールを割り当てることができます。たとえば、他の Google Cloud プロジェクトの Cloud Storage バケットに対するアクセス権を付与できます。

カスタム サービス アカウントの使用

特定のトレーニング ジョブに対して Google Cloud 権限を付与または制限する場合は、Google が管理するサービス アカウントの代わりに、カスタム サービス アカウントを使用します。

これを行うには、まずカスタム サービス アカウントを設定します。その後、トレーニング ジョブを作成するときに、そのカスタム サービス アカウントを指定します。

カスタム サービス アカウントの設定

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

  1. ユーザーが管理するサービス アカウントを作成します。

  2. 新しいサービス アカウントに IAM ロールを付与することによって、実行に必要な権限がトレーニング アプリケーションに付与されます。

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

トレーニング ジョブ用のカスタム サービス アカウントを指定する

トレーニング アプリケーションを実行するときにカスタム サービス アカウントを使用するように AI Platform Training を構成するには、トレーニング ジョブの作成時trainingInput.serviceAccount フィールドを指定します。

gcloud CLI を使用してトレーニング ジョブを作成する場合は、このフィールドを config.yaml ファイルに指定する必要があります。次に例を示します。

trainingInput:
  serviceAccount: CUSTOM_SERVICE_ACCOUNT

CUSTOM_SERVICE_ACCOUNT は、このガイドの前のセクションで設定したユーザーが管理するサービス アカウントのメールアドレスに置き換えます。

トレーニング コードから Google Cloud サービスにアクセスする

トレーニング コードで、トレーニング ジョブから他の Google Cloud サービスにアクセスする場合は、アプリケーションのデフォルト認証情報(ADC)を使用します。多くの Google Cloud クライアント ライブラリでは、デフォルトで ADC を使用して認証を行います。環境変数を構成する必要はありません。AI Platform Training は、前の手順で指定したカスタム サービス アカウントとして認証するように ADC を自動的に構成します。

ただし、トレーニング コードで Google Cloud クライアント ライブラリを使用すると、デフォルトでは正しい Google Cloud プロジェクトに接続できないことがあります。トレーニング ログで権限エラーが報告される場合は、問題が発生している可能性があります。トレーニング ジョブを作成するときに、AI Platform Training はトレーニング コードを Google Cloud プロジェクトで直接実行しません。AI Platform Training は、Google が管理する別のプロジェクトでコードを実行します。AI Platform Training は、このプロジェクトに関連するオペレーションにのみ、このプロジェクトを使用します。そのため、トレーニング ID の環境からプロジェクト ID を推測しないでください。プロジェクト ID は明示的に指定する必要があります。

トレーニング コード内にプロジェクト ID をハードコードしない場合は、CLOUD_ML_PROJECT_ID 環境変数を使用します。AI Platform Training では、この環境変数をすべてのトレーニング コンテナに設定し、カスタム トレーニングを開始したプロジェクトのプロジェクト番号を格納します。Google Cloud の多くのツールでは、プロジェクト ID を指定する場所でプロジェクト番号を指定できます。

たとえば、Google Cloud プロジェクトで PROJECT_ID の ID を使用してトレーニング ジョブを実行することを検討してください。Google BigQuery 用 Python クライアントを使用して同じプロジェクト内の BigQuery テーブルにアクセスする場合は、トレーニング コードでプロジェクトの推測を試行しないでください。

暗黙的なプロジェクトの選択

from google.cloud import bigquery

client = bigquery.Client()

プロジェクトを明示的に選択するコードを使用します。

明示的なプロジェクトの選択

from google.cloud import bigquery

project_number = os.environ["CLOUD_ML_PROJECT_ID"]

client = bigquery.Client(project=project_number)

次のステップ