上传文件时出现boto.exception.S3ResponseError: 403 Forbidden错误
关于这个问题,还有一些其他的提问:
boto.exception.S3ResponseError: S3ResponseError: 403 Forbidden
S3ResponseError: S3ResponseError: 403 Forbidden
S3ResponseError: 403 Forbidden using boto
Python: Amazon S3 cannot get the bucket: says 403 Forbidden
不过,看起来我可能遇到了不同的问题(比如,时钟偏差不是问题,我已经尝试过设置 validate=False
,而且我相信我有正确的密钥和秘密密钥,因为如果用错误的密钥或秘密密钥会出现不同的错误)。这是我的脚本:
import boto
import sys
from boto.s3.key import Key
BUCKET_NAME = sys.argv[1]
AWS_ACCESS_KEY_ID = sys.argv[2]
AWS_SECRET_ACCESS_KEY = sys.argv[3]
conn = boto.connect_s3(AWS_ACCESS_KEY_ID, AWS_SECRET_ACCESS_KEY)
bucket = conn.get_bucket(BUCKET_NAME, validate=False)
k = Key(bucket)
k.key = 'barbaz'
k.set_contents_from_filename('/tmp/barbaz.txt')
结果是:
Traceback (most recent call last):
File "/home/jonderry/sdmain/src/scripts/jenkins/upload_to_s3.py", line 16, in <module>
k.set_contents_from_filename('/tmp/barbaz.txt')
File "/usr/local/lib/python2.7/dist-packages/boto/s3/key.py", line 1360, in set_contents_from_filename
encrypt_key=encrypt_key)
File "/usr/local/lib/python2.7/dist-packages/boto/s3/key.py", line 1291, in set_contents_from_file
chunked_transfer=chunked_transfer, size=size)
File "/usr/local/lib/python2.7/dist-packages/boto/s3/key.py", line 748, in send_file
chunked_transfer=chunked_transfer, size=size)
File "/usr/local/lib/python2.7/dist-packages/boto/s3/key.py", line 949, in _send_file_internal
query_args=query_args
File "/usr/local/lib/python2.7/dist-packages/boto/s3/connection.py", line 664, in make_request
retry_handler=retry_handler
File "/usr/local/lib/python2.7/dist-packages/boto/connection.py", line 1068, in make_request
retry_handler=retry_handler)
File "/usr/local/lib/python2.7/dist-packages/boto/connection.py", line 939, in _mexe
request.body, request.headers)
File "/usr/local/lib/python2.7/dist-packages/boto/s3/key.py", line 882, in sender
response.status, response.reason, body)
boto.exception.S3ResponseError: S3ResponseError: 403 Forbidden
<?xml version="1.0" encoding="UTF-8"?>
<Error><Code>AccessDenied</Code><Message>Access Denied</Message><RequestId>***someRequestId***</RequestId><HostId>***someHostId</HostId></Error>
有没有什么想法,是什么问题,或者如何进一步诊断?
3 个回答
0
我也遇到过这个问题,我尝试过 validate=False
和 ntpdate
,还给“认证用户”在AWS上上传和删除的权限。我的解决办法可能比较少见,但如果其他人也遇到类似情况,可以参考一下:
我开始运行我的Django应用时,使用的是我自己的存储桶 'xyz' 的凭证。后来我把凭证换成了我朋友的存储桶 'abc'。这两个凭证不匹配,所以我只需要重启一下gunicorn就解决了问题。
33
如果你电脑的时间设置不正确,也会出现这种情况。
3
看起来你没有权限在这个存储桶里写东西。这个存储桶的政策是什么?你能确认一下这个IAM用户是否可以在这个存储桶里添加内容吗?