【问题标题】:AWS S3 uploading an object which is publicly readableAWS S3 上传公开可读的对象
【发布时间】:2020-03-30 15:04:50
【问题描述】:

我正在使用 AWS v2 java SDK。 我正在尝试将对象上传到我的存储桶。我希望该对象是公开可读的。

我所做的如下:

     PresignedPutObjectRequest presignedRequest =S3Presigner.create()
                .presignPutObject(z -> z.signatureDuration(Duration.ofMinutes(10))
                    .putObjectRequest(
                                por -> por.bucket("MYBUCKET")
                                    .key("MYOBJECTKEY")
                                    .acl(ObjectCannedACL.PUBLIC_READ)));
   URL url = presignedRequest.url(); 

然后我使用此 URL 上传文件。执行此操作时收到 403 响应。

如果我删除添加 acl 的行,那么上传就可以了。

如果我将 ACL 更改为 PRIVATE,也会失败。

从我的 aws 控制台,我可以公开一个对象,所以我不认为这是一个存储桶策略问题。

如何解决这个问题?我想将对象上传到存储桶并使其公开可读

经过我的更多调试后,URL 的构建方式似乎存在问题。
这是我不添加 ACL 时 URL 的一部分

&X-Amz-SignedHeaders=host&X-Amz-Expires=120  

这是带有 ACL 的 URL 的相似部分

&X-Amz-SignedHeaders=host%3Bx-amz-acl&X-Amz-Expires=120  

URL 构建看起来很糟糕

【问题讨论】:

    标签: java amazon-web-services amazon-s3


    【解决方案1】:

    由于预签名 URL 仅在 ACL 公开时才授予访问权限,因此您可能需要添加 x-amz-acl=public-read 标头以满足约束。

    见:PutObjectAcl - Amazon Simple Storage Service

    【讨论】:

    • 这行得通。我很想知道怎么做。例如,当我使用 ACL“公共读取”创建 URL 并使用带有标头“authenticated-read”的 URL 时,PUT 请求被禁止,这是预期的行为。但我不明白,S3 怎么知道拒绝这个,因为创建时间 acl,没有出现在 URL 中
    • 预签名 URL 的签名基于标头的哈希。如果标头不匹配,则请求被拒绝。
    【解决方案2】:

    为了完整起见,设置public read header同时上传对象的代码sn-p如下

    HttpURLConnection connection = (HttpURLConnection) url.openConnection();
    connection.setDoOutput(true);
    connection.setRequestProperty("Content-Type", "text/plain");
    connection.setRequestProperty("x-amz-acl", "public-read");
    connection.setRequestMethod("PUT");
    OutputStreamWriter out = new OutputStreamWriter(connection.getOutputStream());
    out.write("This text uploaded as an object via presigned URL.");  
    out.close();  
    

    关键部分是

    connection.setRequestProperty("x-amz-acl", "public-read");
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2021-04-21
      • 1970-01-01
      • 2011-09-25
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-08-08
      • 1970-01-01
      相关资源
      最近更新 更多