0

我需要保护我的 s3 存储桶对象。在我的 Web 应用程序中,我使用 aws-sdk 将媒体上传到 s3 存储桶并获取 http 链接以访问该对象。这个 http 链接默认是公开的,我想让它安全,这样只有授权用户才能访问媒体。aws s3 允许将对象设为私有,但它不会让任何拥有链接的人访问该对象。

将从我不想使用 aws-sdk 的移动应用程序访问此链接,相反,每当有人尝试访问对象的 http 链接时,我想在 aws 端执行一些逻辑。

我想要发生的是,在用户访问 s3 对象之前,一些授权代码将执行(如 jwt 令牌授权),并且根据它,用户将被授予/拒绝访问。

我目前正在研究 Amazon API 网关,我相信它们可以作为 http 链接访问,并且 AWS Lambda 可用于保护它们(我将在其中执行我的 jwt 授权者)。然后这些 api 将可以在内部访问 s3。

如果有人能指出我正确的方向,如果这是可能的话。如果我可以使用从我的 Web 应用程序发出的相同 jwt 令牌将请求发送到 Amazon API Gateway,那就太好了。

4

1 回答 1

1

在 S3 存储桶中公开私有对象的最简单解决方案是创建预签名 URL。预签名 URL 使用来自服务的权限(对 URL 进行预签名)来确定访问权限,并且它们的使用期限有限。它们还可以用于将对象直接上传到 S3,而不必通过 lambda 函数代理上传。

对于下载功能和流畅的用户体验,您可以 - 例如 - 使用 lambda 函数生成预签名 URL 并将其作为 HTTP 302 响应返回,该响应应指示浏览器自动从新 URL 下载文件.

(编辑)

按照我在这个答案的评论中所说的,如果您通过 API Gateway 或 Lambda 等服务代理对象的上传/下载,那么您可以使用的文件大小将受到严重限制上传到 S3。API 网关上的有效负载大小限制为 10 MB ,对于 lambda 请求,您的有效负载上限为 6MB,用于同步调用。如果要上传大于 10 MB 的内容,则需要使用直接上传到 S3,其中预签名 URL 是最安全的解决方案。

于 2021-08-18T06:37:24.630 回答