我一直在尝试从EC2实例上运行的python程序访问S3存储桶。附上代码和错误:
from boto.s3.connection import S3Connection
import boto
conn=S3Connection()
bucket=conn.get_bucket('nplr1')
错误:
Traceback (most recent call last):
File "Main.py", line 140, in <module>
main()
File "Main.py", line 33, in main
conn.get_all_buckets()
File "/usr/local/lib/python2.7/dist-packages/boto/s3/connection.py", line 444, in get_all_buckets
response.status, response.reason, body)
boto.exception.S3ResponseError: S3ResponseError: 403 Forbidden
<?xml version="1.0" encoding="UTF-8"?>
<Error><Code>InvalidAccessKeyId</Code><Message>The AWS Access Key Id you provided does not exist in our records.</Message>
这是我的/etc/boto.cfg文件
[Credentials]
aws_access_key_id = 'id'
aws_secret_access_key = 'key'
[s3]
region='ap-south-1'
aws_access_key_id ='id'
aws_secret_access_key = 'key'
这有什么问题?为什么我无法访问存储桶?
答案 0 :(得分:0)
您的代码未访问凭据文件中的[s3]
个人资料。创建客户端连接时需要显式请求配置文件。因此,该地区可能不会被接收。
我建议您通过AWS Command-Line Interface (CLI)测试您的凭据。例如,运行aws s3 ls
将测试您是否有权列出您的Amazon S3存储桶。如果可行,那么您可以执行更多命令来测试您的权限(例如aws s3 ls s3://nplr1
)。
答案 1 :(得分:0)
问题与ap-south-1
使用签名v4签名请求的事实有关,boto
无法识别此问题。 boto3
也没有。
但是,您可以覆盖签名配置。这是boto3
中的一些工作代码:
import boto3
from botocore.client import Config
s3 = boto3.resource('s3', config=Config(signature_version='s3v4'))
bucket=s3.get_bucket('nplr1')
对于boto
,我设法明确说明ap-south-1
的主机:
from boto.s3.connection import S3Connection
import boto
conn=S3Connection(host='s3.ap-south-1.amazonaws.com')
bucket=conn.get_bucket('nplr1')
有用的信息来自: