Ролевая модель
В объектном хранилище на основе CEPH реализация ролевой модели пользователей организована с использованием механизма подпользователей (subusers).
Подпользователи (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).
Примеры политик для подпользователей
Заголовок раздела «Примеры политик для подпользователей»Пример 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>" ] }}