Загрузка объектов в приватный S3 не работает

После тщательного исследования я не нашёл ни одного руководства по загрузке изображений в S3 с приватным ACL.

Я столкнулся со странным поведением: резервные копии создаются успешно, а загрузка изображений — нет.

Я сузил круг поиска до проблемы с ACL ведра (я подтвердил, что проблема именно в ACL, так как могу загрузить файл через SDK без указания флага ACL). В некоторых случаях разрешение «Блокировать публичный доступ» установлено на уровне аккаунта, а не на уровне ведра, поэтому снятие галочки в конфигурации ведра не поможет.

Я заметил, что код конфигурации загрузки S3 был обновлён, и теперь ACL устанавливается на основе параметра. Есть ли способ передать эту конфигурацию? discourse/lib/file_store/s3_store.rb at tests-passed · discourse/discourse · GitHub

В статье Secure Uploads описывается, как ограничить загрузку файлов только для авторизованных пользователей. Возможно, это вам поможет?

Я попробовал это: изображения загружаются, но в панели управления возникает ошибка 500, без каких-либо подсказок и логов.

@mahcr,

У меня возникла та же проблема. Я могу сделать резервную копию, но не могу загрузить изображение из-за ошибки «The bucket does not allow ACLs».

Для IAM я прикрепил политику AmazonS3FullAccess, но ошибка остается той же.

Есть ли у вас какое-либо решение?

У меня та же проблема: резервное копирование работает, но загрузка — нет.

Это руководство устарело:

Это руководство кажется полезным для части CDN, но не является полным решением:

У меня возникла та же проблема. Загрузка резервной копии работает, но при загрузке изображений появляется сообщение «The bucket does not allow ACLs». Проблема была решена путем изменения одного разрешения в IAM и двух настроек в бакете.

Сначала я изменил руководство по разрешению IAM: заменил «s3:HeadBucket» на «s3:ListBucket», так как Amazon указал, что HeadBucket не является допустимым разрешением.

Затем я точно следовал руководству, как указано на странице разрешений в бакете.

И наконец, самый важный шаг — включить ACL. Это называется «Изменить владение объектами» (Edit Object Ownership) на вкладке разрешений. После включения ACL и установки значения «Object Writer» всё заработало как надо.

Надеюсь, мой опыт вам поможет.