Amazon S3 (Amazon Simple Storage Service) позволяет хранить контент и получать к нему доступ из любого места в любое время.
Amazon 3 хранит данные в виде объектов в корзинах (bucket). Каждый объект представляет собой файл и, опционально – метаданные, которые этот объект описывают (например – Content Type
)
Что бы сохранить данные в S3 – вам необходимо загрузить данные в корзину. После того, как данные загружены – вы можете установить ограничения доступа к нему.
Корзина – это контейнер, который хранит объекты. Вы можете иметь неограниченное количество таких корзин, и для каждой – установить доступ (кто может создавать, удалять и просматривать список объектов в корзине), просматривать логи доступа к корзине и объектам в ней.
- Создание S3 bucket
- Добавление объектов
- Права доступа
Содержание
Создание bucket
Для создания корзины через веб-интерфейс – переходим в https://console.aws.amazon.com/s3/ и жмём Create bucket:
Указываем имя (которое должно быть уникальным среди всех S3 корзин всех пользователей) и регион:
Или с помощью AWS CLI:
$ aws s3 mb s3://rtfmex2 make_bucket: s3://rtfmex2/
Имейте ввиду, что после создания корзины – её нельзя переименовать, а её имя будет включено в URL.
Добавление объектов
Объектом для S3 может быть любой файл. После его добавления – вы можете добавить метаданные и установить права доступа к этому объекту.
Для добавления через веб-интерйес – жмём Upload:
Выбираем файл для загрузки, и жмём Start upload:
Либо через CLI:
$ aws s3 cp textfile.txt s3://rtfmex2 upload: ./textfile.txt to s3://rtfmex2/textfile.txt
Проверяем:
CLI:
$ aws s3 ls s3://rtfmex2 2016-05-05 13:01:47 25 textfile.txt
Права доступа
По умолчанию – S3 корзины и объекты в них являются приватными и недоступны для чтения:
$ curl https://s3-eu-west-1.amazonaws.com/rtfmex1/textfile.txt <?xml version="1.0" encoding="UTF-8"?> <Error><Code>AccessDenied</Code><Message>Access Denied</Message>
Все права доступа к корзинам и объектам в них записываются в ACL (Access Control List), которые можно просмотреть с помощью AWS CLI s3api
:
Просмотреть ACL корзины:
$ aws s3api get-bucket-acl --bucket rtfmex2 { "Owner": { "DisplayName": "username", "ID": "a8e627b97012bf714c8308e668fe092628e6e69006499397b6cb8f337322a7b1" }, "Grants": [ { "Grantee": { "Type": "CanonicalUser", "DisplayName": "username", "ID": "a8e627b97012bf714c8308e668fe092628e6e69006499397b6cb8f337322a7b1" }, "Permission": "FULL_CONTROL" } ] }
ACL объекта:
$ aws s3api get-object-acl --bucket rtfmex2 --key textfile.txt { "Owner": { "DisplayName": "username", "ID": "a8e627b97012bf714c8308e668fe092628e6e69006499397b6cb8f337322a7b1" }, "Grants": [ { "Grantee": { "Type": "CanonicalUser", "DisplayName": "username", "ID": "a8e627b97012bf714c8308e668fe092628e6e69006499397b6cb8f337322a7b1" }, "Permission": "FULL_CONTROL" } ] }
Либо – в панели управления:
Права доступа могут быть установлены для другого аккаунта AWS или встроенных групп. Владелец по умолчанию имеет полный доступ.
Права доступа к корзине и объектам в ней асболютно независимы: объект в корзине не наследует права доступа этой корзины. Например, если вы создаёте корзину и даёте права записи для другого пользователя – вы не можете получить доступ к созданным им данным, пока он явно не откроет вам доступ на чтение объектов в созданной вами корзине.
Что бы установить права доступа – выбераем объект или корзину, кликаем правой кнопкой и выбираем Properties:
Затем – Add more permissions:
Из выпадающего списка в Grantee – выбираем:
- Everyone: открыть анонимный доступ всем
- Authenticated Users: доступ для любого авторизированного пользователя AWS или AIM роли
- Log Delivery: открывает доступ, когда корзина используется в роли хранилища логов сервера
- Me: только вы сами (ваш root аккаунт), но не AIM пользователь
Вы можете указать права доступа используя canonical user ID или почтовый адрес в поле Grantee.
Примечание: Найти canonical user ID можно в панели управления > Security credentials > Account Identifiers.
Для S3 имеется три группы правил доступа:
- Open/Download: чтение/загрузка объекта залогиненому пользователю
- View Permissions: просмотр прав доступа, связанных с этим объектом
- Edit Permissions: изменение прав доступа, связанных с этим объектом
Открываем общий (Everyone) доступ на чтение файла:
Либо – с помощью CLI:
$ aws s3api put-object-acl --bucket rtfmex2 --key textfile.txt --acl public-read
Проверяем:
$ curl https://s3-eu-west-1.amazonaws.com/rtfmex2/textfile.txt This is textfile from S3
И ещё несколько полезных команд CLI.
Просмотреть все корзины:
$ aws s3api list-buckets { "Owner": { "DisplayName": "username", "ID": "a8e627b97012bf714c8308e668fe092628e6e69006499397b6cb8f337322a7b1" }, "Buckets": [ ... { "CreationDate": "2016-05-05T09:50:28.000Z", "Name": "rtfmex1" }, { "CreationDate": "2016-05-05T09:52:15.000Z", "Name": "rtfmex2" }, ... ] }
Прсомотреть содержимое корзины:
$ aws s3 ls s3://rtfmex2 2016-05-05 13:01:47 25 textfile.txt
Скопировать все данные из текущего локального каталога в корзину:
$ mkdir to_bucket && touch to_bucket/file{1..5}.txt $ ls -l to_bucket/ total 0 -rw-rw-r-- 1 setevoy setevoy 0 тра 5 17:07 file1.txt -rw-rw-r-- 1 setevoy setevoy 0 тра 5 17:07 file2.txt -rw-rw-r-- 1 setevoy setevoy 0 тра 5 17:07 file3.txt -rw-rw-r-- 1 setevoy setevoy 0 тра 5 17:07 file4.txt -rw-rw-r-- 1 setevoy setevoy 0 тра 5 17:07 file5.txt $ aws s3 sync to_bucket/ s3://rtfmex2 upload: to_bucket/file3.txt to s3://rtfmex2/file3.txt upload: to_bucket/file5.txt to s3://rtfmex2/file5.txt upload: to_bucket/file4.txt to s3://rtfmex2/file4.txt upload: to_bucket/file2.txt to s3://rtfmex2/file2.txt upload: to_bucket/file1.txt to s3://rtfmex2/file1.txt
Удалить файл:
$ aws s3 rm s3://rtfmex2/file1.txt delete: s3://rtfmex2/file1.txt
Больше примеров – тут>>>.
Ссылки по теме
Using Amazon S3 with the AWS Command Line Interface
IAM Policies and Bucket Policies and ACLs! Oh, My! (Controlling Access to S3 Resources)
Bucket Explorer