我正在開發一個部署在 Heroku 的 Django(3) 專案。我正在嘗試使用 Django 存盤連接 AWS S3,以將靜態和媒體檔案上傳到 S3 存盤桶。
注意:我在谷歌上搜索了很多并嘗試了我找到的所有解決方案,但沒有解決我的問題,所以請不要將其標記為重復!
我創建了一個啟用了公共訪問的 S3 存盤桶,并添加了以下 CORS 配置:
[
{
"AllowedHeaders": [
"*"
],
"AllowedMethods": [
"GET",
"PUT",
"POST"
],
"AllowedOrigins": [
"*"
],
"ExposeHeaders": []
}
]
此外,創建了一個具有編程訪問權限的 IAM 用戶并授予權限 S3FullAccess
這就是我所擁有的 **settings.py**
AWS_ACCESS_KEY_ID = os.environ.get('AWS_ACCESS_KEY_ID')
AWS_SECRET_ACCESS_KEY = os.environ.get('AWS_SECRET_ACCESS_KEY')
AWS_STORAGE_BUCKET_NAME = os.environ.get('AWS_STORAGE_BUCKET_NAME')
AWS_QUERYSTRING_AUTH = False
AWS_S3_FILE_OVERWRITE = False
AWS_DEFAULT_ACL = None
AWS_S3_REGION_NAME = 'us-east-1'
DEFAULT_FILE_STORAGE = 'storages.backends.s3boto3.S3Boto3Storage'
STATICFILES_STORAGE = 'storages.backends.s3boto3.S3StaticStorage'
如果我直接從存盤桶中打開檔案,我可以在瀏覽器中看到該檔案,但是當我加載我的站點 (pythonist.org) 時,這些檔案回傳 403 forbidden
這是來自瀏覽器的網路選項卡對檔案的回應:
Summary
URL: https://s3.amazonaws.com/pythonist.org/css/normalize.css
Status: 403 Forbidden
Source: Network
Initiator:
pythonist.org:18
不知道這里出了什么問題,提前致謝!
uj5u.com熱心網友回復:
您的存盤桶似乎不可公開訪問。您的公共存盤桶應該有這樣的存盤桶策略(具有一些已洗掉屬性的示例):
{
"Id": "Policy1640778083903",
"Version": "2012-10-17",
"Statement": [
{
"Sid": "Stmt1640778050694",
"Action": [
"s3:DeleteObject",
"s3:GetObject",
"s3:GetObjectAcl",
"s3:ListBucket",
"s3:PutObject",
"s3:PutObjectAcl"
],
"Effect": "Allow",
"Resource": [
"arn:aws:s3:::pythonist.org",
"arn:aws:s3:::pythonist.org/*"
],
"Principal": {
"AWS": [
"YOUR_IAM_USER"
]
}
},
{
"Sid": "Stmt1640778082281",
"Action": [
"s3:GetObject"
],
"Effect": "Allow",
"Resource": "arn:aws:s3:::pythonist.org/*",
"Principal": "*"
}
]
}
您的 IAM 用戶擁有任何權限,而公眾只能獲取物件(不是從這里的根目錄,根據您的需要更改)。使用AWS Policy Generator創建您的策略
轉載請註明出處,本文鏈接:https://www.uj5u.com/gongcheng/403110.html
標籤:
