Управление доступом в объектное хранилище S3 Bucket Policy
Если пользователь имеет доступ к объектному хранилищу, то доступ к конкретному бакету определяется наличием и настройками политики доступа.
- Если политика доступа не создана, то доступ будет предоставлен всем пользователям с доступом в рамках ролевой модели, за исключением роли “Пользователь объектного хранилища”.
- Если политика доступа создана, то разрешено только то, что разрешено правилами политики, остальное запрещено. Для получения дополнительной информации о работе политики доступа, пожалуйста, обратитесь к разделу “Политика доступа”.
Ключи доступа
Выдавать ключи для доступа к хранилищу через API можно только сервисным пользователям.
- S3-ключ (EC2-ключ), используется для подписи запросов S3 API и по FTP. Состоит из пары значений — Access Key ID и Secret Key.
Политика доступа к бакету
Доступ к бакету задается через политику доступа (Bucket policy).
Политика состоит из правил, которые разрешают или запрещают действия с ресурсом (контейнером или группой объектов) для всех или выбранных принципалов (пользователей).
Политика доступа имеет ограничение на максимальный размер в 20 КБ.
Политику доступа рекомендуется использовать только совместно с S3 API.
Структура политики доступа
Политика доступа имеет JSON-структуру.
Примеры политик
- Пример политики на удаление объекта:
- Как предоставить разрешение на публичное чтение анонимным пользователям (т. е. всем):
- Как предоставить полный доступ пользователям с определенных IP-адресов.:
- Как защитить файлы S3 от хотлинкинга.
- Как разрешить запись в корзину только определенному IP и чтение из нее всем.
- Как разрешить каждому пользователю и сервисному аккаунту полный доступ к папке с названием, равным идентификатору пользователя или сервисного аккаунта:
- Как разрешить разным пользователям полный доступ только к определенным папкам, каждому пользователю — к своей:
- Как разрешить анонимному пользователю чтение объектов бакета по зашифрованному подключению:
- Как разрешить скачивать объекты только из указанного диапазона IP-адресов:
- Как запретить скачивать объекты с указанного IP-адреса:
Для создания политики можно использовать генератор политик AWS.
Готовую политику необходимо сохранить в формате JSON и загрузить в S3.
Содержимое политики
Поле | Тип данных | Обязательный | Описание |
---|---|---|---|
Id | Строка | ✗ | Идентификатор политики, может быть любым |
Version | Строка | ✓ | Версия политики доступа, значение — константа: “2012-10-17” |
Statement | Массив | ✓ | Массив правил |
Sid | Строка | ✗ | Название правила |
Effect | Строка | ✓ | Тип правила (Allow или Deny) |
Principal:AWS | Массив строк или строка | ✓ | Принципалы (идентификаторы пользователей или * для всех запросов) |
Actions | Массив строки или строка | ✓ | Действия или * для всех действий |
Resources | Массив строк или строка | ✓ | Ресурсы, на которые действует правило |
Condition | Массив | ✗ | Массив условий, представленных в формате: [оператор]:[ключ]:[массив значений ключа] |
Примеры загрузки политики
Для загрузки политики через AWS CLI используйте следующую команду:
Для загрузки политики через S3 Browser:
-
Перейдите в меню Buckets → Edit Bucket Policy.
-
Скопируйте политику, вставьте в окно и нажмите Apply.
Для загрузки политики через REST API используйте метод PUT.
Правила доступа
Правила бывают двух типов:
- разрешающие (Allow)
- запрещающие (Deny).
Разрешение или запрет распространяется на действия, ресурсы и принципалов, добавленных в правило.
Если политика содержит несколько правил, они применяются следующим образом:
- если хотя бы одно разрешающее правило выполняется, доступ будет разрешен;
- если хотя бы одно запрещающее правило выполняется, доступ будет запрещен;
- если выполняются одновременно разрешающие и запрещающие правила, доступ будет запрещен;
- если ни одно правило не выполняется, доступ будет запрещен.
Принципалы
Правило применяется в отношении запросов от пользователей - принципалов:
- на авторизованные запросы определенных пользователей;
- на все авторизованные и неавторизованные запросы, (обозначается звездочкой - *).
Ресурсы
Ресурсы — бакет или объекты, на которые будет распространяться правило. Указывать можно только ресурсы, связанные с бакетом, для которого настраивается политика.
Ресурсы можно указывать в форматах:
arn:aws:s3:::<container-name>
— ресурс одного бакета (для которого настраивается политика). Ресурс будет работать только для действий, связанных с настройкой бакета, и не распространяется на его объекты;
arn:aws:s3:::<container-name>/<prefix>
— ресурс объектов бакета, где
arn:aws:s3:::<container-name>/${<variable-name>}
— ресурс объектов бакета, где
Действия
-
s3:AbortMultipartUpload - Прерывание сегментированной загрузки объекта через S3 API
-
s3:DeleteObject - Удаление объекта
-
s3:DeleteObjectVersion - Удаление версии объекта
-
s3:GetBucketCORS - Получение CORS-конфигурации контейнера
-
s3:GetBucketLocation - Получение пула, в котором находится контейнер
-
s3:GetBucketVersioning - Получение информации о версионировании контейнера (включено или нет)
-
s3:GetObject - Чтение объекта
-
s3:GetObjectVersion - Чтение определенной версии объекта
-
s3:ListBucket - Чтение списка объектов в контейнере (всех или некоторых)
-
s3:ListBucketMultipartUploads - Чтение списка объектов, которые находятся в процессе сегментированной загрузки через S3 API
-
s3:ListBucketVersions - Чтение метаданных всех версий объектов в контейнере
-
s3:ListMultipartUploadParts - Чтение списка загруженных частей объекта при сегментированной загрузке через S3 API
-
s3:PutBucketCORS - Установка CORS-конфигурации контейнера
-
s3:PutBucketVersioning - Подключение и отключение версионирования контейнера
-
s3:PutObject - Добавление объекта в контейнер (загрузка или копирование)
Условия
Условие определяет, в каких случаях правило будет работать. Условие состоит из ключа, оператора и значения.
Если в результате выполнения условия возвращается значение true
, условие удовлетворяется.