服務帳戶是與應用程式 (而非使用者) 相關聯的帳戶。如果您要開發應用程式或使用 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 的實際工作環境):
- 為服務帳戶建立私密金鑰:
- 請妥善保護這個金鑰檔案。金鑰檔案是一種特殊檔案,可讓程式代表服務帳戶存取 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 資源檢視者角色。視專案設定而定,您可能也需要為服務帳戶授予服務使用情形個人使用者角色。如要進一步瞭解使用 Earth Engine 時所需的專案權限,請參閱「存取權控管」頁面。
疑難排解
發生錯誤:invalid_grant
OAuth2 對時鐘偏差非常敏感。如果確定所有設定都正確無誤,請檢查電腦時鐘是否已與網路時間同步。
匯出至 Cloud Storage 時出現「Provided scope(s) are not authorized」(提供的範圍未獲授權) 錯誤
如果在 Cloud Run 工作中執行時看到這個錯誤,請勿在建立憑證時設定 scopes 引數 (例如在 google.auth.default(scopes=...) 中)。指定範圍可能會干擾這個環境中的預設權限。