【发布时间】:2017-03-25 03:49:57
【问题描述】:
使用这个 aws cli 命令(配置了访问密钥),我可以在本地从 S3 复制密钥:
aws s3 cp s3://<bucketname>/test.txt test.txt
在 boto 中使用以下代码,我得到 S3ResponseError: 403 Forbidden,无论我允许 boto 使用配置的凭据,还是显式传递密钥。
import boto
c = boto.connect_s3()
b = c.get_bucket('<bucketname>')
k = b.get_key('test.txt')
d = k.get_contents_as_string() # exception thrown here
我看过其他关于不使用 validate=False 等验证密钥的 SO 帖子,但这些都不是我的问题。将密钥复制到同一存储桶中的另一个位置时,我得到了类似的结果。使用 cli 成功,但使用 boto 失败。
我查看了 boto 源代码,看看它是否在做任何需要额外权限的事情,但对我来说没有什么特别突出的。
有人有什么建议吗? boto 如何解析其凭据?
【问题讨论】:
-
有时是因为 boto 可能对
aws s3 cp进行了不同的 API 调用。这是因为get_contents_as_string()和像s3:GetObject这样的API 调用之间没有一对一的映射。哪些权限与用户/角色相关联?您可以临时添加所有 S3 权限以查看是否可以解决问题吗? -
是的,我认为 boto 需要比 cli 更多的权限,尽管我无法从源代码中看到什么
-
@SimonTrewhella 我遇到了类似的问题,你找到解决办法了吗?具体还需要哪些其他权限或解决方法?
-
@monguin 我最终不得不在代码中添加访问密钥,我认为切换到 boto2
标签: python amazon-web-services amazon-s3 boto aws-cli