我正在尝试通过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。
有什么想法吗?
答案 0 :(得分:1)
我们正在使用联合访问,并且隐藏在AWS论坛上的评论帮助了我。
如果您使用带有boto的联盟用户,则还需要传入安全令牌。默认构造函数S3Connection()不会传递它,因此您需要自己执行:
conn = S3Connection(aws_access_key_id='YOURKEYID',
aws_secret_access_key='YOURSECRETKEY', security_token='YOURTOKEN')
然后它有效。