サービス アカウント

サービス アカウントは、エンドユーザーではなくアプリケーションに関連付けられたアカウントです。アプリを開発している場合や REST API を使用している場合は、サービス アカウントを使用して Earth Engine の認証を行う必要があります。サービス アカウントによる認証の詳細

サービス アカウントを作成する

まず、Google Cloud プロジェクトを作成します(まだ作成していない場合)。

Cloud プロジェクトのサービス アカウントを管理するには、Cloud コンソールのメニュー()に移動し、[IAM と管理] > [サービス アカウント] を選択します。(プロンプトが表示されたら、プロジェクトを選択します)。

新しいサービス アカウントを作成するには、[+ サービス アカウントを作成] リンクをクリックします。

App Engine プロジェクトを作成した場合、そのプロジェクトのデフォルトのサービス アカウント(App Engine のデフォルトのサービス アカウント)がすでに存在している場合があります。App Engine プロジェクトを設定する場合は、サービス アカウントの [ロール] で、[プロジェクト] > [編集者] を選択します。

サービス アカウントの秘密鍵を作成する

サービス アカウントを作成したら、そのアカウントのメニュー()をクリックし、[キーを作成] > [JSON] を選択します。JSON キーファイルをダウンロードします。

鍵ファイルを安全に保管する

キーファイルは、プログラムがサービス アカウントに代わって Google API にアクセスできるようにする特別なファイルです。不正なアクセスを防ぐ必要があります。不正なアクセスを許可すると、そのユーザーはお客様に代わって Google API にアクセスできるようになります。秘密鍵は、共有フォルダやソース リポジトリなどの公開されている場所に保存しないでください。秘密鍵を紛失した場合は、Cloud コンソールを使用してサービス アカウントへのアクセス権を取り消し、新しいサービス アカウントを簡単に作成できます。詳しくは、こちらのガイドをご覧ください。

Earth Engine を使用するサービス アカウントを登録する

すべてのサービス アカウントは Cloud プロジェクト内で作成されます。このプロジェクトは、App Engine アプリまたは Cloud VM に使用されているプロジェクトと同じプロジェクトにできます。Earth Engine にアクセスするように Cloud プロジェクトが登録され、プロジェクトで Earth Engine API が有効になっていることを確認します。プロジェクト内のすべてのサービス アカウントに適切な権限が付与されている場合、Earth Engine にアクセスできます。個別に登録する必要はありません。

個々のサービス アカウントの登録はできなくなりました。Cloud プロジェクト自体を登録する必要があります。

秘密鍵が設定されたサービス アカウントを使用する

サービス アカウントを使用して Earth Engine の認証を行うには:

  1. サービス アカウントの JSON 秘密鍵ファイル(.private-key.json)を作成してダウンロードします。
  2. .private-key.json ファイルを配置した場所から、次の Python コードをテストします。
    import ee
    service_account = 'my-service-account@...gserviceaccount.com'
    credentials = ee.ServiceAccountCredentials(service_account, '.private-key.json')
    ee.Initialize(credentials)

エラーなしで初期化できた場合は、サービス アカウントの使用準備が整っています。

invalid_grant エラーが発生した場合はどうすればよいですか?

OAuth2 はクロックのずれに非常に敏感な場合があります。すべての設定が正しく行われており、Google の担当者がサービス アカウントが承認されていることを確認している場合は、パソコンの時計がネットワーク時間と同期されているかどうかを確認します。

Ubuntu システムの場合、パソコンの時計を同期する呼び出しは次のとおりです。

ntpdate ntp.ubuntu.com

OS X を使用しているシステムの場合は、[システム環境設定] > [日付と時刻] > [日付と時刻](もう一度)を開き、[日付と時刻を自動的に設定] を選択します。

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

デフォルトのサービス アカウントを使用している場合は、まず、Compute Engine サービス アカウントの VM のアクセス スコープを [すべての Cloud API に完全アクセス権を許可] に変更する必要があります。(Dataflow または App Engine でデフォルトのサービス アカウントを使用している場合、この手順は必要ありません)。

デフォルトのサービス アカウントを使用して Earth Engine の認証を行うには、次のコードを使用します。

from google.auth import compute_engine
import ee
credentials = compute_engine.Credentials(scopes=['https://www.googleapis.com/auth/earthengine'])
ee.Initialize(credentials)

REST API アクセスを設定する

サービス アカウントが REST API を使用して計算を行う場合は、プロジェクト レベルの権限(具体的には Earth Engine リソース閲覧者ロール)を付与する必要があります。プロジェクトの構成によっては、サービス アカウントにService Usage ユーザーのロールを付与することも必要になる場合があります。Earth Engine の使用に必要なプロジェクト権限の詳細については、アクセス制御のページをご覧ください。