服務帳戶

服務帳戶是指與應用程式關聯的帳戶,而非使用者帳戶。如果您要開發應用程式或使用 REST API,可能需要使用服務帳戶驗證 Earth Engine。進一步瞭解如何透過服務帳戶進行驗證

建立服務帳戶

首先,如果您尚未建立 Google Cloud 專案,請先建立一個。

如要管理 Cloud 專案的服務帳戶,請前往 Cloud 主控台選單 (),然後依序選取「IAM 與管理」>「服務帳戶」。(出現提示時,請選擇專案)。

如要建立新的服務帳戶,請點選「+ 建立服務帳戶」連結。

如果您建立了 App Engine 專案,可能已經為該專案建立了預設服務帳戶 (App Engine 預設服務帳戶)。如果您要設定 App Engine 專案,請針對服務帳戶的「角色」,選擇「專案」 >「編輯者」

為服務帳戶建立私密金鑰

建立服務帳戶後,請按一下該帳戶的選單 (),然後依序點選「Create key」(建立金鑰) >「JSON」。下載 JSON 金鑰檔案。

妥善保管金鑰檔案

金鑰檔案是一種特殊檔案,可讓程式代表您的服務帳戶存取 Google API。請確保任何人無法未經授權存取該 API,因為他們可以代您存取 Google API。切勿將私密金鑰儲存在公開位置,例如共用資料夾或來源存放區。如果您不小心遺失私密金鑰,可以輕鬆撤銷服務帳戶的存取權,並使用 Cloud 控制台建立新的服務帳戶。詳情請參閱這份指南

註冊服務帳戶以使用 Earth Engine

所有服務帳戶都是在 Cloud 專案中建立,該專案可能與您用於 App Engine 應用程式或 Cloud VM 的專案相同。請確認雲端專案已註冊,以便存取 Earth Engine,並且專案已啟用 Earth Engine API。專案中具備正確權限的所有服務帳戶都將可存取 Earth Engine,因此不必另外註冊。

請注意,現在無法註冊個別服務帳戶,必須註冊 Cloud 專案本身。

使用含有私密金鑰的服務帳戶

如要使用服務帳戶向 Earth Engine 進行驗證,請按照下列步驟操作:

  1. 為服務帳戶建立並下載 JSON 私密金鑰檔案 (.private-key.json)。
  2. 請在放置 .private-key.json 檔案的任何位置測試下列 Python 程式碼:
    import ee
    service_account = 'my-service-account@...gserviceaccount.com'
    credentials = ee.ServiceAccountCredentials(service_account, '.private-key.json')
    ee.Initialize(credentials)

如果您能夠在沒有錯誤的情況下初始化,表示服務帳戶已可使用。

如果收到 invalid_grant 錯誤,該怎麼辦?

OAuth2 對時鐘偏移非常敏感。如果您確定已正確設定所有項目,且 Google 聯絡人已確認服務帳戶已獲得核准,請檢查電腦的時鐘是否已與網路時間同步。

在 Ubuntu 系統中,呼叫同步電腦時鐘的程式碼如下:

ntpdate ntp.ubuntu.com

如果系統使用 OS X,請依序開啟「系統偏好設定」>「日期和時間」>「日期和時間」 (再次開啟),然後選取「自動設定日期和時間」

使用預設服務帳戶

如果您使用的是預設服務帳戶,則首先需要 修改 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 所需的專案權限,請參閱「存取權控管」頁面。