gpt4 book ai didi

node.js - 用于提供私有(private)文件​​的 AWS S3 实现

转载 作者:搜寻专家 更新时间:2023-10-31 23:40:21 24 4
gpt4 key购买 nike

用例:我们正在开发一个网络应用程序,客户要求我们使用 AWS S3 来存储图像。在应用中,每个人都会有自己的账号,会上传自己的图片,上传的部分图片会公开。

据我了解,我们可以通过使用预签名的 URL 来上传图片来实现这一点。但我面临的问题是,如何限制其他用户访问图像。

最佳答案

有两种使用 Amazon S3 的基本方法:

  • 将其纯粹用作存储介质,仅供您的应用程序访问,或者
  • 使用它直接向最终用户提供内容

在第一种情况下,只有您的应用程序可以访问存储在 S3 中的数据/文件。它必须检索内容并将其提供给用户。这是 Web 服务器的传统方法。

在第二种情况下,您可以生成包含对存储在 S3 中的文件的引用的 HTML 页面。例如,如果图像出现在网页中,则 src= 参数将指向 Amazon S3 URL。然后从 S3 提供该文件,而无需通过您的网络服务器。

这可以通过使用预签名 URL 来增强,这些 URL 是有时间限制的 URL,可以提供对存储在 Amazon S3 中的私有(private)内容的访问。它是这样工作的:

  • 文件存储在 S3 中并保密(意味着不允许访问)
  • 您的应用程序完全负责确定哪些用户可以访问哪些文件
  • 当应用程序希望授予用户访问权限时(例如,他们可能想查看自己的照片),它会生成一个预签名 URL 并将其包含在 HTML 页面中
  • 当用户的网络浏览器使用预签名 URL 访问内容时
  • Amazon S3 收到请求,验证预签名 URL 上的签名和时间戳,如果获得批准,则提供文件以响应请求

预签名 URL 包括:

  • 对请求的对象的引用
  • 与有权访问对象的 IAM(身份和访问管理)实体关联的访问 key - 例如,您可以创建一个具有必要权限的 IAM 用户,然后向您的应用程序提供这些访问凭据
  • 一个到期时间戳,在此之前预签名 URL 有效
  • 一个加密计算的签名,用于验证预签名 URL 是否由拥有访问 key 的实体创建(实际上,它验证密码并对上述信息进行哈希处理)

只需几行代码即可创建预签名 URL,并且不需要调用 AWS API。

底线:将所有图像保密。您的应用程序确认每个用户有权即时访问图像,然后生成 URL 以授予限时访问权限。

关于node.js - 用于提供私有(private)文件​​的 AWS S3 实现,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47237134/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com