通过代理数据或通过 heroku 签署 url 从 S3 tiles 提供私有映射?

Serve private mapping from S3 tiles by proxying data or signing urls through heroku?

我想将地图切片存储在私有 S3 存储桶中。每个图块都有自己的 URL,并且每组图块可能有数 GB 的图块。

然后我想通过前端映射客户端(例如传单)可视化这些图块。此客户端根据需要使用磁贴的个人 URL.

提取磁贴

因为存储桶是私有的,所以我需要对每个磁贴请求进行身份验证,但性能对于此应用程序来说相当关键。

考虑到我想使用 heroku 来托管我的网站,在从 S3 请求磁贴之前通过 heroku 代理 url 并对其进行签名更好,还是通过 heroku 代理磁贴本身更好?

还有其他选择吗?

理想情况下,我认为您希望通过授权访问 S3 存储桶的服务器来代理请求,以最大限度地减少身份验证事务。

无论是否在 Heroku 上,只要代理服务器能够验证最终用户的访问并根据所需的安全策略维护该会话,您就应该没问题。

Cesium 确实支持图像和地形的代理,所以一旦到位,您只需要使用您的服务器配置 CesiumProxy 就可以了。

如果 S3 中的内容是私有的,您将不得不以一种或另一种方式授权下载,除非存储桶策略允许代理无需基于其 IP 地址进行身份验证即可访问内容。即使那样,代理仍然需要通过(大概)cookie 验证用户是否获得授权,这可能意味着会话数据库查找。

生成签名的 URL 在计算上并不是一个特别昂贵的过程,并且(与我偶尔遇到的印象相反)签名过程完全在您的服务器上完成——没有与 S3 的实际交互生成带符号的 URL.

时发生

没有一个正确答案。我使用这两种方法,以及它们的组合——在应用程序中签署 URLs,在数据库中签署它们(我写了一个 MySQL 存储函数来签署 URLs),向读取用户会话 cookie 的不同应用服务器提供 link,如果获得授权,则生成签名的 URL 和 returns 302 重定向,向代理预签名 URL 请求到 S3 的代理服务器(用于实时日志记录并允许我使用我自己的域名和 SSL 证书)......所有这些方法都有有效的用例,并且其他