Политики бакета
Политика бакета – это набор правил, определяющих, кто и какие действия может выполнять с объектами в бакете.
При помощи политик бакета возможно:
- разрешать или запрещать операции с объектами в бакете для конкретных пользователей, групп пользователей или для любого пользователя из Интернета;
- определять списки разрешенных и запрещенных операций c объектами в бакете;
- устанавливать ограничения доступа по указанным критериям (например, по диапазону IP-адресов или времени доступа).
Используя политики бакета, вы сможете:
- контролировать, кто может взаимодействовать с данными, снижая риск несанкционированного доступа;
- гибко настраивать доступ к бакету для различных сценариев, включая доступ по IP-адресу, времени или другим условиям;
- обеспечить соблюдение требований безопасности и конфиденциальности данных.
Структура и синтакси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троковые операторы
Строковые операторы использутся для сравнения строки из запроса со строкой, указанной в ключе.
| Оператор | Описание |
|---|---|
StringEquals | Значение соответствует заданному в условии (с учетом регистра) |
StringEqualsIgnoreCase | Значение соответствует заданному в условии (без учета регистра) |
StringLike | Значение соответствует шаблону, заданному в условии. В значениях можно использовать знаки подстановки: * — нескольких символов; ? — один символ |
StringNotEquals | Значение не соответствует заданному в условии (с учетом регистра) |
StringNotEqualsIgnoreCase | Значение не соответствует заданному в условии (без учета регистра) |
StringNotLike | Значение соответствует шаблону, заданному в условии. В значениях можно использовать знаки подстановки: * — нескольких символов; ? — одного символа |
Операторы даты и времени
Операторы даты и времени используются для сравнения даты и времени из запроса с датой и временем, указанными в ключе.
| Оператор | Описание |
|---|---|
DateEquals | Соответствует заданной дате |
DateGreaterThan | Соответствует дате позже, чем заданная |
DateGreaterThanEquals | Соответствует заданной дате или более поздней |
DateLessThan | Соответствует дате раньше, чем заданная |
DateLessThanEquals | Соответствует заданной дате или более ранней |
DateNotEquals | Не соответствует заданной дате |
Операторы IP-адресов
Операторы IP-адресов используются для сравнения IP-адреса или диапазона адресов из запроса с IP-адресом или диапазоном адресов из ключа.
| Оператор | Значение |
|---|---|
IpAddress | Соответствует заданному адресу или входит в заданный диапазон |
NotIpAddress | Не соответствует заданному адресу или не входит в заданный диапазон |
Оператор Bool
Оператор Bool сравнивает логическое значений (true или false) со значением из ключа. Если значения совпадают, условие удовлетворяется.
Оператор IfExists
С помощью оператора IfExists можно сделать условия правила более гибким. Его можно добавить к любому другому оператору, кроме Null — например, StringLikeIfExists или BoolIfExists. Он указывает, что проверка условия должна игнорироваться, если ключ условия отсутствует в запросе.
Оператор Null
Оператор Nullиспользуется, чтобы проверить наличие ключа из запроса в условии. Если ключ отсутствует, результат оператора принимает значение true, если присутствует и для него задано значение — false.
Примеры политик
Публичный доступ на чтение
Эта политика разрешает любому пользователю из интернета доступ на чтение объектов, содержащихся в бакете. Ее можно использовать для статических веб-сайтов или общедоступных данных.
{
"Version": "2012-10-17",
"Statement": [
{
"Effect": "Allow",
"Principal": "*",
"Action": "s3:GetObject",
"Resource": "arn:aws:s3:::bucket/*"
}
]
}Доступ только для определенного пользователя
Эта политика разрешает доступ к объектам в бакете только для определенного пользователя Object Storage. Ее можно использовать для обеспечения безопасности данных и контроля доступа.
{
"Version": "2012-10-17",
"Statement": [
{
"Effect": "Allow",
"Principal": {
"AWS": "users/user"
},
"Action": "s3:*",
"Resource": "arn:aws:s3:::bucket/*"
}
]
}Доступ только для конкретного диапазона IP-адресов
Эта политика открывает доступ к объектам из определенной подсети. Ее можно использовать, например, если требуется защитить конфиденциальную информацию от несанкционированного доступа.
{
"Version": "2012-10-17",
"Statement": [
{
"Effect": "Allow",
"Principal": "*",
"Action": "s3:GetObject",
"Resource": "arn:aws:s3:::bucket/*",
"Condition": {
"IpAddress": {
"aws:SourceIp": "192.0.2.0/24"
}
}
}
]
}Доступ только в определенное время с использованием условий
Эта политика разрешает всем пользователям скачивать объекты из бакета только в период с 0 часов 0 минут 19 декабря 2024 года до 23 часов 59 минут 25 декабря 2024 года. Ее можно использовать для обеспечения дополнительной безопасности и соблюдения нормативных требований.
"Version": "2012-10-17",
"Statement": [
{
"Effect": "Allow",
"Principal": "*",
"Action": "s3:GetObject",
"Resource": "arn:aws:s3:::bucket/*",
"Condition": {
"DateGreaterThan": {
"aws:CurrentTime": "2024-12-19T00:00:00Z"
},
"DateLessThan": {
"aws:CurrentTime": "2024-12-25T23:59:59Z"
}
}
}
]
}Запрет удаления объектов
Эта политика запрещает удалять объекты из бакета, даже если у пользователя есть другие разрешения. Ее можно использовать, если в бакете хранятся критически важные данные.
{
"Version": "2012-10-17",
"Statement": [
{
"Effect": "Deny",
"Principal": "*",
"Action": "s3:DeleteObject",
"Resource": "arn:aws:s3:::bucket/*"
}
]
}