【问题标题】:Fetch non-public data from S3从 S3 获取非公开数据
【发布时间】:2019-05-10 01:34:54
【问题描述】:

我一直在开发一个 web 应用程序,我使用 Scrapy 抓取数据并在 S3 上启动数据。现在我想将数据提取到我的 React 项目中。如果我将数据设置为公开,这效果很好。

axios
  .get(`https://s3-eu-west-1.amazonaws.com/bucket/data.json`)
  .then(res => {
    console.log("Data: ", res.data);
    this.setState({ events: res.data });
  })
  .catch(console.log("error"));

问题

我不希望我正在抓取的数据是公开的,并且应该只对我的网络应用程序可用。这甚至可能吗?

【问题讨论】:

    标签: javascript amazon-s3


    【解决方案1】:

    我假设您说的是在用户浏览器中运行的客户端 Web 应用程序?据我所知,您至少需要一些服务器端组件来控制或允许访问私有 S3 资源。这可能是一个 lambda 函数或一个实际的服务器,但 AFAIK 没有仅从客户端执行此操作的安全方法。

    我知道有两种方法可以将私有 S3 资源公开给客户端应用程序:

    1. 如果有一个服务器在您的控制之下(例如,一个交付您的应用程序的 NodeJS 服务器,或者可能提供 API 服务),您可以从服务器端安全地连接到 S3,并将您需要的任何东西交付给客户端。这也可以通过 lambda 函数来完成。无论您选择什么,您仍然需要一种方法来确保请求内容的客户端/应用程序应该可以访问该内容,例如用户应该有一个有效的会话。

    2. 您可以通过生成预签名 URL 来允许访问私有 S3 对象,该 URL 为客户端应用程序提供一些固定的时间来下载内容。这可能是您的服务器(或 lambda)上的一个端点,您的客户端应用程序只有在确保请求它的用户获得授权后才会调用它。

    这里有一个关于 Medium 的教程,解释了这两个选项:https://blog.fyle.in/sharing-files-using-s3-pre-signed-urls-e05d4603e067

    这是一个 StackOverflow 答案,其中包含 Node 的示例代码:Nodejs AWS SDK S3 Generate Presigned URL

    【讨论】:

      猜你喜欢
      • 2019-01-02
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-10-16
      • 1970-01-01
      • 2019-02-17
      相关资源
      最近更新 更多