服务账号

服务账号是与应用(而非最终用户)相关联的账号。如果您要开发应用或使用 REST API,则可能需要使用服务账号对 Earth Engine 进行身份验证。 详细了解如何使用服务账号进行身份验证。

创建服务账号

首先,如果您尚未创建 Google Cloud 项目,请先创建。

如需管理 Cloud 项目的服务账号,请前往 Cloud 控制台菜单 (),然后依次选择 IAM 和管理 > 服务账号。(如果出现提示,请选择项目。)

如需创建新的服务账号,请点击 + 创建服务账号链接。

如果您创建了 App Engine 项目,则可能已经为该项目创建了默认服务账号(App Engine 默认服务账号)。如果您要设置 App Engine 项目,请在服务账号的角色下,依次选择 Project > Editor

为服务账号创建私钥

创建服务账号后,点击该账号的菜单 (),然后依次点击创建密钥 > JSON。下载 JSON 密钥文件。

确保密钥文件的安全

密钥文件是一种特殊文件,可让程序代表您的服务账号访问 Google API。确保任何人都无法未经授权访问该密钥,因为他们将能够代表您访问 Google API。切勿将私钥存储在公共位置(例如共享文件夹或源代码库)中。如果您不小心丢失了私钥,可以使用 Cloud 控制台轻松撤消对服务账号的访问权限,并创建新的服务账号。如需了解详情,请参阅此指南

注册服务账号以使用 Earth Engine

所有服务账号均在 Cloud 项目中创建,该项目可能与您的 App Engine 应用或 Cloud VM 所用的项目相同。确保已注册 Cloud 项目以访问 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 服务账号的虚拟机访问权限范围修改为“授予对所有 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 资源查看器角色。根据您的项目配置,您可能还需要向服务账号授予 Service Usage Consumer 角色。如需详细了解使用 Earth Engine 所需的项目权限,请参阅访问权限控制页面。