У меня есть корзина (назовем ее 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, таких как ведра, собственника?
- Если да, то где в веб-консоли я могу найти эту информацию?