【发布时间】:2015-02-08 14:15:43
【问题描述】:
我在为法兰克福地区的 S3 存储桶使用 Python-Boto SDK 时遇到问题。根据Amazon link,该区域将仅支持 V4。 这个document 解释了如何为 Boto SDK 添加 V4 支持。 我添加了一个新部分:
if not boto.config.get('s3', 'use-sigv4'):
boto.config.add_section('s3')
boto.config.set('s3', 'use-sigv4', 'True')
然后我创建了新连接并获得了所有存储桶:
connection = S3Connection(accesskey, secretkey, host=S3Connection.DefaultHost)
buckets = connection.get_all_buckets()
它工作正常,但后来我尝试为我的存储桶获取所有密钥:
for bucket in buckets:
bucket.get_all_keys()
我得到了以下信息:
S3ResponseError: 400 Bad Request
<?xml version="1.0" encoding="UTF-8"?>
<Error><Code>AuthorizationHeaderMalformed</Code><Message>The authorization header is malformed; the region 'us-east-1' is wrong; expecting 'eu-central-1'</Message><Region>eu-central-1</Region>
为什么会发生? 之后,我连接到该地区并获得了所有需要的数据:
region_con = boto.s3.connect_to_region('eu-central-1', aws_access_key_id=accesskey, aws_secret_access_key=secretkey)
bucket = region_con.get_bucket(bucket.name)
bucket.get_all_keys()
如何正确修复它?
【问题讨论】:
-
如果您真的在 boto 配置文件中进行更改而不是尝试以编程方式进行更改,会发生什么?
-
是的,我之前尝试过,但得到了相同的结果。你的方法应该有什么不同?
-
可能没有,但您只是在您的环境中更改内存配置的值。如果在其他地方创建了另一个配置,它将不会获得更新,因为它将直接从配置文件中读取配置。我只是想知道这是否会有所作为。
标签: python amazon-web-services amazon-s3 boto