如何在中国大陆地区使用boto3访问AWS S3存储桶?
解决boto3访问AWS中国区S3存储桶的初始化问题
AWS中国区(北京/宁夏)与全球区属于独立基础设施,boto3默认使用全球区服务端点,因此访问中国区存储桶时需显式指定对应区域和端点,以下是具体修改方案:
方案一:代码中直接指定区域和端点
在初始化Session或Client时,明确传入中国区的region_name和endpoint_url:
# 示例:访问北京区域(cn-north-1)的存储桶 session = boto3.session.Session( aws_access_key_id='XYZ', aws_secret_access_key='ABC', region_name='cn-north-1' ) # 显式指定中国区S3端点 client = session.client( 's3', endpoint_url='https://s3.cn-north-1.amazonaws.com.cn' ) # 后续业务代码保持不变 listing = client.list_objects(Bucket='你的中国区存储桶名称')
不同中国区的区域标识和对应端点:
- 北京区域:
region_name='cn-north-1',端点https://s3.cn-north-1.amazonaws.com.cn - 宁夏区域:
region_name='cn-northwest-1',端点https://s3.cn-northwest-1.amazonaws.com.cn
如果使用S3 Resource方式,同样需要指定端点:
s3_resource = session.resource( 's3', endpoint_url='https://s3.cn-north-1.amazonaws.com.cn' ) bucket = s3_resource.Bucket('你的中国区存储桶名称') for obj in bucket.objects.all(): print(obj.key)
方案二:通过AWS配置文件设置(无需修改代码)
在本地~/.aws/config(Windows系统路径为C:\Users\<用户名>\.aws\config)中添加中国区专属配置:
[profile china-s3] region = cn-north-1 endpoint_url = https://s3.cn-north-1.amazonaws.com.cn aws_access_key_id = XYZ aws_secret_access_key = ABC
之后代码中直接调用该配置文件:
session = boto3.session.Session(profile_name='china-s3') client = session.client('s3') listing = client.list_objects(Bucket='你的中国区存储桶名称')
注意事项
- 确认使用的IAM密钥为AWS中国区账号生成,全球区密钥无法在中国区使用
- 存储桶需创建在对应的中国区区域内,跨区域访问会报错
内容的提问来源于stack exchange,提问作者user124114
相关产品推荐
相关产品推荐

