Как получить разрешение ACL для папки AWS S3, чтобы проверить, есть ли у нее разрешение на запись нового файла - PullRequest
0 голосов
/ 06 мая 2019

Я хочу проверить, можно ли записать новый файл в папку S3, используя S3 :: ObjectACL

vs3 = AWS::S3.new
obj = s3.buckets["my_bucket"].object["folder1/sub-folder/"]
puts obj.acl.grants

Но приведенный выше код возвращает

Aws::S3::Errors::NoSuchKey (The specified key does not exist.)

Но приведенный выше код отлично работает для определенного файла, но не для папки. Как заставить это работать для префикса S3?

1 Ответ

0 голосов
/ 07 мая 2019

Папки на самом деле не существуют в Amazon S3. Например, вы можете использовать эту команду Интерфейс командной строки AWS (CLI) для создания объекта в несуществующей папке:

aws s3 cp foo.txt s3://my-bucket/unicorn/soup/foo.txt

Это приведет к магическому появлению каталогов unicorn и soup, поскольку они на самом деле не существуют. Если этот объект был удален, эти каталоги также исчезнут (потому что они не существуют!).

Amazon S3 - система хранения плоских объектов. Путь к объекту фактически хранится в Key (имя файла) объекта. Некоторые вызовы API помогают утверждать, что каталоги существуют, но на самом деле их не существует.

Иногда возникает желание «создать» каталог, например, через консоль управления. Это делается путем создания объекта нулевой длины с именем каталога . Это не «создает» каталог, оно просто заставляет его появляться как общий префикс в определенных вызовах API.

Кроме того, поскольку каталоги не существуют, невозможно установить списки ACL для каталогов . Вы не можете контролировать, может ли кто-либо создавать объект в каталоге, устанавливая разрешения для каталога (потому что, да!, Каталоги не существуют).

Если вы хотите предоставить любому разрешение на запись в папку, вы можете использовать Bucket Policy , который предоставляет доступ с использованием определенного префикса . Если вы хотите предоставить доступ конкретным пользователям IAM, вы можете прикрепить политику к пользователю IAM.

...