Перейти к содержимому

Bucket Policy

Bucket Policy — это механизм управления доступом к бакетам и их содержимому с помощью разрешений и ограничений. Политика представляет собой JSON-документ, который задает правила доступа для определенных пользователей или групп.

Подробнее о настройке Bucket Policy можно узнать в официальной документации AWS или CEPH.

  • Version: версия политики S3. Доступны два значения:
    • 2012-10-17 (рекомендуется);
    • 2008-10-17.
  • Id: идентификатор политики (необязательный параметр).
  • 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 имеет несколько отличий от оригинального AWS S3:

  1. Principal. В Ceph для указания пользователей используются специфичные идентификаторы:

    • Основной пользователь: arn:aws:iam:::user/<username>.
    • Подпользователь: arn:aws:iam:::user/<username>:<subuser>.
  2. Action. Ceph поддерживает ограниченный набор действий (Action) по сравнению с AWS. Полный список доступных действий можно найти в официальной документации Ceph.

  3. Conditions. Ceph поддерживает ограниченный набор ключей условий. Список ключей, доступных для использования в условиях:

    • Общие ключи:
      • aws:CurrentTime
      • aws:EpochTime
      • aws:PrincipalType
      • aws:Referer
      • aws:SecureTransport
      • aws:SourceIp
      • aws:UserAgent
      • aws:username
    • Ключи для S3: перечислены в документации Ceph.
Важно

Официальная документация Ceph не предоставляет полного списка поддерживаемых операторов и условий. В теории, возможно использование всех операторов из AWS, однако это следует проверять экспериментально.

Пример 1. Публичный доступ на чтение к объектам в бакете bucketname:

json
{
"Version": "2012-10-17",
"Statement": {
"Effect": "Allow",
"Principal": "*",
"Action": "s3:GetObject",
"Resource": [
"arn:aws:s3:::<bucketname>/*"
]
}
}

Пример 2. Доступ к бакету bucketname пользователю username только с определенного IP-адреса:

json
{
"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:

json
{
"Version": "2012-10-17",
"Statement": {
"Effect": "Deny",
"Principal": {
"AWS": [
"arn:aws:iam:::user/<username>"
]
},
"Action": [
"s3:DeleteObject",
"s3:DeleteObjectVersion"
],
"Resource": [
"arn:aws:s3:::<bucketname>/*"
]
}
}