django-storages 基本配置:讓應用程式連接 S3 存儲桶
更新日期: 2024 年 12 月 18 日
本文為 圖片上傳 AWS S3 系列教學,第 14 篇:
- AWS S3 是什麼?
- boto3 與 django-storages:如何在 Django 中對接 AWS S3
- AWS S3 與 IAM:圖片上傳功能的權限管理指南
- S3 與 Postgres 的比較與應用
- Amazon S3 物件所有權設定解析
- AWS S3「阻止所有公開訪問」設定說明
- Amazon S3 儲存桶版本控制完整指南
- 如何設定 S3 儲存桶的「預設加密」?—— 初學者指南
- S3 儲存桶標籤(Tags)簡單介紹:讓你的 S3 管理更輕鬆!
- AWS S3 物件鎖定功能入門指南
- AWS S3 公開存取權完整指南
- AWS CORS 預檢請求與設定指南
- AWS IAM 設定教學:生成訪問密鑰以用於 S3 配置
- django-storages 基本配置:讓應用程式連接 S3 存儲桶 👈 所在位置
- Django-storages 的完整配置教學:從隱密性到快取控制
- Django-storages 完整配置指南:從文件存儲到訪問路徑
- Django-storages 配置:環境變數設定
- Django-storages 與 STORAGES 配置:未來相容性的最佳實踐
- 如何在 Django 中移除 DEBUG URL 的靜態檔案配置
建議閱讀本文前,先閱讀完 圖片上傳功能 系列文
AWS S3 是一個高效的雲端儲存解決方案,廣泛用於存放圖片、影片、靜態資源以及備份檔案等。
當你在使用 django-storages 時,需要先完成 AWS S3 基本的配置,這包括生成訪問密鑰、設置存儲桶名稱及區域,並生成一個存取域名。
本篇文章將逐步解析 AWS S3 配置中的核心參數,幫助新手快速了解如何設置 S3 與應用程式的連接。
django-storages 基本參數配置
以下是需要在程式中設置的基本參數,通常用於 Django 或其他後端框架的設定檔(如 settings.py
):
AWS_ACCESS_KEY_ID = '你的AWS Access Key ID'
AWS_SECRET_ACCESS_KEY = '你的AWS Secret Access Key'
AWS_STORAGE_BUCKET_NAME = 'my-django-bucket'
AWS_S3_REGION_NAME = 'ap-northeast-1' # 東京區域,可根據實際需求調整
AWS_S3_CUSTOM_DOMAIN = f'{AWS_STORAGE_BUCKET_NAME}.s3.amazonaws.com'
參數詳解
AWS_ACCESS_KEY_ID 和 AWS_SECRET_ACCESS_KEY
- 作用:這兩個值是應用程式連接 AWS 的身份憑據,用於授權請求(例如上傳文件到 S3)。
- 如何獲取:
- 這些密鑰需要在 AWS 管理控制台的 IAM 服務中生成。
- 在創建用戶時,AWS 會提供 Access Key ID 和 Secret Access Key,並允許你下載密鑰文件。
- 安全性建議:
- 請將密鑰存放在安全位置,並避免直接將密鑰硬編碼在程式中。
- 使用環境變數或
.env
文件管理密鑰更為安全。
AWS_STORAGE_BUCKET_NAME
- 作用:指定你使用的 S3 存儲桶名稱(Bucket Name)。
- 如何設置:
- 登入 AWS 管理控制台,進入 S3 服務頁面,創建一個新的存儲桶,並記下其名稱。
- 存儲桶名稱必須是全球唯一的,通常包含小寫字母、數字及連字符。
- 範例:
- 如果你創建的存儲桶名稱是
my-django-bucket
,則將其設置為:AWS_STORAGE_BUCKET_NAME = 'my-django-bucket'
- 如果你創建的存儲桶名稱是
AWS_S3_REGION_NAME
- 作用:定義 S3 存儲桶所在的區域(Region)。
- 如何獲取:
- 在 S3 服務中,找到你的存儲桶,進入「屬性 (Properties)」頁籤,可以查看其區域名稱。
- 常見區域代碼:
- 東京:
ap-northeast-1
- 美國東部(弗吉尼亞北部):
us-east-1
- 歐洲(愛爾蘭):
eu-west-1
- 依據你的存儲桶實際位置修改此參數。
- 東京:
AWS_S3_CUSTOM_DOMAIN
- 作用:生成一個基於 S3 的公共域名,用於訪問存儲桶內的文件。
- 格式:
- 預設域名格式為:
<存儲桶名稱>.s3.amazonaws.com
- 假設你的存儲桶名稱是
my-django-bucket
,則域名為:AWS_S3_CUSTOM_DOMAIN = 'my-django-bucket.s3.amazonaws.com'
- 預設域名格式為:
- 應用場景:
- 配置 Django 的靜態和媒體文件,使其可以通過 S3 直接訪問。
如何開始使用這些參數?
步驟 1:生成憑證
- 登入 AWS 管理控制台,使用 IAM 創建用戶,並生成訪問密鑰。
- 保存 Access Key ID 和 Secret Access Key,用於配置程式連接 AWS S3。
步驟 2:創建存儲桶
- 在 AWS S3 服務中創建一個存儲桶,設置全球唯一的名稱,並記錄其區域代碼。
步驟 3:配置程式
- 在應用程式的設定檔(如 Django 的
settings.py
)中,使用上述參數完成配置,確保應用能夠正確連接到 S3。
安全建議與最佳實踐
- 使用環境變數管理憑證
- 將憑證存放在環境變數中,而不是直接硬編碼在程式碼中。
- 例如:
設置環境變數(Linux/macOS):
export AWS_ACCESS_KEY_ID='你的 Access Key ID'
export AWS_SECRET_ACCESS_KEY='你的 Secret Access Key'
在程式中讀取環境變數
import os
AWS_ACCESS_KEY_ID = os.getenv('AWS_ACCESS_KEY_ID')
AWS_SECRET_ACCESS_KEY = os.getenv('AWS_SECRET_ACCESS_KEY')
- 限制存取權限
- 在 IAM 中為用戶分配最小權限(例如只允許訪問特定存儲桶)。
- 啟用 HTTPS 加密傳輸
- 確保所有 S3 請求都通過 HTTPS 傳輸,保護數據安全。
結論
完成上述配置後,你的應用程式應該可以成功連接到 AWS S3,並使用存儲桶進行文件的上傳和管理。
AWS_ACCESS_KEY_ID
和AWS_SECRET_ACCESS_KEY
用於身份驗證。AWS_STORAGE_BUCKET_NAME
和AWS_S3_REGION_NAME
指定了存儲桶的位置和區域。AWS_S3_CUSTOM_DOMAIN
簡化了文件訪問的域名配置。