【发布时间】:2017-10-08 18:31:33
【问题描述】:
我正在使用 boto 以编程方式创建和设置一个 s3 存储桶。
我可以创建存储桶、对象..并在对象上写字...
我想为存储桶配置一个生命周期,但是当我运行下面的代码时,我得到了这个异常:
boto.exception.S3ResponseError: S3ResponseError: 403 Forbidden with code SignatureDoesNotMatch。
lifecycle = Lifecycle()
lifecycle.add_rule(
'rulename',
prefix='/',
status='Enabled',
expiration=Expiration(days=1)
)
bucket = s3.get_bucket('mybucket')
这个调试结果可以帮助解答。
回复:'HTTP/1.1 403 Forbidden\r\n'
标头:x-amz-request-id:tx000000000000000000027-0059db8d59-39289-default
标题:内容长度:196
标头:接受范围:字节
标题:内容类型:应用程序/xml
标题:日期:2017 年 10 月 9 日星期一 14:53:13 GMT
Traceback(最近一次通话最后一次):
文件“pyth.py”,第 28 行,在
bucket.configure_lifecycle(lifecycle)
文件“/usr/lib/python2.7/site-packages/boto/s3/bucket.py”,第 1366 行,在
配置生命周期
response.status, response.reason, body)
boto.exception.S3ResponseError: S3ResponseError: 403 Forbidden
SignatureDoesNotMatch
tx0000000000000000000027-0059db8d59-39289-default
39289-默认-默认
bucket.configure_lifecycle(lifecycle)
【问题讨论】:
-
prefix='/'不太可能是您想要的。 S3 的设计是所有对象的前缀都是空字符串'',而不是'/',并且对象键实际上并不以/开头。这似乎很奇怪,这会引发SignatureDoesNotMatch错误,但看起来您正在发出的请求不会按照您的意愿执行,即使它成功了。 -
感谢您的回复,但我使用非“/”前缀对其进行了测试,但它不起作用,我只想附加一个生命周期配置,然后我会让它做我想做的事。我用 amason s3 存储桶测试了相同的代码,它可以工作
标签: python amazon-s3 boto lifecycle