Политика PutObject только для AWS S3

Я пытаюсь настроить политику Only PutObject для каждого сегмента следующим образом:

{
    "Version": "2012-10-17",
    "Statement": [
        {
            "Sid": "Stmt####",
            "Effect": "Allow",
            "Action": [
                "s3:PutObject",
                "s3:PutObjectAcl",
                "s3:PutObjectVersionAcl"
            ],
            "Resource": [
                "arn:aws:s3:::my-bucket/*"
            ]
        }
    ]
}

Однако, когда я пытаюсь загрузить файл, AWS SDK я получаю ответ 403 от AWS. Я абсолютно уверен, что использую правильный ключ доступа пользователя IAM, к которому привязана эта политика.

Кто-нибудь знает, почему AWS3 жалуется на эту политику, когда этого не должно быть?

Изменить:

После нескольких часов испытаний я столкнулся со странным поведением, которое я хотел бы объяснить.

Если я добавлю s3:ListBucket к вышеуказанной политике, все будет работать нормально. Без этого он вернет 403. Почему amazon заставляет меня использовать действие ListBucket, когда я этого не хочу?

Спасибо


person Fabrizio Fenoglio    schedule 29.07.2015    source источник


Ответы (1)


Лучший способ устранить эту проблему — предоставить вашей политике следующие действия и ресурсы:

"Action": [
    "s3:*"
],
"Resource": [
    "arn:aws:s3:::my-bucket",
    "arn:aws:s3:::my-bucket/*"
]

Это подтвердит, что вы используете правильный ключ доступа. Если это произойдет, вы, скорее всего, используете несанкционированные действия (например, s3:ListBucket). Вы можете использовать CloudTrail, чтобы определить, какие несанкционированные действия вызываются.

person aalimovs    schedule 29.07.2015
comment
Большое спасибо @aalimovs, я пробовал много комбинаций, и я пришел к выводу, что если я не добавлю ListBucket Действие к политике, она даст 403, если я добавлю, что он успешно загрузил файл , вы знаете, почему это происходит? - person Fabrizio Fenoglio; 30.07.2015
comment
Можете ли вы показать, как именно вы загружаете файл? - person aalimovs; 31.07.2015
comment
Спасибо за вашу поддержку, я загружаю файлы через файловую систему библиотеку PHP github.com/ thephpleague/flysystem и с помощью адаптера Aws3: github.com/thephpleague/ flysystem-aws-s3-v3, функция загрузки: github.com/thephpleague/flysystem-aws-s3-v3/blob/master/src/ - person Fabrizio Fenoglio; 31.07.2015