約 10 分鐘
如何上傳檔案到 Amazon S3 並分享公開連結
Amazon S3 是元祖級的物件儲存服務,可搭配 Aktar 的 Amazon S3 預設組合使用。唯一需要留意的是公開存取:S3 預設會封鎖公開存取,所以你需要加入允許公開讀取的儲存貯體政策,或在儲存貯體前方放置 CloudFront。
事前準備
- 一個 AWS 帳號
- 建立 S3 儲存貯體和 IAM 使用者的權限
- 已在 Mac 上安裝 Aktar
操作步驟
- 1
建立儲存貯體
在 S3 主控台中按一下 Create bucket,選擇一個全球唯一的名稱和離你最近的區域,例如
eu-central-1。物件擁有權可以保留預設的「Bucket owner enforced」:Aktar 不使用 ACL。 - 2
允許公開讀取
方案 A,儲存貯體政策:在儲存貯體的 Permissions 分頁中,關閉會封鎖公開儲存貯體政策的「Block public access」設定,然後加入以下儲存貯體政策(請替換
YOUR-BUCKET):{ "Version": "2012-10-17", "Statement": [{ "Sid": "PublicRead", "Effect": "Allow", "Principal": "*", "Action": "s3:GetObject", "Resource": "arn:aws:s3:::YOUR-BUCKET/*" }] }方案 B,CloudFront:讓儲存貯體保持私人,並建立一個以該儲存貯體為來源的 CloudFront 分配(使用 Origin Access Control)。這樣就能在自訂網域上使用 HTTPS,並享有快取。
- 3
為 Aktar 建立 IAM 使用者
在 IAM 中建立一個使用者,並附加一個只允許 Aktar 對該儲存貯體執行必要操作的政策:
{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": "s3:ListBucket", "Resource": "arn:aws:s3:::YOUR-BUCKET" }, { "Effect": "Allow", "Action": ["s3:PutObject", "s3:GetObject", "s3:DeleteObject"], "Resource": "arn:aws:s3:::YOUR-BUCKET/*" } ] }接著為該使用者建立 access key,並複製 Access Key ID 和 Secret Access Key。
- 4
在 Aktar 中加入目的地
在設定 → 目的地 → 加入目的地中選擇 Amazon S3,並輸入下表中的值。端點和區域必須與儲存貯體所在的區域一致。
- 5
測試並儲存
按一下測試連線,確認儲存貯體可以寫入、公開 URL 可以提供檔案,然後按一下儲存。
Aktar 中的設定
在「設定 → 目的地 → 加入目的地」中輸入以下值。欄位名稱與 App 中一致。
| 欄位 | 範例值 |
|---|---|
| 服務供應商 | Amazon S3 |
| 端點 | https://s3.eu-central-1.amazonaws.com使用儲存貯體所在的區域。 |
| 區域 | eu-central-1 |
| 存取金鑰 ID | AKIA…來自 IAM 使用者。 |
| 私密存取金鑰 | •••••••• |
| 儲存貯體 | your-bucket |
| 公開基礎 URL | your-bucket.s3.eu-central-1.amazonaws.com或你的 CloudFront 網域。 |
小技巧
- 如果要公開分享連結,建議搭配自訂網域使用 CloudFront:可以享有快取,儲存貯體本身也能保持私人。
- 把 IAM 政策限定在單一儲存貯體。Aktar 永遠不需要整個帳號的權限。
- 選擇離你近的區域可以加快上傳;如果不使用 CDN,也要考慮離你的觀眾近一點。
- 如果要讓上傳項目自動刪除,IAM 使用者還需要對儲存貯體具有
s3:GetLifecycleConfiguration和s3:PutLifecycleConfiguration權限,或者由你自行加入生命週期規則。請參閱會過期的上傳項目。
疑難排解
「測試連線」回報區域或重新導向相關的錯誤
端點和區域必須與建立儲存貯體時的區域一致,例如 https://s3.eu-central-1.amazonaws.com 搭配 eu-central-1。
上傳失敗並顯示 Access Denied
IAM 使用者需要對 YOUR-BUCKET/* 具有 s3:PutObject 權限,並對儲存貯體本身具有 s3:ListBucket 權限。
連結回傳 403
儲存貯體政策不存在或仍被「Block public access」封鎖,或者 CloudFront 無法讀取儲存貯體。請參閱 Access Denied 錯誤。
還是卡住了?瀏覽常見問題,或到 GitHub 上提問。