Skip to content

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:

  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, однако это следует проверять экспериментально.

Примеры Bucket Policy

Пример 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>/*"
    ]
  }
}