14

質問が尋ねるように、ロックダウンされた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/*"
    }
  ]
}

これは実際にはやり過ぎかもしれません。他にアイデアはありますか?

4

5 に答える 5

10

collectstaticファイバーの答えは、で実行するには十分ではありませんdjango-storages@jvc26が行ったすべてを使用しましたs3:ListAllMyBuckets。私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/*"
    }
  ]
}
于 2013-11-01T04:19:36.127 に答える
3

django-storagesのS3部分に基づいたcuddly-buddlyを使用しているため、django-storagesについて100%確信が持てません。私はちょうどかわいい芽が使いやすく、うまく機能していることに気づきました、そして名前は素晴らしいです!

とにかく、私は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ポリシーに関する次の制限に注意してください。

  • ポリシーの最大サイズは20KBです

  • Resourceの値には、バケット名またはバケット名とその下のパス(bucket / )をプレフィックスとして付ける必要があります。末尾の/なしでバケット名のみが指定されている場合、ポリシーはバケットに適用されます。

  • 各ポリシーには一意のポリシーID(Id)が必要です

  • ポリシー内の各ステートメントには、一意のステートメントID(sid)が必要です。

  • 各ポリシーは、単一のバケットとそのバケット内のリソースのみをカバーする必要があります(ポリシーを作成するときは、他のバケットまたは他のバケット内のリソースを参照するステートメントを含めないでください)

最後に、そうしようとする人には、キーの日付値を変更しないでくださいVersion。Amazonはこの値を使用してポリシー形式を解析します。

お役に立てれば!

于 2013-08-07T01:28:45.587 に答える
1

こちらの公式DjangoStorages公式ドキュメントを参照してください:https ://django-storages.readthedocs.io/en/latest/backends/amazon-S3.html#iam-policy

その権限をコピーしてIAMポリシーに貼り付けるだけです。

于 2020-06-28T03:31:47.107 に答える
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/*"
        }
    ]
}
于 2015-01-25T14:32:35.203 に答える
0

IAMやその他の種類のアクセス許可を使用する場合でも、世界中で読み取りアクセスを許可する必要があると思います。だから私はこの構成で成功しました:

{
    "Version": "2012-10-17",
    "Statement": [
        {
            "Sid": "PublicReadGetObject",
            "Effect": "Allow",
            "Principal": "*",
            "Action": "s3:GetObject",
            "Resource": [
                "arn:aws:s3:::buuuuu",
                "arn:aws:s3:::buuuuu/*"
            ]
        }
    ]
}
于 2021-05-31T18:45:02.300 に答える