从S3获取非公开数据

时间:2018-12-08 15:15:02

标签: javascript amazon-s3

我一直在开发一个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"));

问题

我不希望我正在抓取的数据公开,并且仅应用于我的Web应用程序。这有可能吗?

1 个答案:

答案 0 :(得分: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答案,其中包含以下节点的示例代码:Nodejs AWS SDK S3 Generate Presigned URL