[英]Uploads to S3 through CloudFront via Signed URLs?
我有使用 S3 源的 CloudFront。 如果可能,我希望能夠通過 CloudFront 分配生成用於將值上傳到 S3 的簽名 URL。
我一直在研究文檔,但沒有找到任何關於此的內容。 我想只要傳遞查詢參數,但情況是這樣嗎?
是的,您可以使用 CloudFront 分配來提取 S3 文件上傳。
根據您的設置,在另一個答案中建議的S3 Transfer Acceleration 可能仍然是更好的選擇,它當然有更好的文檔記錄並且有更多的實現示例!
s3:GetObject
訪問權限)作為起點,但無論如何我們都會將其添加/更改為s3:PutObject
。POST
XXXXX
是 OAI ID,而YOUR-TARGET-BUCKET
是您的目標存儲桶: "Version": "2008-10-17",
"Id": "PolicyForCloudFrontPrivateContent",
"Statement": [
{
"Sid": "1",
"Effect": "Allow",
"Principal": {
"AWS": "arn:aws:iam::cloudfront:user/CloudFront Origin Access Identity XXXXX"
},
"Action": "s3:GetObject",
"Resource": "arn:aws:s3:::YOUR-TARGET-BUCKET/*"
}
]
}
s3:PutObject
添加為允許的操作,但如果您僅設置內容攝取的分發(即通過另一個分發提供,或根本不公開可用),您可以只替換允許的操作: "Action": "s3:PutObject",
分配更新后,您將能夠通過使用 Postman 或其他方式向https://your-distribution-url/desired-s3-key-name
發出PUT
請求,將文件添加到您的存儲桶中。 如果這是您配置的內容,請記住在此處使用簽名網址。
您的客戶端與 CF 邊緣的連接應該始終更快,而據傳聞,S3 加速速度比較並不總是有利的。
如果我對 AWS 定價的理解正確,那么與S3 Transfer Acceleration費用(0.04-0.08 美元/GB,具體取決於區域)相比,您需要支付“區域數據傳出到源”(0.02-0.16 美元/GB,具體取決於區域)。
原因是要為來自世界各地的用戶將文件上傳到中央存儲桶提供低延遲訪問嗎? 在這種情況下,我建議改為使用S3 Transfer Acceleration。
出於多種原因,您可能需要在存儲桶上使用Transfer Acceleration,包括:
您擁有從世界各地上傳到集中存儲桶的客戶。
您會在各大洲之間定期將千兆字節的數據傳輸到TB的數據。
上傳到Amazon S3時,您將無法利用Internet上的所有可用帶寬。
https://docs.aws.amazon.com/AmazonS3/latest/dev/transfer-acceleration.html
Amazon S3傳輸加速正在場景中使用Cloudfront。
傳輸加速利用了Amazon CloudFront的全球分布邊緣位置。 當數據到達邊緣位置時,數據會通過優化的網絡路徑路由到Amazon S3。
我以為只要傳遞查詢參數,情況就是這樣嗎?
不完全的。 可以將CloudFront配置為傳遞查詢字符串參數,但是它仍然不支持此用例,因為CloudFront X-Amz-Cf-Id
標頭注入發送到S3的請求中。 因為標題以X-Amz-*
開頭,所以S3要求對其進行簽名...但這是不可能的,因為您無法知道其值。
可以授予CloudFront原始訪問身份寫入存儲桶的權限,但這也很麻煩,因為隨后CloudFront可以讀取的任何路徑也可以寫入-CloudFront簽名的URL允許“訪問”-無論哪種訪問方式CloudFront如果CloudFront通過OAI允許寫入存儲桶,則它本身具有-並且不能配置為只讀。
傳輸加速是一種更好的解決方案,因為它使用CloudFront網絡進行傳輸,但是可以理解本機S3簽名的URL。 您想要在Lambda函數中使用域名而不是存儲桶名稱來對URL進行簽名的爭論失敗了……因為您在任何情況下都無法對S3 URL進行簽名,而實際上並不知道存儲桶名稱。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.