クライアント ライブラリを使用して Earth Engine にリクエストを送信する前に、認証を行い、生成された認証情報を使用して Earth Engine クライアントを初期化する必要があります。
Earth Engine コードエディタと JavaScript
認証と初期化は、Code Editor で自動的に処理されます。Code Editor の右上にあるログインから、Cloud プロジェクト経由でリクエストを転送できます。
JavaScript API を使用している場合(コードエディタの外部で使用している場合)、この例に示すように、ee.data
の認証ヘルパーのいずれか(ee.data.authenticateViaPopup()
など)に続けて ee.initialize()
を使用します。
Python とコマンドライン
Earth Engine Python クライアント ライブラリを使用する前に、認証(ID の確認)を行い、生成された認証情報を使用して Python クライアントを初期化する必要があります。認証フローは Cloud プロジェクトを使用して認証を行い、有料の使用だけでなく、無償(無料、非営利)の使用にも使用されます。認証と初期化を行うには、次のコマンドを実行します。
ee.Authenticate()
ee.Initialize(project='my-project')
最初に、環境に最適な認証モードが選択され、スクリプトのアクセスを確認するように求められます。認証情報がすでに存在する場合は、自動的に再利用されます。ee.Authenticate(force=True)
を実行して新しい認証情報を作成します。
初期化ステップでは、ee.Authenticate()
から作成されたか、Google のデフォルト認証情報として事前に存在する有効な認証情報が存在することを確認します。次に、バックエンド サーバーがサポートするメソッドを使用して Python クライアント ライブラリを初期化します。所有しているプロジェクト、または使用権限があるプロジェクトを指定する必要があります。プロジェクトを登録して Earth Engine API を有効にするには、Cloud プロジェクトの設定をご覧ください。このプロジェクトは、すべての Earth Engine オペレーションの実行に使用されます。
コマンドラインでは、同等の呼び出しは earthengine authenticate
です。認証情報が期限切れまたは無効な場合は、earthengine
authenticate --force
を実行する必要があります。コマンドライン呼び出しは呼び出しごとに初期化されます。--project
引数を使用してプロジェクトを設定できます。
earthengine
set_project {my-project}
を実行して、今後のすべての呼び出しにプロジェクトを構成することもできます。コマンドラインと ee.Initialize()
は、プロジェクトが直接指定されていない場合にこれを使用します。gcloud
による認証を使用している場合(下記を参照)、gcloud auth application-default
set-quota-project {my-project}
で設定されたプロジェクトが最終的なケースとして使用されます。
認証の詳細
Earth Engine 認証フローの目的は、ログイン済みのアカウントからセキュリティ トークンを取得することです。このトークンは保存して、スクリプトにデータへのアクセス権を付与できます。セキュリティ上の理由から、Google の認証システムは、安全にできるシステムにのみこのようなトークンを渡します(下記の技術的な注意事項を参照)。
関連するシステムの種類に敏感であるため、状況に応じてさまざまな方法で対応できます。ほとんどのオプションは、auth_mode
パラメータ(コマンドラインでは ee.Authenticate(auth_mode=...)
または earthengine authenticate --auth_mode=...
)で制御されます。
環境に Google 認証情報がすでに存在する場合は、ee.Authenticate()
を呼び出す必要がない場合があります。Google Cloud VM、App Engine などの環境では、使用可能な「アンビエント認証情報」が提供されます。gcloud auth
application-default login
もこれらの認証情報を作成します。
ただし、互換性を最大限に高めるには、すべてのスクリプトの先頭に ee.Authenticate()
を記述することをおすすめします。auth_mode
パラメータがない場合、ほとんどの状況で動作するように設計されていますが、デフォルト モードが機能しない場合は、以下の詳細を参照してください。デフォルト モードは次のように選択されます。
colab
(Google Colab ノートブックで実行する場合)notebook
(Colab 以外の他の Jupyter ノートブックで実行する場合)localhost
: ウェブブラウザが検出され、gcloud バイナリがインストールされていない場合- そうでない場合は
gcloud
。このモードでは、gcloud をインストールする必要があります。
クイック リファレンス ガイドと表
この意思決定ガイドでは、ee.Authenticate()
によって選択されたデフォルト モードが機能しない場合に利用できるオプションについて説明します。たとえば、他のノートブック環境で実行している場合は、notebook
を明示的に指定する必要があります。
- ローカル環境。
- 「ローカル」とは、目の前のマシンの Python シェルまたは Python ノートブックでコードを実行していることを意味します。より正確には、ウェブブラウザが実行されているマシンと同じマシンでコードを実行していることを意味します。これには、Python とブラウザの両方が同じ(リモート)マシンにあるリモート デスクトップの状況が含まれます。
auth_mode=localhost
を使用するのが最も簡単です。gcloud がインストールされていない場合はデフォルトで選択されますが、スクリプトはローカル環境でのみ機能します。auth_mode=gcloud
とauth_mode=notebook
の両方を使用することもできます。
- リモート環境。
- 「リモート」とは、ブラウザは 1 台(ローカル)のマシンにあるが、コードはリモート ワークステーションやウェブベースのノートブックなど、別の場所で実行されていることを意味します。
- Colab の場合は
auth_mode=colab
を使用します。他の API を呼び出すためにscopes
を設定する必要がある場合は、gcloud
を使用します。 - リモートマシンとローカルマシンの両方に gcloud をインストールできる場合は、
auth_mode=gcloud
を使用します。 - 認証プロジェクトを使用できる場合は(下記を参照)、
auth_mode=notebook
を使用します。 - プロジェクトを使用できない場合、gcloud をインストールできない場合、Colab を使用できない場合、同じマシンでブラウザを使用できない場合:
- プロジェクトの作成について、管理者に再度問い合わせます。例:
- プロジェクトを構成するよう管理者に依頼する(オーナー、編集者、OAuth 構成編集者として)
- または、プロジェクトを作成するための権限を付与するよう管理者に依頼してください。
次の表に、各モードでサポートされる機能の組み合わせを示します。
ローカル用ですか、リモート用ですか? | プロジェクトの必要性 | 設定可能なスコープ | ローカル CLI が必要 | プロジェクト所有者 | |
---|---|---|---|---|---|
localhost |
ローカル | Y | ○ | N | N |
colab |
リモコン | Y | N | N | N |
gcloud |
両方 | Y | ○ | N | N |
notebook |
両方 | Y | ○ | × | Y |
サービス アカウントと Compute Engine の認証情報
ee.Initialize()
は、Earth Engine 認証情報(ee.Authenticate()
が ~/.config/earthengine/credentials
に保存)を使用するか、google.auth.default()
から認証情報を取得します。必要に応じて、credentials=
引数を渡して、これらのデフォルトをバイパスし、他の場所の認証情報を使用するようにできます。
無人実行される Python コードを認証する場合は、ユーザー アカウントではなくサービス アカウントで認証することをおすすめします。Earth Engine でサービス アカウントを使用する方法については、こちらのドキュメントをご覧ください。その他の方法には、Colab auth モジュールの authenticate_service_account
や、サービス アカウントとして認証する Cloud ガイドで説明されているメソッドなどがあります。
コードが Compute Engine VM で実行されている場合、環境にデフォルトのサービス アカウントが作成され、ee.Initialize()
はデフォルトでこのアカウントを使用します。VM の起動に使用した Cloud プロジェクトが Earth Engine(商用または非商用)での使用に登録されていない場合は、Earth Engine を使用するサービス アカウントを登録する必要があります。
モードの詳細
auth_mode=colab。ee.Authenticate()
は、必要に応じて colab.auth.authenticate_user()
を実行して、Colab でサポートされているデフォルトの認証情報を作成または取得します。認証情報は常に cloud-platform
スコープを使用します。また、他の Cloud APIs の呼び出しにも使用できます。
auth_mode=gcloud。これは、認証を gcloud ツールに委任します。これは、デフォルトの Earth Engine スコープ(earthengine、cloud-platform、drive)または scopes
引数のスコープを使用して gcloud auth application-default login
を実行する場合と同じです。gcloud
モードは、ローカルとリモートの両方のケースで機能します。
gcloud モードの手順(ローカルとリモートのケース)
- ローカルマシンに gcloud がインストールされていることを確認します。
- ターミナルで
gcloud help
を実行します。gcloud がインストールされていない場合は、こちらの手順に沿って gcloud をインストールします。
- ターミナルで
- ローカルマシン ターミナル
- ターミナルで
earthengine authenticate
を実行します。 - コマンド出力には、gcloud が認証情報の取得に使用されていることが示されます。
- ブラウザ ウィンドウが開き、アカウント選択ページが表示されます。ブラウザが自動的に開かない場合は、URL をクリックします。
- ターミナルで
- ブラウザ: アカウントの選択
- 認証に使用するアカウントを選択します。
- ブラウザ: 同意画面
- リクエストされたスコープを付与するかどうかを指定してから、[許可] をクリックします。
- ブラウザ: 確認画面
- ブラウザに認証が完了したことを確認するページが表示され、ターミナル ウィンドウの
earthengine authenticate
コマンドに「認可トークンが正常に保存されました」と表示されます。 - リモートの場合、ウェブページに Python 環境に貼り付けるコードが表示されます。
- ブラウザに認証が完了したことを確認するページが表示され、ターミナル ウィンドウの
- 初期化を続行します。
auth_mode=localhost。これは、gcloud がインストールされていない場合に gcloud のようなフローです。gcloud と同じ手順を実行しますが、ローカルケースでのみ機能します。オプションでインターネット ポート番号(localhost:8086
など)を指定することも、localhost:0
を使用してポートを自動選択することもできます。デフォルトのポートは 8085 です。
auth_mode=notebook。これは、ローカル コマンドラインを使用できないリモート環境で動作するように設計された汎用モードです。Notebook Authenticator ページが表示されます。ここで、「認証プロジェクト」を選択または作成する必要があります。詳細とトラブルシューティング ガイドについては、以下をご覧ください。ee.Initialize()
に渡されるプロジェクトは、これに一致する必要はありません。異なるノートブックで異なるプロジェクトで作業しながら、認証に同じプロジェクトを保持できます。プロジェクトを明示的に ee.Initialize()
に渡すことをおすすめしますが、デフォルトでは認証プロジェクトが使用されます。
ノートブック モードの手順
- ブラウザ: Notebook
- ノートブックのコードセルで次のコードを実行して、「ノートブック」モードを使用して認証フローを開始します。
セルの出力にあるリンクをクリックして、新しいタブでノートブック認証システムのページを開きます。import ee ee.Authenticate()
- ノートブックのコードセルで次のコードを実行して、「ノートブック」モードを使用して認証フローを開始します。
- ブラウザ: Notebook Authenticator
- 正しいユーザー アカウントが表示されていることを確認します。
- 認証に使用する Google Cloud プロジェクトを選択します。新しいプロジェクトを作成する必要がある場合は、「ee-xyz」という命名規則を使用することをおすすめします。ここで、xyz は通常の Earth Engine ユーザー名です。(Cloud プロジェクトを選択または作成できない場合は、以下のトラブルシューティングをご覧ください)。
- [トークンを生成] をクリックします。
- ブラウザ: アカウントの選択
- アカウント選択ページが表示されます。ノートブックからアクセス権を付与するユーザー アカウントをクリックします。
- ブラウザ: 警告ページ
- Google がアプリ(ノートブックのコード)を作成していないことを示す警告ページが表示されます。[続行] をクリックして確認します。
- ブラウザ: 同意画面
- リクエストされたスコープを付与するかどうかを指定してから、[続行] をクリックします。
- ブラウザ: 認証コード画面
- 認証確認コードをコピーする
- ブラウザ: Notebook
- ノートブック タブに戻り、確認コードをノートブックのセル出力に貼り付けます。
- セルの出力に「Successfully saved authorization token.」と表示されます。
- 初期化を続行します。
ノートブック モードには、あまり使用されない quiet
パラメータがあります。このパラメータを設定すると、ノートブックは「非インタラクティブ」に実行され、認証コードの入力を求めるプロンプトは表示されず、入力を待機しません。代わりに、コードを保存するために実行するコマンドを指定します。
認証プロジェクト
ノートブック モードで使用される認証プロジェクトのオーナー、編集者、または OAuth 構成編集者である必要があります。多くの場合、特に小規模なチームでは、Notebook Authenticator ページで使用する認証プロジェクトは、他の作業に使用するメイン プロジェクトと同じにできます。
セキュリティ上の懸念のため、認証プロジェクトの「OAuth クライアントの構成」は 1 回限りの設定です。ユーザーまたは他のユーザーが他の理由でプロジェクトに OAuth クライアントを設定している場合、そのクライアントは削除できず、「OAuth2 クライアントの構成が互換性がない」というエラーが表示されます。認証には別のプロジェクトを使用するか、上記の Colab、localhost、gcloud モードを使用する必要があります。
トラブルシューティング
Cloud プロジェクトを作成できない場合はどうすればよいですか?
組織によっては、Cloud プロジェクトを作成できるユーザーを制御しています。プロジェクトの作成時に Notebook Authenticator ページでエラーが発生した場合は、次の方法をお試しください。
- 直接プロジェクトを作成して、必要な権限が付与されているかどうかを確認します。
- プロジェクトを作成できるプロセスについては、組織の管理者にお問い合わせください。
- 組織外のアカウントからプロジェクトを作成し、仕事で使用するアカウントをプロジェクトのオーナーとして追加します。注: 一部の組織では、外部プロジェクトからの OAuth クライアントへのアクセスを禁止するセキュリティ ポリシーが設定されています。
エラー: 「Earth Engine API has not been used in project XXX before or it is disabled」
まず、ee.Initialize()
またはコマンドラインでプロジェクトが構成されていることを確認します(Cloud と Colab が提供するデフォルトのプロジェクトでは、Earth Engine は有効になりません)。次に、プロジェクトで Earth Engine API が
有効になっていることを確認します。
エラー: 「プロジェクトに互換性のない OAuth2 クライアント構成があります」
Cloud プロジェクトで設定できる OAuth2 クライアント構成は 1 つだけです。Cloud プロジェクトに OAuth2 クライアントの構成が設定されているかどうかを確認するには、[認証情報] ページで OAuth 2.0 クライアント ID を確認します。Notebook 認証システムですでに設定されている互換性のある構成を持つ別の Cloud プロジェクトを選択するか、OAuth2 クライアントのない Cloud プロジェクトを選択または作成する必要があります。このプロジェクトは、認証システムによって自動的に構成されます。残念ながら、OAuth システムではユーザーが構成を削除できないため、別のプロジェクトを使用する必要があります。このプロジェクトは、他の Earth Engine 作業に使用されているプロジェクトと同じである必要はありません。このエラーは Colab モードでは発生しません。
エラー: 「gcloud failed. 上記のエラーを確認して、必要に応じて gcloud をインストールしてください。」
このエラーは、gcloud がインストールされていないか、PATH にない場合に発生することがあります。また、ノートブックのコードセル内から ee.Authenticate(auth_mode='gcloud')
を呼び出す場合にも発生することがあります。代わりに ee.Authenticate()
を使用してください。デフォルトでは、ノートブック モードの認証が使用されます。プロジェクトを作成できない場合は、上記の解決策をご覧ください。
gcloud をインストールするローカルマシンにアクセスできない場合はどうすればよいですか?
ローカル ターミナルにアクセスできないウェブ専用環境で作業していて、リモート ターミナルを使用する必要がある場合は、earthengine
authenticate --auth_mode=notebook
コマンドを実行してノートブック モードをトリガーすることで、コマンドライン ツールを初期化できます。
エラー 400: redirect_uri_mismatch
このエラーは、ウェブブラウザにアクセスできないリモートマシンで認証する場合に発生することがあります。コマンドラインから earthengine authenticate
を実行する場合は --quiet
を追加し、Python クライアントを使用している場合は ee.Authenticate(quiet=True)
を追加してみてください。これを行うには、ウェブブラウザにアクセスできるマシンから gcloud
で認証する必要があります。
エラー: 「アプリケーションはローカルのアプリケーションのデフォルト認証情報を使用して認証しています。earthengine.googleapis.com API には割り当てプロジェクトが必要ですが、これはデフォルトで設定されていません。」
このエラーは、Earth Engine がプロジェクト ID を特定できない場合に発生することがあります。Google Cloud のトラブルシューティング オプションが機能しない場合は、earthengine set_project YOUR_PROJECT_ID
または gcloud
auth application-default set-quota-project YOUR_PROJECT_ID
を実行してみてください。
技術的な注意事項
技術的な詳細については、これらのさまざまな認証情報作成メカニズムの必要性は、既知の信頼できる環境に認証情報を渡す必要があることに起因しています。上記のさまざまなケースについて簡単に説明します。
- 以前は、任意の場所に貼り付けることができるトークンを提供する
paste
モードがありましたが、リスクが高すぎると判断され、利用できなくなりました。 colab
:auth.authenticate_user()
では、「Colab」認証クライアント(ノートブック環境自体)と認証情報を共有するよう求められます。これらはgoogle.auth.default()
で使用でき、ee.Initialize()
によって使用されます。localhost
: 認証情報がブラウザからローカルマシンのポートに渡されます。この場合、エンドツーエンドのセキュリティは、ローカルマシンが侵害されていないという事実に依存します。表示される認証クライアントは「Earth Engine Authenticator」です。gcloud
: gcloud リファレンスで説明されている--launch-browser
フローを使用します。リモートマシンの場合は--no-launch-browser
を使用します。使用される認証クライアントは「Google Auth Library」です。notebook
: 作業用に新しい認証クライアントが作成されます。同意ページにメールアドレスが表示されます。このクライアントは「開発」モードに設定されています。これは、古い貼り付けモードのトークンを許可する特殊なケースです。このようなクライアントは多数のユーザーと共有できないため、独自のプロジェクトを使用する必要があります。