由于 InvalidAccessKey 无法获取 s3 存储桶 403,但可以从 CLI 运行

Can't get s3 bucket 403 due to InvalidAccessKey but works from CLI

我正在尝试通过 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 的答案 但是我在尝试列出存储桶时在下一行遇到了同样的错误。

如果我 运行 CLI 命令

aws s3api list-objects --bucket my-bucket

我得到了一份内容清单。

如果我运行

aws configure list --profile default

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

有什么想法吗?

我们正在使用联合访问,AWS 论坛上的一条评论帮助了我。

如果您使用带有 boto 的联合用户,您还需要传入安全令牌。默认构造函数S3Connection()不传这个,需要自己动手:

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

然后就可以了。