通过Earthdata的 AWS凭证,使用boto3访问MERRA-2数据时出现访问被拒绝和403错误

前端开发 2026-07-09

我正在尝试使用Python和 boto3以编程方式访问MERRA-2数据(M2T3NPUDT.5.12.4)。

我已成功完成以下操作:

  • 使用我的Earthdata登录凭证完成认证。
  • 从GES DISC的 S3凭证端点获取了临时AWS凭证。
  • 解析返回的凭证(accessKeyId, secretAccessKey, sessionToken)。
  • 成功创建了boto3 S3客户端。

然而,当我尝试列出该bucket中的对象时:

response = client.list_objects_v2(
    Bucket="gesdisc-cumulus-prod-protected",
    Prefix="MERRA2/M2T3NPUDT.5.12.4/2025/03/"
)

我收到了:

AccessDenied: User is not authorized to perform s3:ListBucket

接着,我尝试直接通过以下方式下载一个特定文件:

client.download_file(
    "gesdisc-cumulus-prod-protected",
    "MERRA2/M2T3NPUDT.5.12.4/2025/03/MERRA2_400.tavg3_3d_udt_Np.20250331.nc4",
    "test.nc4"
)

但收到了:

403 Forbidden

该文件可以通过Earthdata的网页界面访问,并且在登录的情况下通过我的浏览器下载也能成功。

我的问题是:

  1. 由GES DISC的 S3凭证服务返回的临时AWS准证,是否应该允许从本地机器直接访问MERRA-2文件?
  2. 是否有意禁用该数据集的桶列出功能?

任何指导或可工作的示例都将不胜感激。

解决方案

1.临时凭证是否允许从本地机器直接访问?

不可以。 直接对NASA Earthdata云存储桶的S3访问(s3://,如 gesdisc-cumulus-prod-protected)被严格限定为只能由在AWS us-west-2 区域内部署的计算资源使用。

当你从GES DISC端点请求临时S3凭证时,AWS会成功生成凭证。然而,该S3存储桶本身具有一个VPC(虚拟私有云)端点策略,阻止来自 us-west-2 区域之外的所有流量。由于你的本地机器位于该边界之外,AWS S3会强制拒绝连接,导致在 download_file 上出现 403 Forbidden 错误。

2.是否故意禁用桶列出?

是的。 出于安全、成本控制和性能原因,大多数Earthdata S3存储桶都故意禁用了广泛的桶列出功能(s3:ListBucket)。

NASA的体系结构要求用户通过 Common Metadata Repository (CMR) API来查找确切的文件路径(S3 URI或 HTTPS URL),而不是递归爬取或列出S3桶的内容。

站内所有文章版权归属LeftHeroAI导航站,无授权禁止任何主体转载、抄袭、复制内容,亦不得私自架设镜像站点。一经侵权,本站将通过法律途径追责。

相关文章