Перейти к основному содержимому
Политика доступа к контейнеру
Последнее изменение:

Политика доступа к контейнеру

Доступ к контейнеру можно задать через политику доступа (Bucket policy). Политика состоит из правил, которые разрешают или запрещают действия с ресурсом (контейнером или группой объектов) для всех или выбранных принципалов (пользователей). Основной принцип — если политика доступа создана, запрещено все, что не разрешено.

Политика доступа работает только с S3 API.

Политика доступа имеет ограничение на максимальный размер в 20 КБ.

Политика доступа может распространяться на любого пользователя, которому разрешен доступ к хранилищу в соответствии с ролевой моделью, а также определяет доступ для пользователей с ролью Пользователь объектного хранилища. Подробнее о взаимодействии ролевой модели и политик доступа в инструкции Управлять доступом в объектном хранилище.

Управлять политиками доступа могут только пользователи с ролью Владелец аккаунта, Администратор аккаунта или Администратор проекта, в котором находится контейнер.

Создавать политики доступа и управлять ими можно в панели управления или через S3 API в соответствии с требованиями к структуре политики.

Структура политики доступа

Политика доступа имеет JSON-структуру. Пример политики:

{
"Id": "my-bucket-policy",
"Version": "2012-10-17",
"Statement": [
{
"Sid": "AllowObjectDeletion",
"Effect": "Allow",
"Principal": {
"AWS": [
"*"
]
},
"Action": [
"s3:DeleteObject"
],
"Resource": [
"arn:aws:s3:::container-name",
"arn:aws:s3:::container-name/*",
"arn:aws:s3:::container-name/${aws:userid}/*"
],
"Condition": {
"StringEquals": {
"aws:UserAgent": [
"storage-test-user-agent"
]
}
}
},
{
"Effect": "Deny",
"Principal": "*",
"Action": "s3:GetObject",
"Resource": "arn:aws:s3:::container-name/*"
}
]
}

Содержимое политики:

ПолеОписаниеТип данныхОбязательный
IdИдентификатор политики, может быть любымСтрока
VersionВерсия политики доступа, значение — константа:
"2012-10-17"
Строка
StatementМассив правилМассив
SidНазвание правилаСтрока
EffectТип правила (Allow или Deny)Строка
Principal:AWSПринципалы (идентификаторы пользователей или * для всех запросов)Массив строк или строка
ActionsДействия или * для всех действийМассив строки ли строка
ResourcesРесурсы, на которые действует правилоМассив строк или строка
ConditionМассив условий, представленных в формате:
[оператор]:[ключ]:[массив значений ключа]
Массив

Правила

Правила бывают двух типов: разрешающие (Allow) и запрещающие (Deny).

Разрешение или запрет распространяется на действия, ресурсы и принципалов, добавленных в правило.

Если политика содержит несколько правил, они применяются следующим образом:

  • если хотя бы одно разрешающее правило выполняется, доступ будет разрешен;
  • если хотя бы одно запрещающее правило выполняется, доступ будет запрещен;
  • если выполняются одновременно разрешающие и запрещающие правила, доступ будет запрещен;
  • если ни одно правило не выполняется, доступ будет запрещен.

Принципалы

Правило применяется в отношении запросов от принципалов (пользователей):

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

Добавлять в качестве принципалов пользователей панели управления в политики доступа можно только при настройке политики через панель управления.

Ресурсы

Ресурсы — контейнер или набор объектов, на которые будет распространяться правило. Указывать можно только ресурсы, связанные с контейнером, для которого настраивается политика.

Ресурсы можно указывать в форматах:

  • arn:aws:s3:::<container-name> — ресурс контейнера, можно указать только один ресурс такого формата (контейнер, для которого настраивается политика). Ресурс будет работать для действий, связанных с настройкой контейнера, и не распространяется на его объекты;

  • arn:aws:s3:::<container-name>/<prefix> — ресурс объектов контейнера, где <prefix> — префикс, на объекты с которым будет распространяться правило. Если указать *, в ресурсы будут включены все объекты контейнера;

  • arn:aws:s3:::<container-name>/${<variable-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, условие удовлетворяется.

Ключи

Один ключ можно использовать в нескольких условиях. Ключу можно присвоить несколько значений.

aws:CurrentTimeСравнивает дату и время запроса со значением, указанным в условии
aws:RefererСравнивает заголовок Referer в запросе со значением, указанным в условии.

Пример: https://example.com/
aws:PrincipalType

Задает тип сущности, к которой делается запрос.

Возможные значения:

  • Account
  • User
  • AssumedRole
  • Anonymous
aws:SecureTransportПроверяет, был ли запрос отправлен с использованием шифрования SSL/TLS.
Возможные значения: true или false
aws:SourceIpСравнивает IP-адрес из запроса со значением из условия
aws:UserAgent

Сравнивает UserAgent из запроса со значением из условия.

Примеры значений:

  • Mozilla/5.0 (Windows NT 6.1; Win64; x64; rv:47.0)
  • Gecko/20100101
  • Firefox/47.0
aws:useridСравнивает идентификатор пользователя со значением из условия.
Пример значения: 9103a81de217448d908e53ac60c84acb
aws:usernameСравнивает имя пользователя со значением из условия
s3:authType

Ограничивает входящие запросы методом аутентификации, указанным в условии.

Примеры значений:

  • REST-HEADER
  • REST-QUERY-STRING
  • POST
s3:delimiterЗадает разделитель, который должны включать запросы пользователей.
Пример значения: /
s3:max-keysЗадает максимальное количество ключей, возвращаемых на запрос ListBucket
s3:prefixОграничивает доступ по префиксу в имени ключа
s3:signatureAgeОпределяет время действия подписи в запросе аутентификации (в миллисекундах)
s3:signatureversion

Задает версию подписи AWS для запросов аутентификации.

Примеры значений:

  • AWS
  • AWS4-HMAC-SHA256
s3:versionidЗадает доступ к определенной версии объекта.
Пример значения: L4kqtJlcpXroDTDmpUMLUo
s3:x-amz-content-sha256Запрещает неподписанное содержимое в запросе
s3:x-amz-copy-sourceОграничивает источник копирования определенным контейнером, префиксом или объектом
s3:x-amz-metadata-directiveЗадает принудительный выбор копирования или замены при копировании объектов
s3:x-amz-server-side-encryptionТребует шифрования на стороне сервера
s3:x-amz-storage-classОграничивает доступ по классу хранилища

Операторы

Операторы сравнивают значения из запроса к ресурсу со значением, указанным в значении ключа в условии.

Число из запроса сравнивается с числом, указанным в условии.

NumericEqualsЗначение равно заданному в условии
NumericGreaterThanЗначение больше заданного в условии
NumericGreaterThanEqualsЗначение больше или равно заданному в условии
NumericLessThanЗначение меньше заданного в условии
NumericLessThanEqualsЗначение меньше или равно заданному в условии
NumericNotEqualsЗначение не равно заданному в условии