Как сделать приватную общую папку AWS S3 приватной?
Я тестировал некоторые промежуточные данные, поэтому я сделал всю папку открытой в ведре. Я хотел бы еще раз ограничить его доступ. Итак, как мне сделать папку приватной снова?
Как сделать приватную общую папку AWS S3 приватной?
Я тестировал некоторые промежуточные данные, поэтому я сделал всю папку открытой в ведре. Я хотел бы еще раз ограничить его доступ. Итак, как мне сделать папку приватной снова?
Из того, что я понимаю, опция "Сделать общедоступной" в консоли управления рекурсивно добавляет публичный грант для каждого объекта "в" каталоге. Вы можете это увидеть, щелкнув правой кнопкой мыши по одному файлу, затем нажмите "Свойства". Затем вам нужно нажать "Разрешения", и должна быть строка:
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 объектами и работал. Если у вас есть лоты ключей, это может занять некоторое время, и может потребоваться параллельный подход.
Принятый ответ работает хорошо - похоже, рекурсивно устанавливает 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 для более подробной информации).
Я действительно использовал интерфейс Amazon после этого руководства http://aws.amazon.com/articles/5050/
На данный момент, согласно 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.