服务账号

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

创建服务账号

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

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

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

如果您创建了 App Engine 项目,则该项目可能已有默认服务账号(App Engine 默认服务账号 )。如果您要设置 App Engine 项目,请为服务账号 角色 选择项目 > 编辑者

配置服务账号以使用 Earth Engine

所有服务账号都在云项目中创建,该项目可能与您的 App Engine 应用或 Cloud 虚拟机所用的项目相同。确保 云项目已注册 以访问 Earth Engine,并且已在该项目中启用 Earth Engine API 。项目中具有 正确权限的所有服务账号都将有权访问 Earth Engine。

使用应用默认凭据向 Earth Engine 进行身份验证

建议在无人值守环境(如 Cloud Run 或 Compute Engine)中使用应用默认凭证 (ADC) 进行身份验证,而无需手动管理私钥。

import google.auth
import ee

credentials, project_id = google.auth.default()
ee.Initialize(credentials, project='my-ee-project')

使用私钥进行身份验证

如果您的应用需要使用服务账号私钥进行身份验证(不建议 在可以使用 ADC 的生产环境中使用):

  1. 为服务账号创建私钥:
    • 在 Cloud 控制台中,转到 服务账号页面
    • 点击账号对应的菜单 (),然后依次点击创建密钥 > 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 服务账号的虚拟机访问权限范围修改为“授予对所有 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 Resource Viewer 角色。根据您的项目配置,您可能还需要为服务账号授予 Service Usage Consumer 角色。如需详细了解使用 Earth Engine 所需的项目权限,请参阅访问权限控制页面。 如需详细了解使用 Earth Engine 所需的项目权限,请参阅访问权限控制页面。

问题排查

错误:invalid_grant

OAuth2 对时钟偏差非常敏感。如果您确定自己已正确设置所有内容 正确,请检查计算机的时钟是否与网络时间同步。

错误:导出到 Cloud Storage 时显示“提供的权限范围未获授权”

如果您在 Cloud Run 任务中运行时看到此错误,请在创建凭据时(例如在 google.auth.default(scopes=...) 中)不要设置 scopes 实参。指定权限范围可能会干扰此环境中的 默认权限。