Skip to main content
 首页 » 编程设计

python之python客户端boto请求的远程签名

2025年05月04日14mengfanrong

我想从运行在某些用户机器上的 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。