認証と初期化

クライアント ライブラリを使用して 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=gcloudauth_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=colabee.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 モードの手順(ローカルとリモートのケース)

  1. ローカルマシンに gcloud がインストールされていることを確認します。
    • ターミナルで gcloud help を実行します。gcloud がインストールされていない場合は、こちらの手順に沿って gcloud をインストールします。
  2. ローカルマシン ターミナル
    • ターミナルで earthengine authenticate を実行します。
    • コマンド出力には、gcloud が認証情報の取得に使用されていることが示されます。
    • ブラウザ ウィンドウが開き、アカウント選択ページが表示されます。ブラウザが自動的に開かない場合は、URL をクリックします。
  3. ブラウザ: アカウントの選択
    • 認証に使用するアカウントを選択します。
  4. ブラウザ: 同意画面
    • リクエストされたスコープを付与するかどうかを指定してから、[許可] をクリックします。
  5. ブラウザ: 確認画面
    • ブラウザに認証が完了したことを確認するページが表示され、ターミナル ウィンドウの earthengine authenticate コマンドに「認可トークンが正常に保存されました」と表示されます。
    • リモートの場合、ウェブページに Python 環境に貼り付けるコードが表示されます。
  6. 初期化を続行します。

auth_mode=localhost。これは、gcloud がインストールされていない場合に gcloud のようなフローです。gcloud と同じ手順を実行しますが、ローカルケースでのみ機能します。オプションでインターネット ポート番号(localhost:8086 など)を指定することも、localhost:0 を使用してポートを自動選択することもできます。デフォルトのポートは 8085 です。

auth_mode=notebook。これは、ローカル コマンドラインを使用できないリモート環境で動作するように設計された汎用モードです。Notebook Authenticator ページが表示されます。ここで、「認証プロジェクト」を選択または作成する必要があります。詳細とトラブルシューティング ガイドについては、以下をご覧ください。ee.Initialize() に渡されるプロジェクトは、これに一致する必要はありません。異なるノートブックで異なるプロジェクトで作業しながら、認証に同じプロジェクトを保持できます。プロジェクトを明示的に ee.Initialize() に渡すことをおすすめしますが、デフォルトでは認証プロジェクトが使用されます。

ノートブック モードの手順

  1. ブラウザ: Notebook
    1. ノートブックのコードセルで次のコードを実行して、「ノートブック」モードを使用して認証フローを開始します。
      import ee
      ee.Authenticate()
      セルの出力にあるリンクをクリックして、新しいタブでノートブック認証システムのページを開きます。
  2. ブラウザ: Notebook Authenticator
    1. 正しいユーザー アカウントが表示されていることを確認します。
    2. 認証に使用する Google Cloud プロジェクトを選択します。新しいプロジェクトを作成する必要がある場合は、「ee-xyz」という命名規則を使用することをおすすめします。ここで、xyz は通常の Earth Engine ユーザー名です。(Cloud プロジェクトを選択または作成できない場合は、以下のトラブルシューティングをご覧ください)。
    3. [トークンを生成] をクリックします。
  3. ブラウザ: アカウントの選択
    • アカウント選択ページが表示されます。ノートブックからアクセス権を付与するユーザー アカウントをクリックします。
  4. ブラウザ: 警告ページ
    • Google がアプリ(ノートブックのコード)を作成していないことを示す警告ページが表示されます。[続行] をクリックして確認します。
  5. ブラウザ: 同意画面
    • リクエストされたスコープを付与するかどうかを指定してから、[続行] をクリックします。
  6. ブラウザ: 認証コード画面
    • 認証確認コードをコピーする
  7. ブラウザ: Notebook
    • ノートブック タブに戻り、確認コードをノートブックのセル出力に貼り付けます。
    • セルの出力に「Successfully saved authorization token.」と表示されます。
  8. 初期化を続行します。

ノートブック モードには、あまり使用されない quiet パラメータがあります。このパラメータを設定すると、ノートブックは「非インタラクティブ」に実行され、認証コードの入力を求めるプロンプトは表示されず、入力を待機しません。代わりに、コードを保存するために実行するコマンドを指定します。

認証プロジェクト

ノートブック モードで使用される認証プロジェクトのオーナー、編集者、または OAuth 構成編集者である必要があります。多くの場合、特に小規模なチームでは、Notebook Authenticator ページで使用する認証プロジェクトは、他の作業に使用するメイン プロジェクトと同じにできます。

セキュリティ上の懸念のため、認証プロジェクトの「OAuth クライアントの構成」は 1 回限りの設定です。ユーザーまたは他のユーザーが他の理由でプロジェクトに OAuth クライアントを設定している場合、そのクライアントは削除できず、「OAuth2 クライアントの構成が互換性がない」というエラーが表示されます。認証には別のプロジェクトを使用するか、上記の Colab、localhost、gcloud モードを使用する必要があります。

トラブルシューティング

Cloud プロジェクトを作成できない場合はどうすればよいですか?

組織によっては、Cloud プロジェクトを作成できるユーザーを制御しています。プロジェクトの作成時に Notebook Authenticator ページでエラーが発生した場合は、次の方法をお試しください。

  1. 直接プロジェクトを作成して、必要な権限が付与されているかどうかを確認します。
  2. プロジェクトを作成できるプロセスについては、組織の管理者にお問い合わせください。
  3. 組織外のアカウントからプロジェクトを作成し、仕事で使用するアカウントをプロジェクトのオーナーとして追加します。注: 一部の組織では、外部プロジェクトからの 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: 作業用に新しい認証クライアントが作成されます。同意ページにメールアドレスが表示されます。このクライアントは「開発」モードに設定されています。これは、古い貼り付けモードのトークンを許可する特殊なケースです。このようなクライアントは多数のユーザーと共有できないため、独自のプロジェクトを使用する必要があります。