正如问题所示,锁定的s3 IAM用户成功使用django-storage时所需的最低权限是多少?目前我使用过像
这样的东西{
"Statement": [
{
"Effect": "Allow",
"Action": ["s3:ListAllMyBuckets"],
"Resource": "arn:aws:s3:::*"
},
{
"Effect": "Allow",
"Action": ["s3:ListBucket",
"s3:GetBucketLocation",
"s3:ListBucketMultipartUploads",
"s3:ListBucketVersions"],
"Resource": "arn:aws:s3:::bucket-name"
},
{
"Effect": "Allow",
"Action": ["s3:*Object*",
"s3:ListMultipartUploadParts",
"s3:AbortMultipartUpload"],
"Resource": "arn:aws:s3:::bucket-name/*"
}
]
}
实际上可能有点矫枉过正。还有什么想法吗?
答案 0 :(得分:9)
Fiver的答案不足以在collectstatic
中运行django-storages
。除了s3:ListAllMyBuckets
之外,我使用了@jvc26所做的一切。我认为也不需要s3:ListBucketVersions
。
{
"Statement": [
{
"Effect": "Allow",
"Action": ["s3:ListBucket",
"s3:GetBucketLocation",
"s3:ListBucketMultipartUploads",
"s3:ListBucketVersions"],
"Resource": "arn:aws:s3:::bucket-name"
},
{
"Effect": "Allow",
"Action": ["s3:*Object*",
"s3:ListMultipartUploadParts",
"s3:AbortMultipartUpload"],
"Resource": "arn:aws:s3:::bucket-name/*"
}
]
}
答案 1 :(得分:2)
我不是100%肯定django-storages,因为我使用基于django-storages的S3部分的cuddly-buddly。我刚刚发现cuddlybudd使用起来更简单,效果更好,加上这个名字真棒!
无论如何,我有一个使用Django + S3的项目,并发现以下AWS策略是我项目所需的最低要求:
{
"Version": "2008-10-17",
"Id": "Policy123",
"Statement": [
{
"Sid": "Stmt123",
"Effect": "Allow",
"Principal": {
"AWS": "arn:aws:iam::some-aws-user"
},
"Action": "s3:ListBucket",
"Resource": "arn:aws:s3:::bucket-name"
},
{
"Sid": "Stmt234",
"Effect": "Allow",
"Principal": {
"AWS": "arn:aws:iam::some-aws-user"
},
"Action": [
"s3:DeleteObject",
"s3:GetObject",
"s3:PutObject"
],
"Resource": "arn:aws:s3:::bucket-name/*"
}
]
}
我有需要上传,检索和删除的Django视图,因此可以根据您的需要使用/省略相应的操作。显然,任何人都需要更改用户和存储桶名称。
此外,为了完整性,因为对我来说并不明显,请注意以下有关AWS policies的限制:
策略的最大大小为20 KB
资源的值必须以存储桶名称或后缀为前缀 存储桶名称及其下的路径(存储桶/ )。如果只有桶名称 指定的,没有尾随/ ,该策略适用于存储桶。
每个政策必须具有唯一的政策ID(Id)
策略中的每个语句都必须具有唯一的语句ID(sid)
每个策略必须只包含一个存储桶和资源 bucket(编写策略时,不要包含引用的语句 其他存储桶中的其他存储桶或资源)
最后,对于任何想要这样做的人,请不要更改Version
密钥中的日期值,亚马逊使用此值来解析策略格式。
希望这有帮助!
答案 2 :(得分:1)
在此处参考官方Django存储官方文档:https://django-storages.readthedocs.io/en/latest/backends/amazon-S3.html#iam-policy
您可以简单地将该权限复制并粘贴到您的IAM策略中。
答案 3 :(得分:0)
对我有用:
{
"Statement": [
{
"Effect": "Allow",
"Action": [
"s3:ListBucket",
"s3:GetBucketLocation",
"s3:ListBucketMultipartUploads",
"s3:ListBucketVersions"
],
"Resource": "arn:aws:s3:::bucket_name_here"
},
{
"Effect": "Allow",
"Action": [
"s3:*Object*",
"s3:ListMultipartUploadParts",
"s3:AbortMultipartUpload"
],
"Resource": "arn:aws:s3:::bucket_name_here/*"
}
]
}
答案 4 :(得分:0)
我认为无论您使用 IAM 还是其他类型的权限,都应该授予全球读取权限。所以我通过这个配置成功了:
{
"Version": "2012-10-17",
"Statement": [
{
"Sid": "PublicReadGetObject",
"Effect": "Allow",
"Principal": "*",
"Action": "s3:GetObject",
"Resource": [
"arn:aws:s3:::buuuuu",
"arn:aws:s3:::buuuuu/*"
]
}
]
}