我在使用Python-Boto SDK操作位于法兰克福地区的S3 Bucket时遇到了问题。根据亚马逊链接,该地区仅支持V4。这个文档解释了如何为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()
我该如何正确地修复它?