Skip to content

Ролевая модель

В объектном хранилище на основе CEPH реализация ролевой модели пользователей организована с использованием механизма подпользователей (subusers).

Подпользователи (Subusers)

Подпользователь — это вспомогательная учетная запись, создаваемая для основного пользователя. Подпользователи используются для реализации ролевой модели, позволяя гибко управлять доступом к объектам и бакетам в объектном хранилище.

  • Количество подпользователей: неограниченно.
  • Создание: осуществляется по запросу через службу технической поддержки.

Типы прав доступа

Для подпользователей предусмотрено пять основных типов прав:

  • Без прав (No Access).
  • Чтение (Read).
  • Запись (Write).
  • Чтение и запись (Read-Write).
  • Полный доступ (Full Access).

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

  • Глобальный характер прав.
    Права, назначенные подпользователю при создании, имеют глобальный масштаб. Например, подпользователь с правами на чтение-запись получает доступ ко всем бакетам в пространстве основного пользователя. Однако зачастую клиентам требуется ограниченный доступ, например, только к одному бакету или к конкретным операциям.
  • Ручная настройка доступа.
    Чтобы обеспечить изолированный доступ к одному бакету, приходится создавать ограничивающие политики, блокирующие доступ ко всем бакетам, кроме целевого.
  • Снижение рисков утечки данных.
    Поскольку создание подпользователей осуществляется вручную через техническую поддержку, назначение прав уже на этапе создания подпользователя может привести к ошибкам, увеличивающим риск утечек данных.

Управление правами доступа

Назначение и изменение прав подпользователя осуществляется через политику бакета (Bucket Policy). Использование политик бакета позволяет гибко ограничивать или предоставлять доступ подпользователям, обходя ограничения глобальных прав.

Механизм политик бакетов в CEPH аналогичен концепции Bucket Policy в Amazon S3, однако имеет свои особенности. Подробную информацию о формате и настройке политик можно найти в официальной документации CEPH или AWS.

Одно из ключевых отличий — формат именования пользователей в атрибуте Principal.

  • В AWS это выглядит так: arn:aws:iam::<AWS_Account>:root.
  • В CEPH же это выглядит иначе:
    • arn:aws:iam:::user/<username> для основного пользователя и
    • arn:aws:iam:::user/<username>:<subuser> для подпользователя.

Сами права регулируются с помощью действий (Actions).

Список действий, доступных для CEPH
  • s3:AbortMultipartUpload
  • s3:CreateBucket
  • s3:DeleteBucketPolicy
  • s3:DeleteBucket
  • s3:DeleteBucketWebsite
  • s3:DeleteObject
  • s3:DeleteObjectVersion
  • s3:DeleteReplicationConfiguration
  • s3:GetAccelerateConfiguration
  • s3:GetBucketAcl
  • s3:GetBucketCORS
  • s3:GetBucketLocation
  • s3:GetBucketLogging
  • s3:GetBucketNotification
  • s3:GetBucketPolicy
  • s3:GetBucketRequestPayment
  • s3:GetBucketTagging
  • s3:GetBucketVersioning
  • s3:GetBucketWebsite
  • s3:GetLifecycleConfiguration
  • s3:GetObjectAcl
  • s3:GetObject
  • s3:GetObjectTorrent
  • s3:GetObjectVersionAcl
  • s3:GetObjectVersion
  • s3:GetObjectVersionTorrent
  • s3:GetReplicationConfiguration
  • s3:IPAddress
  • s3:NotIpAddress
  • s3:ListAllMyBuckets
  • s3:ListBucketMultipartUploads
  • s3:ListBucket
  • s3:ListBucketVersions
  • s3:ListMultipartUploadParts
  • s3:PutAccelerateConfiguration
  • s3:PutBucketAcl
  • s3:PutBucketCORS
  • s3:PutBucketLogging
  • s3:PutBucketNotification
  • s3:PutBucketPolicy
  • s3:PutBucketRequestPayment
  • s3:PutBucketTagging
  • s3:PutBucketVersioning
  • s3:PutBucketWebsite
  • s3:PutLifecycleConfiguration
  • s3:PutObjectAcl
  • s3:PutObject
  • s3:PutObjectVersionAcl
  • s3:PutReplicationConfiguration
  • s3:RestoreObject

Примеры политик для подпользователей

Пример 1. Разрешить все действия подпользователю <subuser> в бакете <bucketname> в пространстве <username>

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

Пример 2. Разрешить чтение и запись для подпользователя <subuser> в бакете <bucketname>

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

Пример 3. Разрешить все действия подпользователям <subuser_1> и <subuser_2> в <bucketname>

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