簡體   English   中英

在使用Clojure的Amazonica創建S3簽名URL時,如何指定ACL策略?

[英]How do you specify an ACL policy when creating an S3 signed URL with Clojure's Amazonica?

我正在嘗試使上傳具有public-read的ACL。 Amazonica的文檔非常精簡,經過數小時的修修補補后,我無法確定如何實現這一目標。 簡而言之,我無法弄清楚如何讓它簽署標題。

服務器端,我的代碼看起來像這樣。

(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"}
   })

客戶端,我抓住創建的URL並執行XHR PUT請求

var xhr = new XMLHttpRequest();
    xhr.open("PUT", signedUrl);
    xhr.setRequestHeader('Cache-Control', 'max-age=31557600')
    xhr.onload = ...
    xhr.onerror = ...
xhr.send(file);

這完全有效,除了它有錯誤的ACL:“私人”而不是“公共”

添加客戶端很容易

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部分從不包含任何其他參數。

我盲目地嘗試了各種組合

(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?

我沒有直接的答案,但需要考慮的解決方法:使s3存儲桶中的所有對象都默認為公共讀取。

您可以通過將此存儲桶策略添加到存儲桶(當然替換bucketnm )來執行此操作:

{
  "Id": "Policy1397632521960",
  "Statement": [
    {
      "Sid": "Stmt1397633323327",
      "Action": [
        "s3:GetObject"
      ],
      "Effect": "Allow",
      "Resource": "arn:aws:s3:::bucketnm/*",
      "Principal": {
        "AWS": [
          "*"
        ]
      }
    }
  ]
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM