[英]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.