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

カスタムコードを実行して予測に対応する際、選択したサービス アカウントを使用するように、AI Platform Prediction を構成できます。具体的には、次のいずれかを行う際に、カスタム サービス アカウントを指定できます。

カスタム サービス アカウントを使用すると、AI Platform Prediction によってデフォルトで使用されるサービス アカウントに対して過剰に広範な権限を付与せずに、カスタム サービス コードでアクセスできる Google Cloud リソースをカスタマイズできます。

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

サービス エージェントについて

デフォルトでは、AI Platform Prediction はサービス エージェントを使用して、カスタム コンテナを使用しないモデル バージョンからオンライン予測を提供します。このサービス エージェントは、次の形式のメールアドレスにより識別されます。

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 Cloud プロジェクト内の Cloud Storage バケットからの読み取りなどが可能です。

カスタム権限ルーチンの実行に追加の権限が必要な場合は、このサービス アカウントに Identity and Access Management(IAM)のロールを割り当てることができます。たとえば、他の Google Cloud プロジェクトの Cloud Storage バケットに対するアクセス権を付与できます。

カスタム コンテナで使用されるデフォルトのサービス アカウント

モデル バージョンがカスタム コンテナを使用している場合、デフォルトでは、AI Platform サービス エージェントを使用してコンテナが実行されることはありません。代わりに、AI Platform Prediction が管理するサービス アカウントを使用して実行されます。このサービス アカウントには、AIP_STORAGE_URI 環境変数に保存された URI で AI Platform Prediction が使用できるモデル アーティファクトの読み取り権限があります。

カスタム コンテナ内でデフォルトで使用される、このサービス アカウントの権限は、カスタマイズできません。カスタム コンテナで使用可能な権限をカスタマイズする場合は、以下のセクションをお読みになり、モデル バージョンと一緒にカスタム サービス アカウントを使用してください。

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

特定のモデル バージョンに対して Google Cloud 権限を付与または制限する場合は、サービス エージェントの代わりにカスタム サービス アカウントを使用します。

これを行うには、まずカスタム サービス アカウントを設定します。次に、モデル バージョンの作成時にカスタム サービス アカウントを指定します。

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

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

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

  2. 実行する際に必要な権限を予測サービスのコードに付与するために、新しいサービス アカウントに IAM ロールを付与します。

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

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

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

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

モデル バージョンのカスタム サービス アカウントを指定する

予測サービスのコードにカスタム サービス アカウントへのアクセス権を与えるには、モデル バージョンの作成時に serviceAccount フィールドを指定します。そのモデル バージョンを取り消すには、カスタム コンテナカスタム予測ルーチンのいずれかを使用する必要があります。

gcloud CLI を使用してモデル バージョンを作成する場合は、gcloud beta コンポーネントで --service-account フラグを使用できます。次に例を示します。

gcloud beta ai-platform versions create VERSION \
  --service-account CUSTOM_SERVICE_ACCOUNT \
  ...

以下を置き換えます。

次のステップ