【问题标题】:Amazon S3 download authenticationAmazon S3 下载身份验证
【发布时间】:2021-08-07 23:16:12
【问题描述】:

我在 Amazon S3 中创建了一个存储桶,并在其中上传了 2 个文件并将它们公开。我有链接,通过这些链接我可以从 Internet 上的任何地方访问它们。我现在想限制谁可以下载这些文件。有人可以帮我吗。我确实尝试了文档,但感到困惑。

我希望在使用公共链接下载时,它应该要求提供一些凭据或其他东西来对用户进行身份验证。这可能吗?

【问题讨论】:

    标签: amazon-web-services authentication amazon-s3 download


    【解决方案1】:

    默认情况下,Amazon S3 中的所有对象都是私有的。然后您可以添加权限,以便人们可以访问您的对象。这可以通过以下方式完成:

    • 单个对象的访问控制列表权限
    • 存储桶策略
    • IAM 用户和组
    • 预签名 URL

    只要其中至少一种方法授予访问权限,您的用户就可以从 Amazon S3 访问对象。

    1.单个对象的访问控制列表

    Amazon S3 管理控制台中的Make Public 选项将向所有互联网用户授予Open/Download 权限。这可用于授予对特定对象的公共访问权限。

    2。存储桶政策

    Bucket Policy 可用于授予对整个存储桶或存储桶一部分的访问权限。它还可用于指定访问限制。例如,策略可以将存储桶中的特定目录公开给来自特定 IP 地址范围的用户,在一天中的特定时间,并且仅在通过 SSL 访问存储桶时。

    存储桶策略是授予对许多对象(例如特定目录)的公共访问权限的好方法,而不必为每个单独的对象指定权限。它通常用于由 S3 存储桶提供的静态网站。

    3. IAM 用户和组

    这类似于定义存储桶策略,但权限分配给特定用户或用户组。因此,只有那些用户有权访问这些对象。用户在访问对象时必须对自己进行身份验证,因此这在通过 AWS API 访问对象时最常用,例如使用来自 AWS Command-Line Interface (CLI)aws s3 命令。

    用户在进行 API 调用时必须提供身份验证,而不是提示进行身份验证。一种简单的方法是将用户凭据存储在本地配置文件中,CLI 将在调用 S3 API 时自动使用该文件。

    4.预签名网址

    Pre-Signed URL 可用于授予对 S3 对象的访问权限,作为“覆盖”访问控制的一种方式。通过附加到期时间和签名,可以通过 URL 访问通常私有的对象。这是无需网络服务器即可提供私人内容的好方法。

    通常,当应用程序希望授予对对象的访问权限时,会构建预签名 URL。例如,假设您有一个照片共享网站,并且用户已对您的网站进行了身份验证。您现在希望在网页中显示他们的图片。图片通常是私有的,但您的应用程序可以生成预签名 URL,授予他们对图片的临时访问权限。预签名 URL 将在特定日期/时间后过期。

    【讨论】:

    • 在预签名 URL 方法中,如果有人监听我们的请求 URL 并在路由器或其他地方获取 URL,现在他可以访问数据了!我们应该如何(甚至我们必须?)处理这个问题?想象一下,如果一个身份验证令牌包含请求的有效负载,现在它可以被处理了。
    • 请提出新问题,而不是通过对旧问题的评论提出问题。但是,答案是……如果您通过 HTTPS 进行通信,那么您的消息内容将不可读。
    • 小心!存储桶是使用公共访问创建的 *默认情况下 * !!
    • @MikeW 存储桶默认不是“使用公共访问创建”。
    • 你必须明确设置@BlockXXX' TRUE, docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/…
    【解决方案2】:

    关于预签名的 URL,签名在请求标头中,因此它应该在 HTTPS/TLS 加密中。但请自己检查。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2013-09-14
      • 2014-12-27
      • 1970-01-01
      • 2019-05-15
      • 1970-01-01
      • 2017-06-14
      • 2011-01-01
      • 1970-01-01
      相关资源
      最近更新 更多