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

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 Console で、または gcloud コマンドライン ツールを使用して、プロジェクトに対応するサービス アカウントを探します。

Cloud Console

Cloud Console の [IAM] ページに移動し、このセクションで前述したメールアドレス形式と一致するメンバーを見つけます。このサービス アカウントは、Google Cloud ML Engine Service Agent という名前でもあります。

[IAM] ページに移動

gcloud

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

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 ロールを付与することによって、実行するために必要な権限がトレーニング アプリケーションに付与されます。

  1. プロジェクトの AI Platform の Google が管理するサービス アカウントに、新しいカスタム サービス アカウントのサービス アカウント管理者ロール(roles/iam.serviceAccountAdmin)を付与します。そうするには、gcloud ツールを使用して次のコマンドを実行します。

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

    このコマンドで、プレースホルダは次のように置き換えます。

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

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

gcloud ツールを使用してトレーニング ジョブを作成する場合は、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 を明示的に指定してください。

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

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

from google.cloud import bigquery

client = bigquery.Client()

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

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

from google.cloud import bigquery

client = bigquery.Client(project=PROJECT_ID)

次のステップ