服務帳戶

服務帳戶是與應用程式 (而非使用者) 相關聯的帳戶。如果您要開發應用程式或使用 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 控制台的「Service Accounts」(服務帳戶) 頁面
    • 按一下帳戶選單 (),然後依序點選「建立金鑰」 >「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 資源檢視者角色。視專案設定而定,您可能也需要為服務帳戶授予服務使用情形個人使用者角色。如要進一步瞭解使用 Earth Engine 時所需的專案權限,請參閱「存取權控管」頁面。

疑難排解

發生錯誤:invalid_grant

OAuth2 對時鐘偏差非常敏感。如果確定所有設定都正確無誤,請檢查電腦時鐘是否已與網路時間同步。

匯出至 Cloud Storage 時出現「Provided scope(s) are not authorized」(提供的範圍未獲授權) 錯誤

如果在 Cloud Run 工作中執行時看到這個錯誤,請勿在建立憑證時設定 scopes 引數 (例如在 google.auth.default(scopes=...) 中)。指定範圍可能會干擾這個環境中的預設權限。