Необходимые разрешения s3cmd S3 для PUT/Sync

При переходе на AWS EC2 я хочу ограничить права доступа к своим экземплярам по уважительной причине. Одна вещь, которую нужно делать, это доступ к файлам на S3 и запись там файлов. Тем не менее, я не могу найти никакого способа достичь этого, не предоставляя все разрешения этому пользователю.

s3cmd позволяет мне называть "ls" и "du" в ведрах s3, на которые я давал разрешение политики, но всегда с ошибкой 403 при попытке выполнить PUT/sync с одной из этих папок. Если я использую свои корневые учетные данные, передача идет прямо.

Итак, я не понимаю, почему, если я даю все разрешения пользователю для указанных ведер, он не может PUT, но если я дам ему arn: aws: s3: * (все ковши), то он может. Не имеет смысла для меня.

Кто-нибудь еще когда-либо занимался этим раньше?

Ответ 1

Попробуйте что-то вроде этого. Я думаю, проблема в том, что вам нужны s3: ListAllMyBuckets и s3: ListBuckets для работы s3cmd. Не уверен, почему, но он не будет работать, если он не сможет получить список ведер. У меня была та же проблема, когда я впервые использовал разрешения с s3cmd, и это было решением.

{
  "Statement": [
    {
      "Action": [
        "s3:ListAllMyBuckets"
      ],
      "Effect": "Allow",
      "Resource": "arn:aws:s3:::*"
    },
    {
      "Action": [ 
          "s3:ListBucket", 
          "s3:PutObject",
          "s3:PutObjectAcl"
      ],
      "Effect": "Allow",
      "Resource": [
          "arn:aws:s3:::bucket/path", 
          "arn:aws:s3:::bucket/path/*"
      ]
    }
  ]
}

Редактировать Я добавил действие s3:PutObjectAcl которое требуется для новых версий s3cmd, как указано Will Jessop ниже.

Ответ 2

Ответ на bwight почти прав (он, вероятно, использовался для более старых версий s3cmd), но мне нужно добавить s3:PutObjectAcl чтобы заставить его работать:

{
  "Version": "2012-10-17",
  "Statement": [
    {
      "Sid": "Stmt123456",
      "Effect": "Allow",
      "Action": [
        "s3:ListAllMyBuckets"
      ],
      "Resource": [
        "arn:aws:s3:::*"
      ]
    },
    {
      "Sid": "Stmt123457",
      "Effect": "Allow",
      "Action": [
        "s3:ListBucket",
        "s3:PutObject",
        "s3:PutObjectAcl"
      ],
      "Resource": [
        "arn:aws:s3:::bucketname",
        "arn:aws:s3:::bucketname/*"
      ]
    }
  ]
}

Ответ 3

Я пытался делать большие загрузки файлов, и политика не работала хорошо для меня, я закончил добавлять следующую политику к пользователю:

{
    "Version": "2012-10-17",
    "Statement": [
        {
            "Sid": "Stmt1397834652000",
            "Effect": "Allow",
            "Action": [
                "s3:ListAllMyBuckets"
            ],
            "Resource": [
                "arn:aws:s3:::*"
            ]
        },
        {
            "Sid": "Stmt1397834745000",
            "Effect": "Allow",
            "Action": [
                "s3:ListBucket",
                "s3:ListBucketMultipartUploads",
                "s3:GetBucketLocation",
                "s3:AbortMultipartUpload",
                "s3:GetObjectAcl",
                "s3:GetObjectVersion",
                "s3:DeleteObject",
                "s3:DeleteObjectVersion",
                "s3:GetObject",
                "s3:PutObjectAcl",
                "s3:PutObject",
                "s3:GetObjectVersionAcl"
            ],
            "Resource": [
                "arn:aws:s3:::my_bucket",
                "arn:aws:s3:::my_bucket/*"
            ]
        }
    ]
}

где my_bucket - это ведро, где мне нужно управлять файлами, хотя s3cmd

Ответ 4

В случае, если вы предоставляете доступ к подпапке (как в исходном ответе /bucket-name/path/), а не ко всему ведру, действие ListBucket требует немного большей специфичности:

{
    "Sid": "AllowListingOfFilesInFolder",
    "Effect": "Allow",
    "Action": [
        "s3:ListBucket"
    ],
    "Resource": [
        "arn:aws:s3:::bucket-name"
    ],
    "Condition": {
        "StringLike": {
            "s3:prefix": [
                "path/*"
            ]
        }
    }
}

Я считаю, что он работает также с оригинальным ответом, если вы обеспечиваете доступ ко всему ковшу.