Amazon S3 可以在上傳時設定為 non-public,這種檔案如果要讓使用者讀取,就必須透過 URL 簽名的方式...
官方的文件是「Authenticating REST Requests」這篇,不過官方文件把所有細節都寫上去,如果第一次接觸的人反而不知道要怎麼辦...
Thomas Riboulet 給了一個 Quickstart 的範例:「Signing Amazon S3 URLs」,裡面雖然是 Ruby code,不過 code 的邏輯很簡單...
以 test.gslin.org 為例,想要產生出從現在開始 3600 秒內有效的 url 可以這樣寫,用過一次後再回去看官方文件,就會發現其實就是官方文件的「REST Authentication Example 3: Query String Authentication Example」這段,如果以 PHP 寫會長這樣:
<?php $access_key = ""; $secret_key = ""; $timestamp = time() + 3600; $data = "GET\n\n\n${timestamp}\n/test.gslin.org/test.txt"; $sign = urlencode( base64_encode( hash_hmac('sha1', $data, $secret_key, true) ) ); echo "http://test.gslin.org.s3.amazonaws.com/test.txt?" . "AWSAccessKeyId=${access_key}&" . "Expires=${timestamp}&" . "Signature=${sign}\n";
接下來來研究 CloudFront 的部份...