我正在尝试设置 Django 项目以在 AWS S3 存储桶上托管静态图像,但是当我尝试通过 Django 管理面板上传图像时,出现以下错误
这些是我在 Django 中的设置
AWS_ACCESS_KEY_ID = 'some_key'
AWS_SECRET_ACCESS_KEY = 'some_key_aswell'
AWS_STORAGE_BUCKET_NAME = 'bucket_name'
AWS_S3_FILE_OVERWRITE = False
AWS_DEFAULT_ACL = None
DEFAULT_FILE_STORAGE = 'storages.backends.s3boto3.S3Boto3Storage'
AWS_S3_REGION_NAME = 'us-east-2'
存储桶的 Cors 策略设置
[
{
"AllowedHeaders": [
"*"
],
"AllowedMethods": [
"GET",
"POST",
"PUT"
],
"AllowedOrigins": [
"*"
],
"ExposeHeaders": []
}
]
运行 Django 应用程序的计算机(或容器)使用的 IAM 角色需要添加以下 IAM 策略:
{
"Version": "2012-10-17",
"Statement": [
{
"Effect": "Allow",
"Action": [
"s3:GetObject",
],
"Resource": "arn:aws:s3:::<bucket>/<prefix>/*"
}
]
}
如果您的对象已加密,请确保您还允许您的 IAM 角色使用用于加密您的对象的 KMS 密钥。
我过去并将存储桶策略更改为:
{
"Version": "2008-10-17",
"Statement": [
{
"Sid": "AllowPublicRead",
"Effect": "Allow",
"Principal": {
"AWS": "*"
},
"Action": "s3:GetObject",
"Resource": "arn:aws:s3:::YOUR-BUCKET-NAME/*"
}
]
}
并且成功了。
我曾经遇到过同样的错误。我将“Action”:“s3:GetObject”更改为“Action”:“s3:*”。它对我有用