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