使用Earthdata AWS凭证通过boto3访问MERRA-2数据遇权限错误
解决GES DISC MERRA-2数据S3访问权限问题
问题解答
临时AWS凭证是否支持本地直接访问?
是的,GES DISC返回的临时AWS凭证完全支持从本地机器直接访问MERRA-2文件,但必须确保boto3客户端的配置符合要求,否则会触发403权限错误。存储桶列表功能是否被禁用?
没错,GES DISC的gesdisc-cumulus-prod-protected存储桶默认禁用了s3:ListBucket权限。这是官方有意设置的,目的是避免大规模列表操作影响存储桶性能,同时强化数据访问的安全性。用户只能通过已知的完整文件路径直接访问对象。
修正方案与示例代码
你的核心问题大概率是boto3客户端缺失了关键配置参数,以下是修正后的完整操作流程:
1. 创建符合要求的S3客户端
GES DISC的S3存储桶强制要求使用us-west-2区域和s3v4签名版本,创建客户端时必须指定这两个参数:
import boto3 # 替换为你从GES DISC获取的临时凭证 temp_credentials = { "access_key": "你的accessKeyId", "secret_key": "你的secretAccessKey", "session_token": "你的sessionToken" } # 初始化正确配置的S3客户端 client = boto3.client( 's3', region_name='us-west-2', # 必须指定该区域 aws_access_key_id=temp_credentials['access_key'], aws_secret_access_key=temp_credentials['secret_key'], aws_session_token=temp_credentials['session_token'], config=boto3.session.Config(signature_version='s3v4') # 必须使用s3v4签名 )
2. 直接下载指定文件
使用修正后的客户端执行下载,确保文件路径与Earthdata网页界面上的完全一致(S3路径区分大小写,需严格匹配):
# 执行文件下载 client.download_file( "gesdisc-cumulus-prod-protected", "MERRA2/M2T3NPUDT.5.12.4/2025/03/MERRA2_400.tavg3_3d_udt_Np.20250331.nc4", "test.nc4" )
额外注意事项
- 临时凭证有效期为1小时,过期后需重新从GES DISC凭证端点获取。
- 若仍出现403错误,检查Earthdata账户是否已获得MERRA-2数据集的访问授权(部分数据集需要额外申请权限)。
- 确认文件路径无拼写错误,包括大小写、层级分隔符等细节。
内容的提问来源于stack exchange,提问作者Yan Li
相关产品推荐
相关产品推荐

