nav-img
Evolution

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

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

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

Политику доступа можно создать с помощью генератора политик AWS. В дальнейшем политику можно применить к бакету с помощью одного из доступных инструментов.

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

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

Элемент

Описание

Version

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

Обязательное поле.

Некоторые функции и возможности политики зависят от версии синтаксиса. Поле также обеспечивает обратную совместимость: политика продолжит работать, даже если версия перестанет быть актуальной.

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

Id

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

Обязательное поле.

Statement

Описание правил политики.

Обязательное поле.

Состоит из одного или нескольких правил, разделенных символами {  }. Правила заключаются в [ ]:

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

Sid

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

Необязательное поле.

Используется для облегчения навигации по правилам политики. Значение должно быть уникальным.

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

Effect

Разрешает или запрещает действие.

Обязательное поле.

Возможные значения: Allow или Deny.

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

Principal

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

Обязательное поле.

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

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

NotPrincipal

Устанавливает пользователей, на которых правило не действует.

Необязательное поле.

Нельзя использовать совместно с полем Principal.

Action

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

Обязательное поле.

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

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

NotAction

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

Необязательное поле.

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

Не используется совместно с полем Action.

Resource

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

Обязательное поле.

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

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

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

Ресурс должен содержать префикс arn:aws:s3:::.

NotResource

Устанавливает ресурсы, на которые правило не действует.

Необязательное поле.

Не используется совместно с полем Resource.

Condition

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

Обязательное поле.

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

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

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

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

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

    {
    "Version": "2012-10-17",
    "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/*"
    }
    ]
    }