由于InvalidAccessKey而无法获取s3存储桶403,但是可以从CLI工作

时间:2018-06-08 14:45:45

标签: python python-2.7 amazon-s3 boto

我正在尝试通过boto访问S3存储桶并获取403.此代码:

from boto.s3.connection import  S3Connection
conn = S3Connection()
bucket = conn.get_bucket('my-bucket')
files = bucket.list()

在get_bucket行返回403(我已经剥离了值)

<Error>
    <Code>InvalidAccessKeyId</Code>
    <Message>The AWS Access Key Id you 
    provided does not exist in our records.</Message>
    <AWSAccessKeyId>*** </AWSAccessKeyId>
    <RequestId>***</RequestId>
    <HostId>***</HostId>
</Error>

我看到有关设置validate = False的答案,就像这个boto s3 Bucket versus get_bucket一样,但是当我尝试列出存储桶时,我在下一行会收到相同的错误。

如果我运行CLI命令

aws s3api list-objects --bucket my-bucket

我得到了一份内容清单。

如果我跑

aws configure list --profile default

configure包含XML中错误消息中的完全相同的访问ID。没有其他配置文件存在,所以我想知道它是如何使用来自CLI的完全相同的密钥而不是boto。

有什么想法吗?

1 个答案:

答案 0 :(得分:1)

我们正在使用联合访问,并且隐藏在AWS论坛上的评论帮助了我。

如果您使用带有boto的联盟用户,则还需要传入安全令牌。默认构造函数S3Connection()不会传递它,因此您需要自己执行:

conn = S3Connection(aws_access_key_id='YOURKEYID', 
aws_secret_access_key='YOURSECRETKEY', security_token='YOURTOKEN')

然后它有效。