如何保护公共存储桶中的某些文件/对象?

时间:2019-05-24 09:20:16

标签: reactjs amazon-web-services amazon-s3 amazon-cloudformation

我想创建一个公共read aws s3存储桶,其中某些文件受IAM角色限制读取。

首先:

  • 我使用amplify cli来部署我的“静态”网站。
  • 该网站是一个React应用
  • 此应用具有公共页面/反应组件和管理区域
  • 我想限制具有aws IAM角色的管理区域/管理页面/管理员反应组件

更多详细信息:

react应用程序很大,因此我使用const Dashboard = asyncComponent(() => import('./pages/Dashboard'))之类的asyncComponent功能拆分了组件 因此,当我构建该应用程序时,它拥有一个大文件,而我拥有多个小文件。所有这些文件都在同一个存储桶中。

现在,我要构建管理页面。始终使用asyncComponent,我们会得到«Admin»文件的集合,并且它们托管在同一存储桶中。但是出于安全原因,我想将访问权限限制为具有特定IAM角色的身份验证用户(例如AdminRole)。

我查看了来自amplify config或来自CloudFormation的AWS :: S3 :: Bucket的许多文档,我看到了不同的事情告诉我这是可能的,但是我对此文档很迷失。

所以最后我问:

如何保护具有IAM角色的s3存储桶中的某些文件/对象以读取访问权限?

我该如何在react应用程序中“标记”管理组件?还是通过放大?也许使用正则表达式匹配文件?或指定的文件夹?为了应用此读取限制。

预先感谢您的答复。

1 个答案:

答案 0 :(得分:0)

Amazon S3中的内容默认为私有

因此,您可以通过存储桶策略(整个存储桶或存储桶的一部分)或通过访问控制列表( ACL)

要投放应仅限于特定用户的内容,请利用预签名URL 。这些是限时URL,可提供对Amazon S3中私有对象的临时访问。它们很容易生成(不需要API调用)。

它的工作方式是:

  • 用户将对您的应用程序进行身份验证
  • 当他们希望访问受限制的内容时,应用程序将确定是否允许他们访问
  • 如果允许他们访问,应用程序将生成预签名的URL 。也可以在<a><img>标签中使用它们来引用页面和图像。
  • 用户将像普通的Web组件一样接收/查看内容
  • 有效期限结束后,预签名的URL将不再起作用

请参阅:Share an Object with Others - Amazon Simple Storage Service

(我不是Amplify人,所以我不能说Amplify如何专门生成/使用预签名URL。)