it-swarm.com.ru

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

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

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

53
GoodGets

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

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

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

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

Я написал небольшой скрипт на 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 объектами, и это работало. Если у вас есть lot ключей, это может занять некоторое время, и может потребоваться параллельный подход.

34
ascobol

Принятый ответ работает хорошо - похоже, рекурсивно устанавливает 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 "directory-tree", если вы хотите: 

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

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

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

53
nonbeing

Для AWS CLI это довольно просто.

Если объект: s3://<bucket-name>/file.txt

Для одного объекта:

aws s3api put-object-acl --acl private --bucket <bucket-name> --key file.txt

Для всех объектов в ведре (однострочник bash):

aws s3 ls --recursive s3://<bucket-name> | cut -d' ' -f5- | awk '{print $NF}' | while read line; do
    echo "$line"
    aws s3api put-object-acl --acl private --bucket <bucket-name> --key "$line"
done
10
Varun Chandak

Я действительно использовал пользовательский интерфейс Amazon, следуя этому руководству http://aws.Amazon.com/articles/5050/

although it looks somewhat different than that guide

8
comandante N

Из списка сегментов AWS S3 (пользовательский интерфейс AWS S3) вы можете изменить индивидуальные права доступа к файлу после того, как либо один файл будет общедоступным вручную или, сделав все содержимое папки общедоступным (Для уточнить, я имею в виду папку внутри ведра). Чтобы вернуть публичный атрибут обратно в приватный, вы нажимаете на файл, затем переходите к разрешениям и нажимаете радиальная кнопка под заголовком «ВСЕ». Вы получаете второе всплывающее окно, в котором вы можете снять флажок с атрибута * read object. Не забудьте сохранить изменения. Если вы попытаетесь получить доступ к ссылке, вы должны получить типичное сообщение «Access Denied». Я приложил два снимка экрана Первый показывает список папок. Нажав на файл и выполнив вышеупомянутую процедуру, вы увидите второй снимок экрана, на котором показаны 4 шага. Обратите внимание, что для изменения нескольких файлов необходимо будет использовать сценарии, предложенные в предыдущих публикациях. -KF

 First: Bucket listing in AWS-S3


 Second:steps to change access permission

6
K F

На данный момент, согласно 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') 

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

3
Levon

Хотя ответ @ kintuparantu работает отлично, стоит отметить, что из-за части awk сценарий учитывает только последнюю часть результатов ls. Если в имени файла есть пробелы, awk получит только последний сегмент имени файла, разделенный пробелами, а не все имя файла.

Пример: Файл с путем, подобным folder1/subfolder1/this is my file.txt, приведет к записи, называемой просто file.txt.

Чтобы предотвратить это, все еще используя его сценарий, вам придется заменить $NF в awk {print $NF} последовательностью переменных-заполнителей, которая учитывает количество сегментов, к которым может привести операция «разбиение по пробелам». Поскольку имена файлов могут иметь довольно большое количество пробелов в их названиях, я пошел с преувеличением, но, если честно, я думаю, что совершенно новый подход, вероятно, был бы лучше иметь дело с этими случаями. Вот обновленный код:

#!/bin/sh
aws s3 ls --recursive s3://plusplus-staging | awk '{print $4,$5,$6,$7,$8,$9,$10,$11,$12,$13,$14,$15,$16,$17,$18,$19,$20,$21,$22,$23,$24,$25}' | while read line; do
    echo "$line"
    aws s3api put-object-acl --acl private --bucket plusplus-staging --key "$line"
done

Я должен также упомянуть, что использование cut не дало никаких результатов для меня, поэтому я удалил его. Кредиты все еще идут в @kintuparantu, так как он создал сценарий.

2
Luca Bezerra

Я сделал это сегодня. У меня была ситуация, когда у меня были определенные каталоги верхнего уровня, файлы которых нужно было сделать закрытыми. У меня были папки, которые нужно было оставить открытыми.

Я решил использовать s3cmd, как многие другие люди уже показали. Но, учитывая огромное количество файлов, я хотел запускать параллельные задания s3cmd для каждого каталога. И так как это заняло бы день или около того, я хотел запустить их в качестве фоновых процессов на машине EC2.

Я настроил машину с Ubuntu, используя тип t2.xlarge. Я выбрал xlarge после сбоя s3cmd с сообщениями о нехватке памяти на микроэкземпляре. xlarge, вероятно, излишний, но этот сервер будет работать только один день.

После входа на сервер я установил и настроил s3cmd:

Sudo apt-get install python-setuptools wget https://sourceforge.net/projects/s3tools/files/s3cmd/2.0.2/s3cmd-2.0.2.tar.gz/download mv download s3cmd.tar.gz tar xvfz s3cmd.tar.gz cd s3cmd-2.0.2/ python setup.py install Sudo python setup.py install cd ~ s3cmd --configure

Первоначально я пытался использовать screen, но у меня были некоторые проблемы, в основном процессы сбрасывались из screen -r, несмотря на выполнение соответствующей экранной команды, такой как screen -S directory_1 -d -m s3cmd setacl --acl-private --recursive --verbose s3://my_bucket/directory_1. Поэтому я провел поиск и нашел команду Nohup. Вот чем я закончил:

Nohup s3cmd setacl --acl-private --recursive --verbose s3://my_bucket/directory_1 > directory_1.out & Nohup s3cmd setacl --acl-private --recursive --verbose s3://my_bucket/directory_2 > directory_2.out & Nohup s3cmd setacl --acl-private --recursive --verbose s3://my_bucket/directory_3 > directory_3.out &

С ошибкой с несколькими курсорами это становится довольно легко (я использовал aws s3 ls s3//my_bucket для вывода списка каталогов).

Делая это, вы можете logout, как вы хотите, и войти в систему и хвост любой из ваших журналов. Вы можете привязать несколько файлов, как: tail -f directory_1.out -f directory_2.out -f directory_3.out

Так что настройте s3cmd, затем используйте Nohup, как я продемонстрировал, и все готово. Повеселись!

1
Steve Potter

Похоже, что теперь это решается Amazon:

Установка следующего флажка снова делает контейнер и его содержимое приватными:

Блокировать публичный и кросс-аккаунт доступ, если в корзине есть публичные политики

https://aws.Amazon.com/blogs/aws/Amazon-s3-block-public-access-another-layer-of-protection-for-your-accounts-and-buckets/

 enter image description here

0
Spiff

 enter image description here

Если у вас есть браузер S3, у вас будет возможность сделать его общедоступным или приватным.

0
Avinash Clinton