问题 django-storage对s3 IAM用户有什么权限?


正如问题所示,锁定的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/*"
    }
  ]
}

这实际上可能有点矫枉过正。还有什么想法?


11784
2017-10-18 19:04


起源

你肯定会删除的一件事是's3:ListAllMyBuckets'动作。 django-storages的S3后端永远不会获得你的存储桶列表。 - vvd


答案:


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/*"
    }
  ]
}

8
2017-11-01 04:19





我不是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 密钥,亚马逊使用此值来解析策略格式。

希望这可以帮助!


2
2017-08-07 01:28





这对我行得通:

{
    "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/*"
        }
    ]
}

0
2018-01-25 14:32