Bucket Policy
Bucket Policy — это механизм управления доступом к бакетам и их содержимому с помощью разрешений и ограничений. Политика представляет собой JSON-документ, который задает правила доступа для определенных пользователей или групп.
Подробнее о настройке Bucket Policy можно узнать в официальной документации AWS или CEPH.
Основные элементы описания Bucket Policy
Общие поля
- Version: версия политики S3. Доступны два значения:
2012-10-17(рекомендуется);2008-10-17.
- Id: идентификатор политики (необязательный параметр).
- Statement: массив, содержащий отдельные политики (правила).
Поля внутри Statement
Каждая политика в массиве Statement описывается следующими параметрами:
- Sid (Statement ID): уникальный идентификатор конкретной политики (необязательный).
- Effect: действие политики, указывающее на тип разрешений:
Allow— разрешение;Deny— запрет.
- Principal: субъект, на который распространяется политика. Возможные значения:
*— все пользователи;arn:aws:iam:::user/<username>— конкретный пользователь.
- Action: действия, которые разрешено или запрещено выполнять. Например:
s3:PutObject— загрузка объектов;s3:GetObject— чтение объектов.
- Resource: ресурсы, на которые распространяется политика. Возможные значения:
arn:aws:s3:::*— все бакеты и объекты;arn:aws:s3:::<bucketname>— конкретный бакет;arn:aws:s3:::<bucketname>/*— все объекты в бакете;arn:aws:s3:::<bucketname>/myfolder/*— все объекты в определенной папке.
- Condition: дополнительные условия для применения политики. Условия описываются предопределенными ключами и значениями, которые зависят от используемого хранилища.
Особенности Bucket Policy в Ceph
Реализация Bucket Policy в Ceph имеет несколько отличий от оригинального AWS S3:
Principal. В Ceph для указания пользователей используются специфичные идентификаторы:
- Основной пользователь:
arn:aws:iam:::user/<username>. - Подпользователь:
arn:aws:iam:::user/<username>:<subuser>.
Action. Ceph поддерживает ограниченный набор действий (Action) по сравнению с AWS. Полный список доступных действий можно найти в официальной документации Ceph.
Conditions. Ceph поддерживает ограниченный набор ключей условий. Список ключей, доступных для использования в условиях:
- Общие ключи:
aws:CurrentTimeaws:EpochTimeaws:PrincipalTypeaws:Refereraws:SecureTransportaws:SourceIpaws:UserAgentaws:username
- Ключи для S3: перечислены в документации Ceph.
Важно
Официальная документация Ceph не предоставляет полного списка поддерживаемых операторов и условий. В теории, возможно использование всех операторов из AWS, однако это следует проверять экспериментально.
Примеры Bucket Policy
Пример 1. Публичный доступ на чтение к объектам в бакете bucketname:
{
"Version": "2012-10-17",
"Statement": {
"Effect": "Allow",
"Principal": "*",
"Action": "s3:GetObject",
"Resource": [
"arn:aws:s3:::<bucketname>/*"
]
}
}Пример 2. Доступ к бакету bucketname пользователю username только с определенного IP-адреса:
{
"Version": "2012-10-17",
"Statement": {
"Effect": "Deny",
"Principal": {
"AWS": [
"arn:aws:iam:::user/<username>"
]
},
"Action": "*",
"Resource": [
"arn:aws:s3:::<bucketname>/*",
"arn:aws:s3:::<bucketname>"
],
"Condition": {
"NotIpAddress" : {
"aws:SourceIp": "192.0.2.188/32"
}
}
}
}Пример 3. Запрет пользователю username удалять объекты и их версии в бакете bucketname:
{
"Version": "2012-10-17",
"Statement": {
"Effect": "Deny",
"Principal": {
"AWS": [
"arn:aws:iam:::user/<username>"
]
},
"Action": [
"s3:DeleteObject",
"s3:DeleteObjectVersion"
],
"Resource": [
"arn:aws:s3:::<bucketname>/*"
]
}
}