約 10 分鐘

如何上傳檔案到 Amazon S3 並分享公開連結

Amazon S3 是元祖級的物件儲存服務,可搭配 Aktar 的 Amazon S3 預設組合使用。唯一需要留意的是公開存取:S3 預設會封鎖公開存取,所以你需要加入允許公開讀取的儲存貯體政策,或在儲存貯體前方放置 CloudFront。

事前準備

  • 一個 AWS 帳號
  • 建立 S3 儲存貯體和 IAM 使用者的權限
  • 已在 Mac 上安裝 Aktar

操作步驟

  1. 1

    建立儲存貯體

    在 S3 主控台中按一下 Create bucket,選擇一個全球唯一的名稱和離你最近的區域,例如 eu-central-1。物件擁有權可以保留預設的「Bucket owner enforced」:Aktar 不使用 ACL。

  2. 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. 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. 4

    在 Aktar 中加入目的地

    在設定 → 目的地 → 加入目的地中選擇 Amazon S3,並輸入下表中的值。端點和區域必須與儲存貯體所在的區域一致。

  5. 5

    測試並儲存

    按一下測試連線,確認儲存貯體可以寫入、公開 URL 可以提供檔案,然後按一下儲存。

Aktar 中的設定

在「設定 → 目的地 → 加入目的地」中輸入以下值。欄位名稱與 App 中一致。

欄位範例值
服務供應商Amazon S3
端點https://s3.eu-central-1.amazonaws.com使用儲存貯體所在的區域。
區域eu-central-1
存取金鑰 IDAKIA…來自 IAM 使用者。
私密存取金鑰••••••••
儲存貯體your-bucket
公開基礎 URLyour-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 上提問。