AWS S3 公開存取權完整指南

更新日期: 2024 年 12 月 18 日

AWS S3 提供強大的存儲功能,但預設設置下,公開存取權 是封鎖的,這是為了保護資料安全。

然而,有些情境下,我們需要將 S3 存儲桶(Bucket)或物件設置為公開存取,例如分享靜態資源或網站內容。

本篇文章將帶你了解什麼是公開存取權、何時需要使用、潛在風險以及如何正確且安全地設置公開存取權限。


什麼是公開存取權?

公開存取權 指的是允許所有人(包括未經身份驗證的使用者),對你的 S3 存儲桶和物件進行存取操作,例如:

  • 讀取:下載或查看檔案。
  • 寫入:上傳或覆蓋檔案。
  • 刪除:移除檔案。

這種存取不需要 AWS 帳戶或 IAM 身份驗證,只要擁有物件的 URL,就能直接訪問。


什麼情況下需要啟用「公開存取權」?

公開網站內容

  • 如果你的 S3 Bucket 用於存放靜態網站內容(例如 HTML、CSS、JavaScript、圖片),你需要讓訪客可以自由讀取這些檔案。
  • 例如:部落格圖片、產品頁面的 CSS 檔案。

靜態資源或檔案分享

  • 若你需要公開分享特定的資源(如圖片、影片或 PDF 文件),可透過 S3 提供公開讀取權限。
  • 例如:分享活動海報、可供下載的產品手冊等。

第三方服務存取

  • 有些外部應用程式或工具需要存取你的 S3 檔案,若無身份驗證機制,啟用公開存取可簡化流程。

風險與安全考量

啟用公開存取權雖然方便,但同時也存在一定風險:

資料洩漏

  • 未經授權的使用者可查看或下載敏感資料。
  • 例如:誤將用戶資料、私密文件設為公開存取。

資料覆寫或刪除

  • 如果錯誤授予「寫入」或「刪除」權限,惡意使用者可能會覆寫或刪除你的檔案。

資源濫用

  • 公開的物件可能被大量訪問,導致 S3 流量增加,進而提高成本。

如何安全地啟用公開存取權?

僅授予「讀取」權限

要安全地設置公開讀取權限,需在 Bucket Policy 中明確授予 s3:GetObject 動作。

範例:公開讀取權限

將以下範例設定貼到 Bucket Policy 中:

{
  "Version": "2012-10-17",
  "Statement": [
    {
      "Effect": "Allow",
      "Principal": "*",
      "Action": "s3:GetObject",
      "Resource": "arn:aws:s3:::your-bucket-name/*"
    }
  ]
}
  • Principal: "*" 表示允許所有人存取。
  • Action: "s3:GetObject" 限定只允許讀取操作。
  • Resource 包含你的 Bucket 名稱及所有物件(/* 表示所有檔案)。

限制存取來源

你可以進一步限制存取來源,例如:

  • 限制 IP 地址:只允許特定網段的訪客存取。
  • 限制 Referer:只有通過特定網站鏈接的用戶才能訪問。

範例:限制 Referer 存取

{
  "Version": "2012-10-17",
  "Statement": [
    {
      "Effect": "Allow",
      "Principal": "*",
      "Action": "s3:GetObject",
      "Resource": "arn:aws:s3:::your-bucket-name/*",
      "Condition": {
        "StringLike": {
          "aws:Referer": "https://your-website.com/*"
        }
      }
    }
  ]
}

避免公開「寫入」權限

千萬不要授予 s3:PutObjects3:DeleteObject 權限給所有人,否則任何人都能上傳、覆蓋或刪除你的檔案。

使用預簽名 URL 進行控制

如果檔案需要暫時公開存取,但不想設置為永久公開,可以使用預簽名 URL

  • 預簽名 URL 是帶有時效性的存取鏈接,僅允許特定時間內存取檔案。

範例:生成預簽名 URL

aws s3 presign s3://your-bucket-name/your-file-name --expires-in 3600
  • --expires-in 設定鏈接的有效時間(單位:秒)。

啟用公開存取權的步驟

步驟:檢查並關閉「封鎖公開存取」

  1. 進入 S3 控制台,選擇你的 Bucket。
  2. 進入 「權限」(Permissions) 分頁。
  3. 找到 「封鎖公開存取 (Block Public Access)」,點擊 「編輯」
  4. 取消勾選 「封鎖所有公開存取權」,然後儲存更改。

步驟:設定 Bucket Policy

  1. 在同一個 「權限」 分頁中,找到 Bucket Policy 區塊。
  2. 點擊 「編輯」,貼上公開讀取的 JSON 設定。
  3. 儲存變更。

步驟:測試存取 URL

  • 上傳一個檔案至 S3 Bucket。
  • 獲取物件的 URL,打開瀏覽器測試是否能正常訪問。

結論

「公開存取權」適合用於公開內容的場景,如靜態網站文件或資源分享,但啟用時需謹慎管理,避免資料洩漏或成本增加。

  • 僅授予讀取權限,不要授予寫入或刪除權限。
  • 使用安全控制手段,如限制存取來源或生成預簽名 URL。
  • 定期檢查 S3 設定,避免意外公開敏感資料。

Similar Posts