Python:Amazon S3无法获取bucket:表示403禁止

2024-06-28 11:12:40 发布

您现在位置:Python中文网/ 问答频道 /正文

我在Amazon S3中有一个bucket,它看起来像mydev.orgname

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

  • 我需要一个应用程序从同一个bucket读取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应用程序来看,一切似乎都正常。

我在这里做错什么了吗?


Tags: inimport应用程序gets3bucketpackagesline
2条回答

在赋予我的“用户”更强大的角色之后,这个错误就消失了。意味着用户被授予获取存储桶的权限

给用户一个“更强大的角色”不是正确的解决方案。这只是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默认情况下(这是IMHO方面的一个错误),假设您想要与S3 bucket交互。当然,有时您确实需要这样做,但随后您应该使用对S3 bucket操作具有权限的凭据。但是更流行的用例是与S3对象交互,在这种情况下,您不需要任何特殊的bucket级权限,因此使用validate=Falsekwarg。

相关问题 更多 >