Python:Amazon S3 无法获取存储桶:表示 403 Forbidden

标签 python amazon-s3 boto

我在 Amazon S3 中为我的组织创建了一个存储桶,它看起来像 mydev.orgname

  • 我有一个 Java 应用程序可以使用凭据连接到 Amazon S3,并且可以连接到 S3、创建、读取文件

  • 我有一个要求,应用程序从同一个存储桶中读取来自 Python 的数据。所以我正在使用 boto为此。

为了得到桶,我做了以下操作

>>> import boto
>>> from boto.s3.connection import S3Connection
>>> from boto.s3.key import Key
>>> 
>>> conn = S3Connection('xxxxxxxxxxx', 'yyyyyyyyyyyyyyyyyyyyyy')
>>> conn
S3Connection:s3.amazonaws.com

现在当我尝试获取桶时我看到错误

>>> b = conn.get_bucket('mydev.myorg')
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
  File "/Library/Python/2.7/site-packages/boto/s3/connection.py", line 389, in get_bucket
    bucket.get_all_keys(headers, maxkeys=0)
  File "/Library/Python/2.7/site-packages/boto/s3/bucket.py", line 367, in get_all_keys
    '', headers, **params)
  File "/Library/Python/2.7/site-packages/boto/s3/bucket.py", line 334, in _get_all
    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>EEC05E43AF3E00F3</RequestId><HostId>v7HHmhJaLLQJZYkZ7sL4nqvJDS9yfrhfKQCgh4i8Tx+QsxKaub50OPiYrh3JjQbJ</HostId></Error>

但是从 Java 应用程序看来一切正常。

我是不是做错了什么?

最佳答案

赋予用户“更强的角色”并不是正确的解决方案。这只是 boto 库使用的问题。显然,您在使用 Java S3 库时不需要额外的权限。

在这种情况下使用 boto 的正确方法是:

b = conn.get_bucket('my-bucket', validate=False)
k = b.get_key('my/cool/object.txt') # will send HEAD request to S3
...

基本上,默认情况下,boto(恕我直言,这是他们的错误)假设您想要与 S3 存储桶进行交互。诚然,有时您确实想要这样做,但是您应该使用具有 S3 存储桶操作权限的凭据。但更流行的用例是与 S3 对象交互,在这种情况下,您不需要任何特殊的桶级权限,因此使用 validate=False kwarg。

关于Python:Amazon S3 无法获取存储桶:表示 403 Forbidden,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12571217/

相关文章:

python - 如何使用 re.split() 在所有特殊字符处拆分

python - 导入语句中带有斜杠的任意 python 名称

python - 如何在 Python 类中查找不存在的嵌套变量?

r - 在 Shiny 应用程序部署中隐藏 key

python - 如何使用 boto 以编程方式检查 Amazon S3 权限?

python - 类(Python)和结构(C)之间的区别

python - 在 AWS 中使用 Python 中的 Lambda 将文件写入 S3

amazon-web-services - 使用多个帐户时无法创建新舞台?

google-cloud-storage - 如何更新 .boto 文件中的项目 ID

python - s3 通过 boto 连接到 'folder'