正如问题所示,锁定的s3 IAM用户成功使用django-storages所需的最低权限是多少?目前我用过类似的东西
{
"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/*"
}
]
}
这实际上可能有点矫枉过正。还有什么想法?
Fiver的答案不足以在django-storage中运行collectstatic。除了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/*"
}
]
}
我不是100%肯定django-storages,因为我使用 可爱,buddly 它基于django-storage的S3部分。我刚刚发现cuddlybuddly使用起来更简单,效果更好,加上这个名字真棒!
无论如何,我有一个使用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政策:
策略的最大大小为20 KB
Resource的值必须以存储桶名称或
存储桶名称及其下的路径(存储桶/)。如果只有存储桶名称
指定,没有尾随/,该政策适用于桶。
每个策略都必须具有唯一的策略ID(Id)
策略中的每个语句都必须具有唯一的语句ID(sid)
每个策略必须仅涵盖一个存储桶和其中的资源
bucket(在编写策略时,不要包含引用的语句
其他存储桶中的其他存储桶或资源)
最后,对于任何想要这样做的人,不要更改日期值 Version
密钥,亚马逊使用此值来解析策略格式。
希望这可以帮助!
这对我行得通:
{
"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/*"
}
]
}