【问题标题】:What bucket permissions are required to download zip file directly from URL?直接从 URL 下载 zip 文件需要哪些存储桶权限?
【发布时间】:2021-07-11 01:15:56
【问题描述】:

我正在学习一个教程here,如果我从教程中获取这个 s3 URL,https://s3.eu-central-1.amazonaws.com/deepset.ai-farm-qa/datasets/documents/wiki_gameofthrones_txt.zip,我可以直接将 zip 文件下载到本地。

当我替换我自己的 zip 文件 URL 时,我收到 BadZipFile: File is not a zip file 的错误,如果我尝试我的 zip 文件 URL,我的权限被拒绝而不是能够下载。

我还使用终端确认了 zip 文件的格式正确:unzip -t zipfile.zip

我需要在 s3 或 s3 对象上更改哪些权限才能允许直接从 URL 下载 zip 文件?

IAM s3 权限仍然很新,当前权限是创建存储桶时的标准权限。

【问题讨论】:

    标签: amazon-web-services amazon-s3


    【解决方案1】:

    Amazon S3 中的对象默认为私有。这意味着它们不能通过匿名 URL 访问(如您所示)。

    如果您希望特定对象公开可用(意味着知道该 URL 的任何人都可以访问它),请使用 S3 管理控制台中的 公开 选项.这也可以在上传对象时通过指定ACL=public-read进行配置。

    如果您希望整个存储桶或存储桶的特定路径公开,那么您可以创建一个存储桶策略来授予对存储桶的访问权限。这需要禁用 S3 Block Public Access

    您还可以生成 n Amazon S3 pre-signed URL,它提供对私有对象的限时访问。预签名 URL 添加了附加信息,授予访问私有对象的权限。这就是 Web 应用程序向授权用户(例如照片网站)提供对私有对象的访问权限的方式。

    如果通过 AWS API 调用或AWS Command-Line Interface (CLI) 访问对象,则使用 AWS 凭证来识别用户。如果用户有权访问该对象,则他们可以下载它。此方法使用 API 调用而不是 URL。

    【讨论】:

      【解决方案2】:

      两种解决方案:

      • 公开您的存储桶/文件。检查this(不推荐)

        {
          "Version":"2012-10-17",
          "Statement":[
            {
              "Sid":"PublicRead",
              "Effect":"Allow",
              "Principal": "*",
              "Action":["s3:GetObject","s3:GetObjectVersion"],
              "Resource":["arn:aws:s3:::DOC-EXAMPLE-BUCKET/*"]
            }
          ]
        }
        
      • 使用带有 SDK 的预签名 URL .. 检查 this

        var params = {Bucket: bucketname , Key: keyfile , Expires: 3600 , ResponseContentDisposition :  `attachment; filename="filename.ext"` };
        
        var url = s3.getSignedUrl('getObject', params);
        

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2021-04-11
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2012-12-31
        • 2013-04-29
        • 1970-01-01
        相关资源
        最近更新 更多