Политики доступа (Bucket Policy)

Bucket Policy позволяет задать права на действия с бакетами, объектами и группами объектов в хранилище.

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

Правила Bucket Policy задаются в JSON-файле, который состоит из нескольких базовых элементов.

Элементы политики доступа

Политику доступа можно создать с помощью генератора политик AWS и передать через API или сторонний инструмент, например AWS CLI.

Элементы политики

Элемент

Описание

Id

Идентификатор политики доступа.

Version

Версия языка политики.

Определяет синтаксис языка для правил, которые будут использоваться в политике.

Актуальная версия 2012-10-17.

Statement

Основной и обязательный элемент политики.

Может содержать один оператор или массив отдельных операторов. Каждый отдельный блок операторов заключается в {  }, массив из операторов заключается в [ ]:

"Statement": [{...},{...},{...}]

Sid

Дополнительный идентификатор политики .

Значение Sid должно быть уникальным в рамках политики.

Sid поддерживает прописные буквы A-Z, строчные буквы a-z и цифры 0–9.

Effect

Обязательный элемент политики, разрешает или запрещает действие оператора.

Допустимые значения Allow или Deny. По умолчанию, доступ к ресурсам запрещен.

Principal

Обязательный элемент, указывает на получателя разрешения .

Получаетелем может быть пользователь сервисный аккаунт или все пользователи интернета.

Если указать * то политика будет назначена для всех пользователей интернета.

NotPrincipal

Необязательный элемент. Устанавливает запрет доступа для всех пользователей кроме тех, что указаны в NotPrincipal.

Action

Указывает действие или действия, которые разрешает или запрещает политика.

Для указания нескольких действий используется массив ["","",""].

Если указать *, то политика применится для всех действий.

NotAction

Расширенный элемент политики, который разрешает все действия, кроме перечисленных в списке этого элемента.

На действия, которые указаны в NotAction не влияет Allow или Deny, которые указаны в элементе Effect. Например, если вы используете "Effect": "Allow", то все действия вне списка NotAction будут разрешены.

Resource

Указывает ресурс или ресурсы, для которого применяется правило.

В качестве ресурса может быть указан бакет, объект в бакете (<bucket_name>/../<key>) или префикс *. Для обозначение всех объектов в бакете можно использовать пустой префикс <bucket_name>/*.

Если в качестве ресурса указан бакет, то он не будет включать в себя объекты внутри бакета. Чтобы включить в правило и бакет и объекты внутри бакета, укажите их как отдельные ресурсы:

"Resource": [
  "arn:aws:s3:::<bucket-name>",
  "arn:aws:s3:::<bucket-name>/*",
]

Для формата JSON, ресурс должен содддержать префикс arn:aws:s3:::.

NotResource

Расширенный элемент политики, который разрешает все ресурсы, кроме перечисленных в списке этого элемента.

Condition

Блок условий, при которых политика вступает в силу.

В элементе используются операторы условий для сопоставления ключей и значений в политике с ключами и значениями в запросе:

"Condition" : { "{condition-operator}" : { "{condition-key}" : "{condition-value}" }}

Подробнее об элементах политики можно прочитать в документации AWS.

Примеры политик доступа

Политика, которая делает бакет публичным:

{
  "Statement": [
    {
      "Effect": "Allow",
      "Principal": "*",
      "Action": "s3:GetObject",
      "Resource": "arn:aws:s3:::my_bucket/*"
    }
  ]
}

Политика, которая разрешает скачивать объекты из бакета только для указанного пула IP-адресов:

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

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

{
  "Version": "2012-10-17",
  "Statement": [
    {
      "Effect": "Allow",
      "Principal": "*",
      "Action": "s3:GetObject",
      "Resource": "arn:aws:s3:::my_bucket/*"
    },
    {
      "Effect": "Deny",
      "Principal": "*",
      "Action": "s3:GetObject",
      "Resource": "arn:aws:s3:::my_bucket/you_shall_not_pass/*"
    }
  ]
}
Запустили Evolution free tier
для Dev & Test
Получить