服务账号是与应用而非最终用户关联的 账号。如果您要开发应用或使用 REST API,可能需要使用服务 账号向 Earth Engine 进行身份验证。 详细了解如何使用服务账号进行身份验证。
创建服务账号
首先, 创建 Google Cloud 项目 (如果您尚未创建)。
如需管理 Cloud 项目的服务账号,请前往 Cloud 控制台菜单 (),然后依次选择 IAM 和管理 > 服务账号。(系统可能会提示您选择项目。)
如需创建新的服务账号,请点击 + 创建服务账号 链接。
如果您创建了 App Engine 项目,则该项目可能已有默认服务账号(App Engine 默认服务账号 )。如果您要设置 App Engine 项目,请为服务账号 角色 选择 项目 > 编辑者。
配置服务账号以使用 Earth Engine
所有服务账号都是在云项目中创建的,该项目可能与您的 App Engine 应用或 Cloud 虚拟机所用的项目相同。确保 Cloud 项目已注册 以访问 Earth Engine,并且已在该项目上启用 Earth Engine API 。项目中具有 正确权限的所有服务账号都将有权访问 Earth Engine。
使用应用默认凭据向 Earth Engine 进行身份验证
建议使用应用默认凭据 (ADC) 在无人值守
环境(如 Cloud Run 或 Compute Engine)中进行身份验证,而无需手动管理私钥。
如需初始化库,请传递您的云项目 ID(将 my-project 替换为
您的项目 ID):
import google.auth import ee credentials, project_id = google.auth.default() ee.Initialize(credentials, project='my-project')
使用私钥进行身份验证
如果您的应用需要使用服务账号私钥进行身份验证(不建议 在可以使用 ADC 的生产环境中使用):
-
为服务账号创建私钥:
- 在 Cloud 控制台中,转到 服务账号页面 。
- 点击账号对应的菜单 (),然后依次点击创建密钥 > JSON。
- 下载 JSON 密钥文件。
- 请妥善保管您的密钥文件。密钥文件是一种特殊文件,可让程序访问 Google API,代表您的服务账号。切勿将私钥存储在公共 位置。如果您放错了私钥,可以使用 Cloud 控制台撤消对服务账号的访问权限并 创建一个新账号。如需了解详情,请参阅 创建和删除服务账号密钥 。
-
从您放置
.private-key.json文件的任何位置测试以下 Python 代码(将my-project替换为您的 Google Cloud 项目 ID):import ee service_account = 'my-service-account@...gserviceaccount.com' credentials = ee.ServiceAccountCredentials(service_account, '.private-key.json') ee.Initialize(credentials, project='my-project')
如果您能够成功初始化且没有错误,则表示您的服务账号已可供使用。
在 Compute Engine 上使用默认服务账号
如果您使用的是 默认服务账号,则首先需要 将 Compute Engine 服务账号的虚拟机访问权限范围修改为“授予对所有 Cloud API 的完整访问权限”。(如果您在 Dataflow 或 App Engine 中使用默认服务账号,则无需执行此步骤。)如需使用默认服务账号向 Earth Engine 进行身份验证,请使用以下代码
(将 my-project 替换为您的 Google Cloud 项目 ID):
from google.auth import compute_engine import ee credentials = compute_engine.Credentials(scopes=['https://www.googleapis.com/auth/earthengine']) ee.Initialize(credentials, project='my-project')
设置 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 实参。指定范围可能会干扰此环境中的
默认权限。