Политики бакета
Политика бакета – это набор правил, определяющих, кто и какие действия может выполнять с объектами в бакете.
При помощи политик бакета возможно:
- разрешать или запрещать операции с объектами в бакете для конкретных пользователей, групп пользователей или для любого пользователя из Интернета;
- определять списки разрешенных и запрещенных операций c объектами в бакете;
- устанавливать ограничения доступа по указанным критериям (например, по диапазону IP-адресов или времени доступа).
Используя политики бакета, вы сможете:
- контролировать, кто может взаимодействовать с данными, снижая риск несанкционированного доступа;
- гибко настраивать доступ к бакету для различных сценариев, включая доступ по IP-адресу, времени или другим условиям;
- обеспечить соблюдение требований безопасности и конфиденциальности данных.
Структура и синтаксиc политики бакета
Заголовок раздела «Структура и синтаксиc политики бакета»Схема данных
Заголовок раздела «Схема данных»Политика бакета представляет собой набор правил, котороые определяются в формате JSON:
{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow (разрешить) или Deny (запретить)", "Principal": "Кто получит доступ", "Action": "Действия, которые разрешены или запрещены", "Resource": "Ресурсы, к которым применяется политика", "Condition": { "Условия, при которых применяется политика" } } ]}В состав правила входят следующие элементы:
| Имя | Тип | Комментарий | Пример |
|---|---|---|---|
Version |
Дата | Версия синтаксиса политики. Имеет фиксированное значение `2012-10-07` | "Version": "2012-10-17" |
Statement |
Объект | Перечень разрешений и запретов в рамках политики. Включает элементы:
|
{"Version": "2012-10-17",} |
Действия
Заголовок раздела «Действия»В рамках политик можно разрешать или запрещать следующие действия:
| Действие | Описание |
|---|---|
* | Все операции с бакетом и объектами в нем |
s3:DeleteBucket | Удаление бакета |
s3:GetLifecycleConfiguration | Получение настроек жизненного цикла бакета |
s3:GetBucketTagging | Получение списка тегов, назначенных бакету |
s3:GetBucketVersioning | Получение статуса версионирования в бакете (включено или нет) |
s3:GetBucketPolicy | Получение политики бакета |
s3:GetBucketLogging | Получение статуса логирования в бакете (включено или нет) |
s3:GetBucketCORS | Получение настроек CORS для бакета |
s3:AbortMultipartUpload | Остановка составной загрузки |
s3:DeleteObject | Удаление объекта |
s3:DeleteObjectVersion | Удаление версии объекта |
s3:DeleteBucketPolicy | Удаление политики бакета |
s3:DeleteObjectTagging | Удаление тегов объекта |
s3:DeleteObjectVersionTagging | Удаление тегов версии объекта |
s3:GetObject | Чтение объекта |
s3:GetObjectVersion | Чтение версии объекта |
s3:GetObjectAttributes | Получение метаданных объекта |
s3:GetObjectTagging | Получение тегов объекта |
s3:ListBucket | Получение списка объектов в бакете |
s3:ListBucketMultipartUploads | Получение списка текущих составных загрузок |
s3:ListBucketVersions | Получение списка версий объектов в бакете |
s3:ListMultipartUploadParts | Получение списка частей, загруженных во время составной загрузки |
s3:PutBucketCORS | Установка настроек CORS |
s3:PutBucketVersioning | Изменение настроек версионирования бакета |
s3:PutObject | Загрузка объекта в бакет |
s3:PutObjectTagging | Назначение тегов бакету |
s3:PutBucketLogging | Установка настроек логирования для бакета |
s3:PutBucketPolicy | Добавление политики бакета |
Условия
Заголовок раздела «Условия»В политиках можно определять условия, при которых они будут применяться. В состав каждого условия входят:
- ключ — переменная, относительно которой проверяется условие;
- оператор, которые определяет, как применяется правило к значению ключа (например,
StringEquals,StringLike,NumericGreaterThanи т.п.); - значение, с которым сравнивается ключ (это может быть строка, число, IP-адрес и т.п.).
| Ключ | Тип | Описание |
|---|---|---|
aws:CurrentTime | Date | Сравнивает дату и время запроса со значением, указанным в условии |
aws:referer | String | Сравнивает заголовок Referer в запросе со значением, указанным в условии. |
aws:PrincipalType | String | Задает тип сущности, к которой делается запрос |
aws:SecureTransport | Bool | Проверяет, был ли запрос отправлен с использованием шифрования SSL/TLS. |
aws:SourceIp | IP address | Сравнивает IP-адрес из запроса со значением из условия |
aws:UserAgent | String | Сравнивает UserAgent из запроса со значением из условия |
aws:userid | String | Сравнивает идентификатор пользователя со значением из условия |
aws:username | String | Сравнивает имя пользователя со значением из условия |
s3:authType | String | Ограничивает входящие запросы методом аутентификации, указанным в условии |
s3:delimiter | String | Задает разделитель, который должны включать запросы пользователей |
s3:max-keys | Numeric | Задает максимальное количество имен объектов, возвращаемых при запросе списка объектов в бакете |
s3:prefix | String | Ограничивает доступ к папке |
s3:signatureAge | Numeric | Определяет время действия подписи в запросе аутентификации (в миллисекундах) |
s3:signatureversion | String | Задает версию подписи AWS для запросов аутентификации |
s3:versionid | String | Ограничивает доступ к конкретной версии объекта |
s3:x-amz-content-sha256 | String | Запрещает передавать в запросах неподписанное содержимое |
s3:x-amz-copy-source | String | Разрешает использовать в качестве источника копирования только определенный бакет, папку или объект |
s3:x-amz-metadata-directive | String | Указывет, что делать с метаданными при копировании объекта: копировать (COPY) или заменять (REPLACE) |
Операторы
Заголовок раздела «Операторы»Операторы сравнивают значение из запроса к ресурсу со значением ключа.
Числовые операторы
Заголовок раздела «Числовые операторы»Числовые операторы использутся для сравнения числа из запроса с числом, указанным в ключе.
| Оператор | Описание |
|---|---|
NumericEquals | Значение равно заданному в условии |
NumericGreaterThan | Значение больше заданного в условии |
NumericGreaterThanEquals | Значение больше или равно заданному в условии |
NumericLessThan | Значение меньше заданного в условии |
NumericLessThanEquals | Значение меньше или равно заданному в условии |
NumericNotEquals | Значение не равно заданному в условии |
Cтроковые операторы
Заголовок раздела «Cтроковые операторы»Строковые операторы использутся для сравнения строки из запроса со строкой, указанной в ключе.
| Оператор | Описание |
|---|---|
StringEquals | Значение соответствует заданному в условии (с учетом регистра) |
StringEqualsIgnoreCase | Значение соответствует заданному в условии (без учета регистра) |
StringLike | Значение соответствует шаблону, заданному в условии. В значениях можно использовать знаки подстановки: * — нескольких символов; ? — один символ |
StringNotEquals | Значение не соответствует заданному в условии (с учетом регистра) |
StringNotEqualsIgnoreCase | Значение не соответствует заданному в условии (без учета регистра) |
StringNotLike | Значение соответствует шаблону, заданному в условии. В значениях можно использовать знаки подстановки: * — нескольких символов; ? — одного символа |
Операторы даты и времени
Заголовок раздела «Операторы даты и времени»Операторы даты и времени используются для сравнения даты и времени из запроса с датой и временем, указанными в ключе.
| Оператор | Описание |
|---|---|
DateEquals | Соответствует заданной дате |
DateGreaterThan | Соответствует дате позже, чем заданная |
DateGreaterThanEquals | Соответствует заданной дате или более поздней |
DateLessThan | Соответствует дате раньше, чем заданная |
DateLessThanEquals | Соответствует заданной дате или более ранней |
DateNotEquals | Не соответствует заданной дате |
Операторы IP-адресов
Заголовок раздела «Операторы IP-адресов»Операторы IP-адресов используются для сравнения IP-адреса или диапазона адресов из запроса с IP-адресом или диапазоном адресов из ключа.
| Оператор | Значение |
|---|---|
IpAddress | Соответствует заданному адресу или входит в заданный диапазон |
NotIpAddress | Не соответствует заданному адресу или не входит в заданный диапазон |
Оператор Bool
Заголовок раздела «Оператор Bool»Оператор Bool сравнивает логическое значений (true или false) со значением из ключа. Если значения совпадают, условие удовлетворяется.
Оператор IfExists
Заголовок раздела «Оператор IfExists»С помощью оператора IfExists можно сделать условия правила более гибким. Его можно добавить к любому другому оператору, кроме Null — например, StringLikeIfExists или BoolIfExists. Он указывает, что проверка условия должна игнорироваться, если ключ условия отсутствует в запросе.
Оператор Null
Заголовок раздела «Оператор Null»Оператор Nullиспользуется, чтобы проверить наличие ключа из запроса в условии. Если ключ отсутствует, результат оператора принимает значение true, если присутствует и для него задано значение — false.