直接从网络应用安全访问亚马逊s3?

时间:2018-04-07 17:07:40

标签: javascript amazon-web-services amazon-s3 single-page-application

根据我对如何设置对amazon s3存储桶的安全访问的评论,我们首先生成一个IAM用户,然后绑定一个允许s3访问该用户的安全策略。之后,我们可以为存储桶生成API密钥,可以验证存储桶访问请求。这是我在这一点上的理解,如果我错过了什么,请纠正我。

我认为API密钥应该只是服务器端(Secret Access Key)。换句话说,将这些直接放在webapp中并不安全吗?因此,我们首先必须将数据发送到我们的服务器,然后在那里我们可以使用API​​密钥将其发送到存储桶?

有没有办法直接从网络应用程序访问亚马逊s3存储桶?

方法摘要

根据与@CaesarKabalan的讨论,这听起来像是允许这样做的方法:

1)创建可以创建可通过Amazon Cognito进行身份验证的身份的IAM用户 - 让我们调用从此步骤Cognito凭据分配的凭据。

2)用户使用Google

登录webapp

3)webapp向webapp的服务器发出请求(可能是lambda函数)以使用Amazon Cognito注册用户

4)webapp现在直接从Amazon Cognito获取用户的凭据,并使用这些凭据将数据发送到s3存储桶。

我认为这就是我们在概念上的位置。现在是时候测试了!

1 个答案:

答案 0 :(得分:2)

根据您的问题,我不确定您的应用程序的哪些部分在AWS或您的安全策略中,但您基本上有三个选项:

  1. (错误)将密钥存储在客户端上。根据部署范围,这可能是 ok 。例如,如果每个客户拥有自己的专用用户和存储桶,则可能没有太大的风险,特别是如果这是针对您控制访问的所有方面的私人组织。这是最简单但不太安全的。如果您的应用是多租户,则不应使用此功能。可能会继续......
  2. (很好)使用API​​端点将此数据移动到您的存储桶中。这将涉及某种基础设施,以便从客户端安全地接收文件,然后将其移入S3,并在本地存储安全密钥。这与将IO进入数据库的传统Web应用程序类似。进入S3的所有数据都会通过您的应用程序层。您必须编写该服务,托管服务并支付带宽费用。
  3. (最佳)使用Amazon Cognito为每个应用/用户分配自己的访问密钥。我个人没有这样做,但我的理解是你可以为每个实体提供他们自己的短期访问凭证,可以续订,你可以让他们直接向S3写入数据。这里的难点将是构建您的S3存储桶并为您的应用用户正确设计IAM凭据,以便能够完全按照您的需要进行操作。这里的好处是用户直接写入S3存储桶,您使用所有本机AWS服务并编写非常少的自定义代码。我会考虑最好,最安全和企业级的解决方案。以下是一个示例:Amazon S3: Allows Amazon Cognito Users to Access Objects in Their Bucket
  4. 很高兴回答任何问题或澄清。