首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在使用Clojure的Amazonica创建S3签名的网址时,如何指定访问控制列表策略?

在使用Clojure的Amazonica创建S3签名的网址时,如何指定访问控制列表策略?
EN

Stack Overflow用户
提问于 2018-11-21 07:36:29
回答 1查看 273关注 0票数 4

我正在尝试使上传的ACL为public-read。对于Amazonica来说,文档非常单薄,经过几个小时的修修补补,我还没有弄清楚如何实现这个目标。简而言之,我不知道如何让它对头部进行签名。

在服务器端,我的代码如下所示。

代码语言:javascript
复制
(s3/generate-presigned-url 
  creds
  {:bucket-name          "mybucket"
   :method               "PUT"
   :expires              10000
   :key                  "my-key"
   :cache-control        "max-age=31557600;"
   :request-parameters {:x-amz-acl "public-read"}
   })

在客户端,我获取创建和执行XHR PUT请求的URL

代码语言:javascript
复制
var xhr = new XMLHttpRequest();
    xhr.open("PUT", signedUrl);
    xhr.setRequestHeader('Cache-Control', 'max-age=31557600')
    xhr.onload = ...
    xhr.onerror = ...
xhr.send(file);

这种方法工作得很好,除了它的ACL错误:"private“而不是"public”。

添加客户端很容易

代码语言:javascript
复制
var xhr = new XMLHttpRequest();
    xhr.open("PUT", signedUrl);
    xhr.setRequestHeader('Cache-Control', 'max-age=31557600')
    xhr.setRequestHeader('x-amz-acl', 'public-read')
    xhr.onload = ...
    xhr.onerror = ...
xhr.send(file);

但是由于HeadersNotSigned的原因,请求当然会失败。我根本想不出怎么把它添加到服务器端,这样它们才能被签名。SignedHeaders部分从不包含任何其他参数。

我盲目地尝试了各种组合

代码语言:javascript
复制
(s3/generate-presigned-url 
  creds
  {:headers              {:x-amz-acl "public-read"}
   :x-amz-acl            "public-read"
   :metadata             {:x-amz-acl "public-read"}
   :signed-headers       {:x-amz-acl "public-read"}
   :amz-acl "public-read"
   :x-amz-signed-headers {:x-amz-acl "public-read"}
   :X-Amz-SignedHeaders ["x-amz-acl"]
   :request-parameters {:x-amz-acl "public-read"}
   })

如何将ACL策略添加到已签名的url?

EN

回答 1

Stack Overflow用户

发布于 2018-11-21 12:55:14

我没有直接的答案,但有一个变通办法供您考虑:将s3存储桶中的所有对象默认为公共读取。

您可以通过将此存储桶策略添加到您的存储桶中(当然要替换bucketnm )来完成此操作:

代码语言:javascript
复制
{
  "Id": "Policy1397632521960",
  "Statement": [
    {
      "Sid": "Stmt1397633323327",
      "Action": [
        "s3:GetObject"
      ],
      "Effect": "Allow",
      "Resource": "arn:aws:s3:::bucketnm/*",
      "Principal": {
        "AWS": [
          "*"
        ]
      }
    }
  ]
}
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/53403225

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档