Как я могу прочитать анонимно опубликованные файлы на AWS S3?

У меня есть корзина (назовем ее bucket-1) на AWS S3, из которой я не могу читать. У меня есть еще одно ведро (назовем его ведро-2), из которого я могу читать.

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

% aws s3 ls s3://bucket-1/ | grep 0046
2016-03-09 15:39:50    4413909 0046f326-6e7d-4c16-80e4-491fa0b19dd7

% aws s3 cp s3://bucket-1/0046f326-6e7d-4c16-80e4-491fa0b19dd7 .
A client error (403) occurred when calling the HeadObject operation: Forbidden

Пытаясь понять это, я снова переключился на использование ключей доступа учетной записи AWS, а не пользователя IAM (при условии, что учетная запись AWS имеет практически все права).

Начать копать

Предполагая, что причина кроется в разрешениях, я запускаю

% aws s3api get-bucket-acl --bucket my-bucket-1
% aws s3api get-bucket-acl --bucket my-bucket-2

Общий

Он показывает мою учетную запись AWS как владельца обоих сегментов.

Другой

bucket-2 имеет одно разрешение: FULL_CONTROL для моей учетной записи AWS.

bucket-1 перечисляет несколько разрешений, FULL_CONTROL не среди них. В нем перечислены

  • ЧИТАТЬ
  • ЗАПИСЫВАТЬ
  • READ_ACP
  • WRITE_ACP

для моей учетной записи AWS.

В веб-консоли объекты в bucket-1 не имеют установленных разрешений. Объекты в bucket-2 имеют те же разрешения, что и корзина, в которой они находятся.

Вероятно, что для хранения файлов в двух корзинах использовались разные методы. Объекты в bucket-2, скорее всего, были созданы через API, тогда как объекты в bucket-1 были созданы в результате анонимного запроса POST. (Да, bucket-1 имеет разрешение WRITE для всех.)

Копать глубже

Даже с учетными данными моей учетной записи AWS у меня нет разрешения запрашивать ACL объекта.

% aws s3api get-object-acl --bucket bucket-1 --key 0046f326-6e7d-4c16-80e4-491fa0b19dd7
A client error (AccessDenied) occurred when calling the GetObjectAcl operation: Access Denied

% aws s3api get-object --bucket bucket-1 --key 0046f326-6e7d-4c16-80e4-491fa0b19dd7 local.file
A client error (AccessDenied) occurred when calling the GetObject operation: Access Denied

% aws s3api head-object --bucket bucket-1 --key 0046f326-6e7d-4c16-80e4-491fa0b19dd7
A client error (403) occurred when calling the HeadObject operation: Forbidden

Вопросов

На полезный сайт в Интернете Я обнаружил, что можно использовать put-object-acl, чтобы установить acl на bucket-owner-full-control. Я пробовал это. Но вы должны сделать это с учетными данными владельца файла - и как вы можете это сделать, если файл был опубликован анонимно?

  • Что еще можно попробовать?
  • Есть ли у объектов на S3, таких как ведра, собственника?
  • Если да, то где в веб-консоли я могу найти эту информацию?

person branch14    schedule 21.05.2016    source источник
comment
Проверка политики корзины должна помочь.   -  person koolhead17    schedule 21.05.2016


Ответы (1)


Не разрешайте анонимную загрузку в вашу корзину. Если вы это сделаете, а загрузчик неправильно установил разрешения, единственное действие, доступное вам, - это удалить объект.

Можно настроить политику корзины так, чтобы анонимная загрузка запрещалась, если только загруженный не устанавливает ACL на bucket-owner-full-control, но это полезно только для будущих загрузок.

В случае ... есть ли законное приложение для анонимной загрузки? Весьма сомнительно.

person Michael - sqlbot    schedule 21.05.2016
comment
Спасибо за ваш ответ, и я согласен. Я не могу придумать «законное приложение для анонимной загрузки». В нашем случае на тот момент это был самый быстрый вариант, и, как всегда, время было критичным. - person branch14; 23.05.2016