从 AWS S3 存储桶访问文件
Posted
技术标签:
【中文标题】从 AWS S3 存储桶访问文件【英文标题】:Accessing files from AWS S3 Bucket 【发布时间】:2020-06-15 23:12:51 【问题描述】:我正在使用 NodeJS 将文件上传到我的 S3 存储桶中。作为回应,我收到了该文件的链接。
例如我收到https://my-bucket-name.s3.ap-south-1.amazonaws.com/testUpload_s.txt
该存储桶目前不允许公开访问。我应该如何安全地访问存储桶中的文件?我想知道下面的方法是否安全?
允许对存储桶进行公共访问
在上传过程中,每个文件都会被随机分配一个唯一的名称
此文件名或响应 URL 存储在数据库中
当必须提取文件时,我使用从 上传响应以从存储桶访问文件这种方法安全吗?如果没有,还有其他方法可以做到吗?
【问题讨论】:
【参考方案1】:有许多选项可以让客户端访问 S3 中的对象,包括:
-
公开对象
要求客户端使用 AWS 凭证进行身份验证
为客户提供一个有时间限制的预签名 URL
它们各自服务于不同的用例。如果任何人都可以安全地访问该文件(例如,该文件是在公共网站上显示的图像),请使用 #1。如果客户端具有 AWS 凭证,请使用 #2。如果您不想公开文件但客户端没有 AWS 凭证,请使用 #3。注意 #3 预签名的 URL 是有时间限制的。
【讨论】:
那么如果我们考虑一个用户发布图片的社交平台,将对象公开并通过链接或文件名访问它是否安全?如果不是,这种情况下必须采用哪种方法? 只有您可以回答这个问题,因为这取决于您提供的服务的性质。如果用户通过服务知道他们发布的图像将公开可见,那么是的,将它们公开。如果他们希望它们是私有的,并且只对他们自己和他们明确与之共享的其他用户可见,则将它们设为私有并通过预签名 URL 共享。【参考方案2】:您不需要存储 URL。您可以使用文件名查询 S3 存储桶中的对象。
对于从外部访问使用签名的 url。
https://docs.aws.amazon.com/sdk-for-go/v1/developer-guide/s3-example-presigned-urls.html
【讨论】:
你有关于如何从 NodeJS aws-sdk 为文件生成签名 url 的资源吗? 这是一个很好的例子***.com/questions/38831829/… 这是一个很好的例子...***.com/questions/38831829/…以上是关于从 AWS S3 存储桶访问文件的主要内容,如果未能解决你的问题,请参考以下文章
Spring Boot Amazon AWS S3 存储桶文件下载 - 拒绝访问
只能从我的 ElasticBeanStalk 实例访问 AWS S3 存储桶