Skip to content

Политики бакета

Политика бакета – это набор правил, определяющих, кто и какие действия может выполнять с объектами в бакете.

При помощи политик бакета возможно:

  • разрешать или запрещать операции с объектами в бакете для конкретных пользователей, групп пользователей или для любого пользователя из Интернета;
  • определять списки разрешенных и запрещенных операций c объектами в бакете;
  • устанавливать ограничения доступа по указанным критериям (например, по диапазону IP-адресов или времени доступа).

Используя политики бакета, вы сможете:

  • контролировать, кто может взаимодействовать с данными, снижая риск несанкционированного доступа;
  • гибко настраивать доступ к бакету для различных сценариев, включая доступ по IP-адресу, времени или другим условиям;
  • обеспечить соблюдение требований безопасности и конфиденциальности данных.

Структура и синтаксиc политики бакета

Схема данных

Политика бакета представляет собой набор правил, котороые определяются в формате JSON:

json
{
    "Version": "2012-10-17",
    "Statement": [
        {
            "Effect": "Allow (разрешить) или Deny (запретить)",
            "Principal": "Кто получит доступ",
            "Action": "Действия, которые разрешены или запрещены",
            "Resource": "Ресурсы, к которым применяется политика",
            "Condition": {
                "Условия, при которых применяется политика"
            }
        }
    ]
}

В состав правила входят следующие элементы:

ИмяТипКомментарийПример
VersionДатаВерсия синтаксиса политики. Имеет фиксированное значение `2012-10-07`"Version": "2012-10-17"
StatementОбъектПеречень разрешений и запретов в рамках политики. Включает элементы:
  • Effect — указывает, разрешено или запрещено действие. Может иметь значение Allow (разрешено) или Deny (запрещено);
  • Principal — определяет, кто именно получит доступ. Доступ можно предоставить одному пользователю, группе пользователей или всем пользователям;
  • Action — определяет действия, которые разрешены или запрещены (например, s3:GetObject для чтения объектов);
  • Resource — указывает ресурсы, к которым применяется политика. Обычно это ресурсы бакета или объектов.
  • Сondition (необязательный параметр) — указывает условия, при которых применяется политика (например, ограничения по IP-адресу или по времени).
{

  "Version": "2012-10-17",
  "Statement": [
   {
   "Effect": "Allow",
   "Principal": "*",
      "Action": "s3:GetObject",
   "Resource": "arn:aws:s3:::bucket/*"
   }
  ]
}

Действия

В рамках политик можно разрешать или запрещать следующие действия:

ДействиеОписание
*Все операции с бакетом и объектами в нем
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:CurrentTimeDateСравнивает дату и время запроса со значением, указанным в условии
aws:refererStringСравнивает заголовок Referer в запросе со значением, указанным в условии.
aws:PrincipalTypeStringЗадает тип сущности, к которой делается запрос
aws:SecureTransportBoolПроверяет, был ли запрос отправлен с использованием шифрования SSL/TLS.
aws:SourceIpIP addressСравнивает IP-адрес из запроса со значением из условия
aws:UserAgentStringСравнивает UserAgent из запроса со значением из условия
aws:useridStringСравнивает идентификатор пользователя со значением из условия
aws:usernameStringСравнивает имя пользователя со значением из условия
s3:authTypeStringОграничивает входящие запросы методом аутентификации, указанным в условии
s3:delimiterStringЗадает разделитель, который должны включать запросы пользователей
s3:max-keysNumericЗадает максимальное количество имен объектов, возвращаемых при запросе списка объектов в бакете
s3:prefixStringОграничивает доступ к папке
s3:signatureAgeNumericОпределяет время действия подписи в запросе аутентификации (в миллисекундах)
s3:signatureversionStringЗадает версию подписи AWS для запросов аутентификации
s3:versionidStringОграничивает доступ к конкретной версии объекта
s3:x-amz-content-sha256StringЗапрещает передавать в запросах неподписанное содержимое
s3:x-amz-copy-sourceStringРазрешает использовать в качестве источника копирования только определенный бакет, папку или объект
s3:x-amz-metadata-directiveStringУказывет, что делать с метаданными при копировании объекта: копировать (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.

Примеры политик

Публичный доступ на чтение

Эта политика разрешает любому пользователю из интернета доступ на чтение объектов, содержащихся в бакете. Ее можно использовать для статических веб-сайтов или общедоступных данных.

json
{
  "Version": "2012-10-17",
  "Statement": [
    {
      "Effect": "Allow",
      "Principal": "*",
      "Action": "s3:GetObject",
      "Resource": "arn:aws:s3:::bucket/*"
    }
  ]
}
Доступ только для определенного пользователя

Эта политика разрешает доступ к объектам в бакете только для определенного пользователя Object Storage. Ее можно использовать для обеспечения безопасности данных и контроля доступа.

json
{
  "Version": "2012-10-17",
  "Statement": [
    {
      "Effect": "Allow",
      "Principal": {
        "AWS": "users/user"
      },
      "Action": "s3:*",
      "Resource": "arn:aws:s3:::bucket/*"
    }
  ]
}
Доступ только для конкретного диапазона IP-адресов

Эта политика открывает доступ к объектам из определенной подсети. Ее можно использовать, например, если требуется защитить конфиденциальную информацию от несанкционированного доступа.

json
{
  "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 года. Ее можно использовать для обеспечения дополнительной безопасности и соблюдения нормативных требований.

json
  "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"
        }
      }
    }
  ]
}
Запрет удаления объектов

Эта политика запрещает удалять объекты из бакета, даже если у пользователя есть другие разрешения. Ее можно использовать, если в бакете хранятся критически важные данные.

json
{
  "Version": "2012-10-17",
  "Statement": [
    {
      "Effect": "Deny",
      "Principal": "*",
      "Action": "s3:DeleteObject",
      "Resource": "arn:aws:s3:::bucket/*"
    }
  ]
}