為了讓自己架設的Drupal網站能夠提高傳遞資料到各區域的速度和維持群組保密性,只有特定群組的人可以上傳與取得資料,所以採用了S3 private bucket和Cloudfront,上傳與取得資料全部須經過Cloudfront。
Requisite:
請安裝Drupal的Storage API module。
1.在s3 console新增一個bucket,bucket名稱必須符合CNAME規範(ex:不要有sunny-box這種中間有一槓的名稱),也就是正常網址的格式,且名稱設定成 subdomain.example.com (例如我們買到域名example.com),以及bucket權限設定成private。此時aws s3若沒有人用到這個bucket名稱,則s3會產生這個bucket名稱給我們用,bucket完整網址通常是 subdomain.example.com.s3.amazonaws.com。
2.在cloudfront新增一個distribution for s3,cloudfront的origin填S3 bucket的完整網址(例如是subdomain.example.com.s3.amazonaws.com),且要自行命名這個distribution的CNAME(必須相同於s3 bucket名稱,例如是subdomain.example.com),distribution的CNAME會在DNS service provider用到;記得要選擇Restrict Bucket Access是「Yes」。新增這個distribution時,要在cloudfront console新增一個cloudfront的origin identity access,如果原本就有origin identity access 就不用新增。
3.對這個新增的 bucket,設定他的 bucket policy,policy 裡面要寫對
4.在 DNS service provider(例如是 Godaddy )設定 sub-domain 指向 cloudfront,在 DNS service provider 介面指定 CNAME 指到 Cloudfront 自行命名的名稱。
5.在 Drupal 管理者介面中,依序選擇路徑:架構-> File Storage ->自己先前產生的s3 container。填入讓 Drupal 使用aws IAM user 的 S3 access key ID 和 secret access key 資訊,再選擇 container 頁面的編輯標籤,僅勾選編輯頁面內的 Bucket name is CNAME alias 選項,接著按下 Save 按鈕。完成這步驟,架在 AWS_EC2 (或者是其他 VPS provider )上的 Drupal 網站,將只會透過 cloudfront 的 distribution 上傳檔案到 S3 ,而 Drupal 網站的檔案下載連結將只會顯示 submain.example.com 網址名稱,不會是 submain.example.com.s3.amazonaws.com ,這會使網站的使用者僅能透過 cloudfront 上傳下載檔案,不會直接存取到 S3 bucket。提醒:在AWS IAM 創立 User 和 Group 時,User 要加入到 Group 內,Group 也要創立相對應的 policy,才能管理群組內的帳戶使用各項AWS服務的權限控管。