Ролевая модель
В объектном хранилище на основе 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:AbortMultipartUploads3:CreateBuckets3:DeleteBucketPolicys3:DeleteBuckets3:DeleteBucketWebsites3:DeleteObjects3:DeleteObjectVersions3:DeleteReplicationConfigurations3:GetAccelerateConfigurations3:GetBucketAcls3:GetBucketCORSs3:GetBucketLocations3:GetBucketLoggings3:GetBucketNotifications3:GetBucketPolicys3:GetBucketRequestPayments3:GetBucketTaggings3:GetBucketVersionings3:GetBucketWebsites3:GetLifecycleConfigurations3:GetObjectAcls3:GetObjects3:GetObjectTorrents3:GetObjectVersionAcls3:GetObjectVersions3:GetObjectVersionTorrents3:GetReplicationConfigurations3:IPAddresss3:NotIpAddresss3:ListAllMyBucketss3:ListBucketMultipartUploadss3:ListBuckets3:ListBucketVersionss3:ListMultipartUploadPartss3:PutAccelerateConfigurations3:PutBucketAcls3:PutBucketCORSs3:PutBucketLoggings3:PutBucketNotifications3:PutBucketPolicys3:PutBucketRequestPayments3:PutBucketTaggings3:PutBucketVersionings3:PutBucketWebsites3:PutLifecycleConfigurations3:PutObjectAcls3:PutObjects3:PutObjectVersionAcls3:PutReplicationConfigurations3:RestoreObject
Примеры политик для подпользователей
Пример 1. Разрешить все действия подпользователю <subuser> в бакете <bucketname> в пространстве <username>
{
"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>
{
"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>
{
"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>"
]
}
}