如何只允许特定用户访问 Amazon S3 上的内容

Posted

技术标签:

【中文标题】如何只允许特定用户访问 Amazon S3 上的内容【英文标题】:How to allow only a specific user to access a content on Amazon S3 【发布时间】:2018-03-08 14:47:49 【问题描述】:

我是 Amazon S3 的新手。我需要一些有关 S3 存储解决方案的帮助。这是我的问题。

我在 Amazon S3 中创建了一个存储桶。现在每个人都可以访问我的存储桶 URL(例如https://BUCKET_NAME.s3.amazonaws.com),他们可以看到存储桶中的所有文件。我只希望我的移动应用程序用户能够查看/查看/下载存储桶中的文件。但是如果我阻止文件/将存储桶中的文件设置为私有,我的移动应用程序用户将无法查看他/她的文件。

那么问题来了:

有没有办法保护对 AWS S3 的访问?或者?是服务器端身份验证还是其他?

如果你知道怎么做,你能给我举个例子吗?谢谢:)

注意:我正在使用 Parse javascript SDK、AWS S3、AWS EC2、Elastic beanstalk 和带有 Angular 2 的 Ionic 2。

如果您认为我遗漏了任何细节,请告诉我,以便我补充:)

【问题讨论】:

【参考方案1】:

有多种选项可用于保护特定用户的访问。

如果您使用的是 AWS Cognito,您可以使用 IAM 策略授予对 S3 中特定存储桶和对象的访问权限,方法是使用 AWS JavaScript SDK 并直接从 Angular 应用程序访问您在使用 AWS Cognito(或通过 Cognito 联合)进行身份验证后收到的凭证. 您还可以使用 AWS CloudFront Signed Urls 和 Signed Cookies 来保护对 S3 对象的访问。要访问内容,使用后端端点(对于经过身份验证的用户),您可以生成签名 URL 或签名 Cookie,Angular 应用程序将使用它们通过 CloudFront 访问 S3。 另一种选择是从服务器端访问 S3 并返回文件(与其他方法相比,这会在规模上为您的服务器增加大量开销,因此不推荐,除非您有特定的场景来动态修改文件或内容检索前) 您还可以使用 AWS API Gateway 作为 S3 的代理来提供文件。此处适用 10MB 文件大小限制,因为 API Gateway 最多可以传输 10MB 的文件。

【讨论】:

非常感谢阿山的回答。我真的很感激 :) 顺便说一句,您提到的“AWS CloudFront 签名网址”无法访问。 谢谢。修复了链接。 嗨阿山,如果你不介意,你能帮我也回答一下这个问题吗?谢谢 :) ***.com/questions/46484880/…【参考方案2】:

您可以通过 S3 存储桶访问特定的 IAM 角色。因此,创建一个新用户并将 IAM 策略附加到该用户。使用该角色配置您的 Lambda。如果您愿意,您可以根据每种用户类型创建多个角色(例如:- 移动用户唯一的角色,桌面用户的另一个角色等)

请详细了解如何将 Amazon S3 存储桶访问权限限制为特定 IAM 角色here

【讨论】:

您好 Vijayanath,谢谢您的回答 :) 是否有可以在 Ionic 2 和 Angular 2 中使用的示例代码?谢谢

以上是关于如何只允许特定用户访问 Amazon S3 上的内容的主要内容,如果未能解决你的问题,请参考以下文章

Amazon S3 存储桶:拒绝列表、读取、写入特定文件夹

允许用户访问特定 S3 存储桶进行备份的 AWS IAM 策略

如何保护 Amazon S3 URL

Amazon S3 策略只允许上传而不是覆盖 [重复]

Amazon S3 - 不允许的方法

使用 Amazon S3 阻止公有访问