サービス アカウントは、エンドユーザーではなくアプリケーションに関連付けられたアカウントです。アプリを開発している場合や 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 を使用できる本番環境では推奨されません):
-
サービス アカウントの秘密鍵を作成します。
- Cloud Console のサービス アカウント ページに移動します。
- アカウントのメニュー()をクリックし、[鍵を作成] > [JSON] をクリックします。
- JSON キーファイルをダウンロードします。
- 鍵ファイルは安全な場所に保管してください。キーファイルは、プログラムがサービス アカウントに代わって Google API にアクセスできるようにする特別なファイルです。秘密鍵は公開場所に保存しないでください。秘密鍵を紛失した場合は、Cloud コンソールを使用してサービス アカウントへのアクセスを取り消し、新しいサービス アカウントを作成できます。詳細については、サービス アカウント キーの作成と削除をご覧ください。
-
.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 引数を設定しないでください。スコープを指定すると、この環境のデフォルトの権限が妨げられる可能性があります。