顯示具有 AWS 標籤的文章。 顯示所有文章
顯示具有 AWS 標籤的文章。 顯示所有文章

2018/09/19

透過 AWS 的服務防止圖片盜連

前陣子決定要找部落格的圖床,再加上 Blogger 開始支援 HTTPS,最後決定花點小錢,直接使用 AWS s3 + cloudFront 來當作圖床。

沒錯,流量小的時候的確是只要花一點小錢,但是哪天誤會被 DDoS、圖片被有名網站盜連,這就不是錢錢可以解決的事情了。

「盜連」這個動作在英文是「Hotlinking」,搜尋了一下發現 AWS 可以透過 CloudFront + WAF 的輔助,完成防止盜連的功能:How to Prevent Hotlinking by Using AWS WAF, Amazon CloudFront, and Referer Checking

主要是使用 HTTP header 中的 referer 來做來源檢查,設定可參考下圖。

圖一:先去 CloudFront 察看正常會使用到圖片的平台



圖二:在 WAF 建立規則


這樣大致上就可以解決圖片盜連的問題了。

但,AWS WAF 的定價可不便宜,一個 web ACL 定價是每個月 5 USD,也就是說如果圖片每個月被存取的次數沒有超過 400 次以上,其實用了 WAF 反而費用較高。就請大家自行衡量了。

2014/04/01

將資料同步至 AWS S3

有項工作需要將 BTSync 上的資料同步上 AWS S3,並做靜態網頁使用。原本打算用來將 S3 掛載為虛擬磁碟的 s3ql 來用,但 s3ql 寫入的是 block data 而非 file,檔案同步上去要當作 static website 來用不太可能。

後來發現 AWS command line interface 的 s3 有個功能「sync」,會自動偵測要同步的項目。於是可以寫成:

$ aws s3 sync btsync/ s3://target-bucket

以上已可以將有異動的資料上傳到 AWS S3 上,但若 BTSync 若有檔案刪除,S3 上的資料仍會保留。若要刪除的動作也在 S3 重複一次,則要加上「--delete」參數:

$ aws s3 sync btsync/ s3://target-bucket --delete

還差一個步驟。要做 static web hosting,檔案必須讓所有人可以讀取,所以從網頁上操作的話,需要手動「Make Public」。


而 CLI 則是使用 --grants 幫檔案加上權限。參考 AWS ACL 設定,要讓所有人均可讀取,要設定成:

--grants read=uri=http://acs.amazonaws.com/groups/global/AllUsers

如此一來,上傳的檔案會自動設定為公開。

完整的 sync 指令如下:

aws s3 sync btsync/ s3://target-bucket --delete --exclude ".Sync*" --grants read=uri=http://acs.amazonaws.com/groups/global/AllUsers

最後定 crontab 自動執行,大功告成。