Ошибка загрузки изображения: бакет не разрешает ACL

Пользователи и даже администраторы больше не могут загружать изображения.
В журнале ошибок указана ошибка hotlink.
Лимит составляет 4 МБ, но после жалобы пользователя я попробовал загрузить тестовый файл размером 800 КБ.

Несколько дней назад мы обновили систему до версии 2.9.0.beta4.
Недавно мы настроили бакеты S3.

Я заметил, что 15 дней назад в GitHub было внесено исправление, касающееся hotlink.
Я не могу создавать задачи в GitHub. Это правильное место для сообщения об ошибках?

Сообщение (зафиксировано 2 раза)

default: Не удалось загрузить изображение по прямой ссылке (https://jackrail.space/images/discourse-logo-sketch-small.png) пост: 586
В бакете не разрешены ACL
/var/www/discourse/vendor/bundle/ruby/2.7.0/gems/aws-sdk-core-3.121.2/lib/seahorse/client/plugins/raise_response_errors.rb:17:in `call'
/var/www/discourse/vendor/bundle/ruby/2.7.0/gems/aws-sdk-s3-1.96.1/lib/aws-sdk-s3/plugins/sse_cpk.rb:24:in `call'
/var/www/discourse/vendor/bundle/ruby/2.7.0/gems/aws-sdk-s3-1.96.1/lib/aws-sdk-s3/plugins/dualstack.rb:36:in `call'
/var/www/discourse/vendor/bundle/ruby/2.7.0/gems/aws-sdk-s3-1.96.1/lib/aws-sdk-s3/plugins/accelerate.rb:50:in `call'
/var/www/discourse/vendor/bundle/ruby/2.7.0/gems/aws-sdk-core-3.121.2/lib/aws-sdk-core/plugins/jsonvalue_converter.rb:22:in `call'
/var/www/discourse/vendor/bundle/ruby/2.7.0/gems/aws-sdk-core-3.121.2/lib/aws-sdk-core/plugins/idempotency_token.rb:19:in `call'
/var/www/discourse/vendor/bundle/ruby/2.7.0/gems/aws-sdk-core-3.121.2/lib/aws-sdk-core/plugins/param_converter.rb:26:in `call'
/var/www/discourse/vendor/bundle/ruby/2.7.0/gems/aws-sdk-core-3.121.2/lib/seahorse/client/plugins/request_callback.rb:71:in `call'
/var/www/discourse/vendor/bundle/ruby/2.7.0/gems/aws-sdk-core-3.121.2/lib/aws-sdk-core/plugins/response_paging.rb:12:in `call'
/var/www/discourse/vendor/bundle/ruby/2.7.0/gems/aws-sdk-core-3.121.2/lib/seahorse/client/plugins/response_target.rb:24:in `call'
/var/www/discourse/vendor/bundle/ruby/2.7.0/gems/aws-sdk-core-3.121.2/lib/seahorse/client/request.rb:72:in `send_request'
/var/www/discourse/vendor/bundle/ruby/2.7.0/gems/aws-sdk-s3-1.96.1/lib/aws-sdk-s3/client.rb:11274:in `put_object'
/var/www/discourse/vendor/bundle/ruby/2.7.0/gems/aws-sdk-s3-1.96.1/lib/aws-sdk-s3/object.rb:1329:in `put'
/var/www/discourse/lib/s3_helper.rb:74:in `upload'
/var/www/discourse/lib/file_store/s3_store.rb:116:in `store_file'
/var/www/discourse/lib/file_store/s3_store.rb:30:in `store_upload'
/var/www/discourse/lib/upload_creator.rb:212:in `block (2 levels) in cr...

Стек вызовов

/var/www/discourse/app/jobs/regular/pull_hotlinked_images.rb:243:in `public_send'
/var/www/discourse/app/jobs/regular/pull_hotlinked_images.rb:243:in `log'
/var/www/discourse/app/jobs/regular/pull_hotlinked_images.rb:58:in `rescue in block in execute'
/var/www/discourse/app/jobs/regular/pull_hotlinked_images.rb:35:in `block in execute'
/var/www/discourse/vendor/bundle/ruby/2.7.0/gems/nokogiri-1.13.4-x86_64-linux/lib/nokogiri/xml/node_set.rb:234:in `block in each'
/var/www/discourse/vendor/bundle/ruby/2.7.0/gems/nokogiri-1.13.4-x86_64-linux/lib/nokogiri/xml/node_set.rb:233:in `upto'
/var/www/discourse/vendor/bundle/ruby/2.7.0/gems/nokogiri-1.13.4-x86_64-linux/lib/nokogiri/xml/node_set.rb:233:in `each'
/var/www/discourse/app/jobs/regular/pull_hotlinked_images.rb:34:in `execute'
/var/www/discourse/app/jobs/base.rb:232:in `block (2 levels) in perform'
/var/www/discourse/vendor/bundle/ruby/2.7.0/gems/rails_multisite-4.0.1/lib/rails_multisite/connection_management.rb:80:in `with_connection'

Кажется, я исправил это, но не уверен, что делает эта функция и не отключает ли она мои резервные копии S3.
«Включить загрузку в S3»
Я включил это, думая, что это часть процедуры резервного копирования.
Я отключил это, и теперь при загрузке тестового изображения ошибка больше не возникает.

Эта настройка помещает ваши загрузки в бакет S3 и отделена от загрузок. Похоже, что этот бакет неправильно настроен для загрузок (см. Использование объектного хранилища для загрузок (S3 и клоны) для получения информации).

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

Кажется, это и была проблема, и пользователь, который жаловался, подтвердил, что она исправлена.

Я не совсем уверен, для чего нужна эта загрузка изображений, но полагаю, что это какая-то дополнительная функция, которая может понадобиться сложным серверам. Думаю, нашим 40 пользователям не нужен Discourse с такой сложной функцией. Нас больше интересуют лайки с помощью эмодзи.

Однако, следуя инструкциям по S3, мне пришлось вернуться назад и создать новый бакет для «резервных копий», в то время как оригинальный был для загрузок (потому что я делал всё по порядку, как указано в настройках). Думаю, я добавлю немного больше информации в инструкции по S3 в качестве ответа, чтобы другим было проще следовать им. Кроме того, политика разрешений, указанная в той теме с помощью, не существовала, и в итоге я нашёл решение со звёздочкой («*») на другом сайте. Я постараюсь прояснить это в той теме. Всё заработало, но потребовались доработки и подгонка инструкций.

Эти действия не сработали… Я использовал «*» вместо них.

"Action": [
           "s3:ListAllMyBuckets",
           "s3:HeadBucket"
       ],

Тема, которую я использовал для настройки и следования инструкциям, находится здесь.

Там тоже отмечена галочкой опция включения загрузки через S3. Кажется, это слишком усложняет процесс для обычного пользователя.
С другой стороны, я надеюсь, что мои резервные копии работают нормально без этого.

Почему вы использовали * вместо этого?

Я нашел это где-то при поиске в Google, просто чтобы код принимался. Если вы посмотрите на мой пост, который вы процитировали, я предоставил ссылку. В большинстве случаев я просто гуглю и копирую-вставляю. :slight_smile: Однако позже я заметил, что загрузка изображений не обязательна для работы резервного копирования. Я до сих пор не понимаю, зачем это кому-то нужно. Вам действительно нужен только бэкап. Два бакета не требуются. Я снял галочку с этого пункта в настройках, так как у меня все еще были ошибки загрузки, и пользователям не разрешалось загружать изображения. Снятие галочки исправило проблему. У нас небольшая группа серверов, так что нам должно хватить надолго.