我想从运行在某些用户机器上的python客户端直接将文件上传/下载到Amazon S3。我有一台服务器,该服务器托管访问ID和密钥,因为它们不能在用户端,可用于生成预签名的url,并且客户端可以通过API连接以请求这些预签名的url。 。
我发现了很多JS的示例,但是在客户端(不是基于Web的)中也没有一个带有python的示例。我尝试在客户端使用boto,但是似乎没有简单的方法可以利用boto API,而是使用远程签名对请求进行签名。
有没有办法我可以使用boto处理来自客户端的传输?到目前为止,似乎最好的方法是使用python请求构建我自己的客户端,但是我认为重新发明轮子似乎很合理。
到目前为止,我已经能够对HmacKeys进行猴子补丁(来自boto2中的boto.auth),因此不再需要provider.secret_key(并且不会引发NotReadyToAuthenticate()),并且可以覆盖签名,注入API要求进行远程签名。但这似乎非常棘手,脆弱并且难以维护。 Boto是否有其他方法可以实现此目的?
最佳答案
您应该通过AWS Security Token Service (STS)生成临时凭证,而不是对URL进行签名(URL通常用于通过Web浏览器进行呼叫)。
从服务器发出GetFederationToken
API call以生成临时凭证:
凭证是有时间限制的(最多36小时)
可以指定定义授予的权限集的策略
然后将这些凭据传递给您的客户端Python应用
然后,您的Python应用程序将在调用boto
时使用这些凭据。在指定的时间范围内,仅允许用户制作您在策略中允许的API。