【问题标题】:Accessing files from AWS S3 Bucket从 AWS S3 存储桶访问文件
【发布时间】:2020-06-15 23:12:51
【问题描述】:

我正在使用 NodeJS 将文件上传到我的 S3 存储桶中。作为回应,我收到了该文件的链接。

例如我收到https://my-bucket-name.s3.ap-south-1.amazonaws.com/testUpload_s.txt

该存储桶目前不允许公开访问。我应该如何安全地访问存储桶中的文件?我想知道下面的方法是否安全?

  1. 允许对存储桶进行公共访问

  2. 在上传过程中,每个文件都会被随机分配一个唯一的名称

  3. 此文件名或响应 URL 存储在数据库中

  4. 当必须提取文件时,我使用从 上传响应以从存储桶访问文件

这种方法安全吗?如果没有,还有其他方法可以做到吗?

【问题讨论】:

    标签: node.js amazon-web-services amazon-s3


    【解决方案1】:

    有许多选项可以让客户端访问 S3 中的对象,包括:

    1. 公开对象
    2. 要求客户端使用 AWS 凭证进行身份验证
    3. 为客户提供一个有时间限制的预签名 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

    【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2016-03-07
    • 2022-12-09
    • 1970-01-01
    • 2016-11-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多