Подтвердить что ты не робот

S3: снова сделать приватную папку приватной?

Как сделать приватную общую папку AWS S3 приватной?

Я тестировал некоторые промежуточные данные, поэтому я сделал всю папку открытой в ведре. Я хотел бы еще раз ограничить его доступ. Итак, как мне сделать папку приватной снова?

4b9b3361

Ответ 1

Из того, что я понимаю, опция "Сделать общедоступной" в консоли управления рекурсивно добавляет публичный грант для каждого объекта "в" каталоге. Вы можете это увидеть, щелкнув правой кнопкой мыши по одному файлу, затем нажмите "Свойства". Затем вам нужно нажать "Разрешения", и должна быть строка:

 Grantee:  Everyone  [x] open/download  [] view permissions   [] edit permission.

Если вы загрузите новый файл в этот каталог, у него не будет этого общедоступного набора и, следовательно, будет закрытым.

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

Я написал небольшой script в Python с модулем "boto", чтобы рекурсивно удалить атрибут "public read" всех ключей в папке S3:

#!/usr/bin/env python
#remove public read right for all keys within a directory

#usage: remove_public.py bucketName folderName

import sys
import boto

bucketname = sys.argv[1]
dirname = sys.argv[2]
s3 = boto.connect_s3()
bucket = s3.get_bucket(bucketname)

keys = bucket.list(dirname)

for k in keys:
    new_grants = []
    acl = k.get_acl()
    for g in acl.acl.grants:
        if g.uri != "http://acs.amazonaws.com/groups/global/AllUsers":
            new_grants.append(g)
    acl.acl.grants = new_grants
    k.set_acl(acl)

Я тестировал его в папке с (только) 2 объектами и работал. Если у вас есть лоты ключей, это может занять некоторое время, и может потребоваться параллельный подход.

Ответ 2

Принятый ответ работает хорошо - похоже, рекурсивно устанавливает ACL на заданный путь s3. Однако это также можно сделать более легко с помощью стороннего инструмента, называемого s3cmd - мы используем его в значительной степени в моей компании, и, похоже, это быть довольно популярным в сообществе AWS.

Например, предположим, что у вас был такой тип s3 bucket и dir: s3://mybucket.com/topleveldir/scripts/bootstrap/tmp/. Теперь предположим, что вы пометили весь каталог scripts как общедоступный, используя консоль Amazon S3.

Теперь, чтобы рекомбинировать все дерево scripts "дерево каталогов" (т.е. включая подкаталоги и их файлы) снова:

s3cmd setacl --acl-private --recursive s3://mybucket.com/topleveldir/scripts/

Также легко сделать дерево каталогов scripts "рекурсивно публичным снова, если вы хотите:

s3cmd setacl --acl-public --recursive s3://mybucket.com/topleveldir/scripts/

Вы также можете установить разрешение /ACL только в данном s3-каталоге (то есть не рекурсивно), просто опуская --recursive в приведенных выше командах.

Для работы s3cmd сначала вам необходимо предоставить свой доступ к AWS и секретные ключи к s3cmd через s3cmd --configure (см. http://s3tools.org/s3cmd для более подробной информации).

Ответ 4

На данный момент, согласно boto docs, вы можете сделать это таким образом

#!/usr/bin/env python
#remove public read right for all keys within a directory

#usage: remove_public.py bucketName folderName

import sys
import boto

bucketname = sys.argv[1]
dirname = sys.argv[2]
s3 = boto.connect_s3()
bucket = s3.get_bucket(bucketname)

keys = bucket.list(dirname)

for k in keys:
    # options are 'private', 'public-read'
    # 'public-read-write', 'authenticated-read'
    k.set_acl('private') 

Кроме того, вы можете рассмотреть возможность удаления каких-либо политик bucket под вкладками разрешений ведро s3.