上传文件时出现boto.exception.S3ResponseError: 403 Forbidden错误

3 投票
3 回答
12273 浏览
提问于 2025-04-29 23:48

关于这个问题,还有一些其他的提问:

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=Falsentpdate,还给“认证用户”在AWS上上传和删除的权限。我的解决办法可能比较少见,但如果其他人也遇到类似情况,可以参考一下:

我开始运行我的Django应用时,使用的是我自己的存储桶 'xyz' 的凭证。后来我把凭证换成了我朋友的存储桶 'abc'。这两个凭证不匹配,所以我只需要重启一下gunicorn就解决了问题。

33

如果你电脑的时间设置不正确,也会出现这种情况。

3

看起来你没有权限在这个存储桶里写东西。这个存储桶的政策是什么?你能确认一下这个IAM用户是否可以在这个存储桶里添加内容吗?

撰写回答