如何显示非公开的s3存储桶中的对象

时间:2017-11-12 12:14:49

标签: javascript amazon-web-services security amazon-s3 vue.js

我正在尝试显示非公开的S3存储桶中的对象。为此,我必须向AWS提供访问密钥和密钥。

我有这个小提琴(没有键)但是当我输入正确的键时它不起作用:http://jsfiddle.net/jsp3wzbu/

<section ng-app data-ng-controller="myCtrl">
    <img  ng-src="{{s3url}}" id="myimg">
</section>

另外,安全性如何处理?我不想将访问/密钥存储在我的客户端代码中,因为用户会看到它。我的服务器代码将这些密钥保存在环境变量中,我担心如果我与客户端JS代码共享它们,那么它们将被公开。我还有其他方法可以在浏览器上显示S3对象吗? ....服务器可以将图像作为base64 json提供,客户端代码可以呈现吗?

2 个答案:

答案 0 :(得分:1)

您可以采用多种方法来实现这一目标。

  • 使用S3 Signed Urls。
  • 使用AWS STS从后端生成临时访问凭据。
  • 使用AWS Cognito联合身份生成临时访问凭据。
  • 使用CloudFront签名的网址或Cookie。

注意:建议不要将永久IAM凭据存储或发送到客户端。

答案 1 :(得分:0)

以下是我处理私有S3存储桶内容的方法。

  1. 我为我的EC2实例使用IAM角色。我不会在EC2实例上存储AWS凭据。
  2. 我要求用户登录。您可以使用家庭酿造登录设置(数据库),Cognito或其他IDP,如Google或Facebook。
  3. 从我的后端代码中,我生成了在15分钟后过期的预签名网址。如果URL是针对大型文件的,我会根据文件大小调整超时时间,假设Internet连接速度较慢。
  4. 在我的HTML页面的JavaScript中,我在15分钟到期之前刷新URL(通常通过AJAX每5分钟刷新一次)。这可以通过简单的刷新页面或(更好)通过使用AJAX刷新URL来完成。这样可以处理长时间打开页面的用户。