Basic
前一陣子在實作一個供使用者上傳照片的功能想當然爾,現在應該比較不流行自己 Host 這些照片
於是我使用了 Amazon S3 的服務來解決這個問題
- 想單純玩看看 S3, Amazon 本身的 AWS Management Console 就很好用了,支援上傳、下載、設定權限 …
- 想在 Command Line 的環境下玩 S3,s3cmd 是一個方便的工具,推薦一玩 …
- 至於我的需求,是使用 Python 自動化地完成上傳照片的工作,因此 boto 成為了我的首選,使用方式就請直接參考文件吧: An Introduction to boto’s S3 interface
若是要用 2. 3. 的方式,記得產生 AWS access key and AWS secret key 即可
Public vs. Private
Boto 提供了一些包好的 function, 能使用 Access Control List (ACL) 的存取機制來管理 S3 上的檔案有需要使用的朋友可以自行參閱 Boto 的 文件
補充說明一下,AWS Management Console 介面所提供便捷的檔案「權限設定」
其實背後也是用 ACL 的機制來管理檔案
對我而言,我想要實作的功能是:「將照片傳到 S3 後,設為公開,不接受外連」
因此,我先透過 AWS Management Console 將整個 bucket 設為公開:
-> 點選 Properties -> 選擇要公開的 bucket -> 按下 Add more permissions -> 新增 Everyone 使用者 -> 勾選 List (Read) 的權限接著,接著繼續操作:
#使用 Amazon S3 Bucket Policy 的存取機制來設定外連的限制 -> 點選 Edit bucket policy -> 填入以下範例(需修改) { "Version":"2008-10-17", "Id":"http referer policy example", "Statement":[ { "Sid":"Allow get requests referred by www.mysite.com and mysite.com", "Effect":"Allow", "Principal":"*", "Action":"s3:GetObject", "Resource":"arn:aws:s3:::example-bucket/*", "Condition":{ "StringLike":{ "aws:Referer":[ "http://www.mysite.com/*", "http://mysite.com/*" ] } } } ] }範例來自 官方菜單
如此一來,簡單的上傳與基本版防外連功能就完成了!
補充:記得上傳時幫照片設一下 meta data,諸如 cache-control 之類的屬性,以節省開銷 XD
您好: 能否就 boto 相關心得,到 PyCon Taiwan 投成演講呢? (google 搜 tw.pycon)
回覆刪除其實我也是這次 pycon 的志工 XDDD
刪除前幾天 Keith 寄信向我噓寒問暖時,也有順便催稿 ...
對於 boto 其實我不太熟,要以此為講題有點勉強
由於本月月底我可能會在 Taipei.py 分享使用 bottle web framework 的經驗
因此我偏好趁著本週週末整理資料時
再來評估這些經驗是不是能夠投個閃電秀、或是常規的演講
一起加油!Go!