サービス アカウント

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

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

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

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

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

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

Earth Engine を使用するようにサービス アカウントを構成する

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

アプリケーションのデフォルト認証情報を使用して Earth Engine に対する認証を行う

アプリケーションのデフォルト認証情報(ADC)は、秘密鍵を手動で管理せずに、無人環境(Cloud Run や Compute Engine など)で認証を行うための推奨される方法です。

import google.auth
import ee

credentials, project_id = google.auth.default()
ee.Initialize(credentials, project='my-ee-project')

秘密鍵で認証する

アプリケーションでサービス アカウントの秘密鍵を使用して認証する必要がある場合(ADC を使用できる本番環境では推奨されません):

  1. サービス アカウントの秘密鍵を作成します。
    • Cloud Console のサービス アカウント ページに移動します。
    • アカウントのメニュー()をクリックし、[鍵を作成] > [JSON] をクリックします。
    • JSON キーファイルをダウンロードします。
  2. 鍵ファイルは安全な場所に保管してください。キーファイルは、プログラムがサービス アカウントに代わって Google API にアクセスできるようにする特別なファイルです。秘密鍵は公開場所に保存しないでください。秘密鍵を紛失した場合は、Cloud コンソールを使用してサービス アカウントへのアクセスを取り消し、新しいサービス アカウントを作成できます。詳細については、サービス アカウント キーの作成と削除をご覧ください。
  3. .private-key.json ファイルを配置した場所から、次の Python コードをテストします。
    import ee
    service_account = 'my-service-account@...gserviceaccount.com'
    credentials = ee.ServiceAccountCredentials(service_account, '.private-key.json')
    ee.Initialize(credentials)

エラーなしで初期化できれば、サービス アカウントを使用する準備が整っています。

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

デフォルトのサービス アカウントを使用している場合は、まず 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 Consumer ロールを付与する必要がある場合もあります。Earth Engine の使用に必要なプロジェクト権限の詳細については、アクセス制御のページをご覧ください。

トラブルシューティング

エラー: invalid_grant

OAuth2 はクロック スキューに非常に敏感になる可能性があります。すべて正しく設定されていることを確認したら、パソコンの時計がネットワーク時刻と同期されているかどうかを確認します。

Cloud Storage にエクスポートするときに「指定されたスコープは承認されていません」というエラーが発生する

Cloud Run タスクで実行中にこのエラーが表示された場合は、認証情報を作成するとき(google.auth.default(scopes=...) など)に scopes 引数を設定しないでください。スコープを指定すると、この環境のデフォルトの権限が妨げられる可能性があります。