【问题标题】:Getting boto.exception.S3ResponseError: S3ResponseError: 403 Forbidden when uploading file获取 boto.exception.S3ResponseError: S3ResponseError: 403 Forbidden 上传文件时
【发布时间】:2014-12-23 01:37:02
【问题描述】:

关于这个问题还有其他几个问题:

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>

任何想法是什么问题,或如何进一步诊断?

【问题讨论】:

  • 您是否尝试过使用 s3cmd 使用相同的密钥进行上传?只是为了确保您确实有权访问该存储桶。
  • 我刚试过s3cmd。我没有收到任何错误,但文件没有按预期出现在存储桶中。我发出了以下命令:s3cmd -c /path/to/config/file put /tmp/bazbar.txt s3://bucket-name

标签: python amazon-s3 boto


【解决方案1】:

如果您机器的时间设置不正确,也会发生这种情况

【讨论】:

  • 这最终成为我的问题。我的虚拟盒子的时间与现实不同步。
  • 这最终也是我的问题。只需要在我的虚拟盒子上做一个vagrant reload
  • OS X:sudo ntpdate -u time.apple.com
  • thaaaaaaaaaaaaaank 你
  • 哇 - 在假设我犯了一些愚蠢的小错误之后,令人尴尬的几个小时之后,这救了我! vagrant 已经很遥远了……
【解决方案2】:

您似乎没有在此存储桶上写字的权限。什么是桶策略?你能确保这个 IAM 用户可以放在这个存储桶上吗?

【讨论】:

  • 我必须向“Authenticated Users”添加上传/删除权限。添加策略也可以,但对于这种特殊情况,权限 UI 是解决问题的最简单方法。
  • 不要使用“认证用户”!这是非常具有误导性的,因为它使所有经过身份验证的 AWS 用户(例如我自己)都可以访问您的存储桶。亚马逊应该让它更清楚。
【解决方案3】:

我也遇到了这个问题,我尝试了 validate=Falsentpdate,并授予“Authenticated Users”在 AWS 上上传/删除的权限。我的决议可能很少见,但以防万一其他人这样做:

我开始在我的环境中为我的存储桶“xyz”运行我的 Django 应用程序。然后我更改了凭据以上传到我朋友的存储桶“abc”。这些凭据之间不匹配,所以我需要做的就是重新启动 gunicorn。

【讨论】:

  • 据我了解,授予“任何经过身份验证的 AWS 用户”的权限适用于任何经过身份验证的 aws 用户,而不仅仅是那些通过您的特定帐户进行身份验证的用户,因此此解决方案存在安全问题。跨度>
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-08-04
  • 1970-01-01
  • 2021-08-09
  • 2021-10-04
  • 2015-11-18
相关资源
最近更新 更多