Политики доступа (Bucket Policy) в Object Storage
Вы можете задавать права на действия с бакетами, объектами и группами объектов с помощью политик доступа. Они состоят из правил, которые задаются в JSON-файле.
В отличие от ACL, политики доступа имеют более гибкие настройки доступа к ресурсам. Вы можете разрешить доступ с конкретных IP-адресов, выдать полный доступ к бакетам нескольким пользователям или разрешить скачивать всем пользователям только определенный объект.
Политику доступа можно создать с помощью генератора политик AWS. В дальнейшем политику можно применить к бакету с помощью одного из доступных инструментов.
Элементы политики доступа
Элемент | Описание |
---|---|
Version | Версия синтаксиса политики. Обязательное поле. Некоторые функции и возможности политики зависят от версии синтаксиса. Поле также обеспечивает обратную совместимость: политика продолжит работать, даже если версия перестанет быть актуальной. Актуальная версия 2012-10-17. |
Id | Идентификатор политики доступа. Обязательное поле. |
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>/*. Если в качестве ресурса указан бакет, то он не будет включать в себя объекты внутри бакета. Чтобы включить в правило и бакет и объекты внутри бакета, укажите их как отдельные ресурсы:
Ресурс должен содержать префикс arn:aws:s3:::. |
NotResource | Устанавливает ресурсы, на которые правило не действует. Необязательное поле. Не используется совместно с полем Resource. |
Condition | Блок условий, при которых применяется правило. Обязательное поле. В элементе используются операторы условий для сопоставления ключей и значений в политике с ключами и значениями в запросе:
|
Подробнее об элементах политики в документации 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/*"}]}Политика, которая требует шифрование каждого объекта, добавляемого в бакет, с помощью SSE-KMS. Если объект не шифруется с помощью SSE-KMS, запрос отклоняется.
{"Version": "2012-10-17","Id": "PutObjPolicy","Statement": [{"Sid": "DenyObjectsThatAreNotSSEKMS","Principal": "*","Effect": "Deny","Action": "s3:PutObject","Resource": "arn:aws-cn:s3:::amzn-s3-demo-bucket/*","Condition": {"Null": {"s3:x-amz-server-side-encryption-aws-kms-key-id": "true"}}}]}Политика, которая запрещает добавлять объекты в бакет, если они не зашифрованы с помощью SSE-KMS.
{"Version": "2012-10-17","Id": "PutObjPolicy","Statement": [{"Sid": "DenyObjectsThatAreNotSSEKMSWithSpecificKey","Principal": "*","Effect": "Deny","Action": "s3:PutObject","Resource": "arn:aws-cn:s3:::amzn-s3-demo-bucket/*","Condition": {"ArnNotEqualsIfExists": {"s3:x-amz-server-side-encryption-aws-kms-key-id": "arn:aws-cn:kms:us-east-2:111122223333:key/01234567-89ab-cdef-0123-456789abcdef"}}}]}
- Элементы политики доступа
- Примеры политик доступа