searchusermenu
  • 发布文章
  • 消息中心
点赞
收藏
评论
分享
原创

对象存储的用户管理介绍

2022-12-29 07:19:28
72
0

关键词:

ceph、User、Subuser、S3、swift、radosgw-admin

前言:

对象存储用户管理是对象存储的基本功能,必须通过创建用户、access_key 和 secrect_key,才能使终端用户能够与对象网关服务进行交互。本文将介绍用户的创建、修改、查看、禁用/启用、访问控制、密钥管理、设置配额、设置存储策略等操作。以及如何使用 python 的 rgwadmin 库进行操作。

有两种用户类型:

  • 用户:术语“用户”反映了 S3 接口的用户。
  • 子用户:术语“子用户”反映了 Swift 接口的用户。子用户与用户相关联。

用户管理

创建用户(S3):

radosgw-admin user create --uid={username} --display-name="{display-name}" [--email={email}]

如:

radosgw-admin user create --uid=johndoe --display-name="John Doe" --email=john@example.com
{ "user_id": "johndoe",
  "display_name": "John Doe",
  "email": "john@example.com",
  "suspended": 0,
  "max_buckets": 1000,
  "subusers": [],
  "keys": [
        { "user": "johndoe",
          "access_key": "11BS02LGFB6AL6H1ADMW",
          "secret_key": "vzCEkuryfn060dfee4fgQPqFrncKEIkh3ZcdOANY"}],
  "swift_keys": [],
  "caps": [],
  "op_mask": "read, write, delete",
  "default_placement": "",
  "placement_tags": [],
  "bucket_quota": { "enabled": false,
      "max_size_kb": -1,
      "max_objects": -1},
  "user_quota": { "enabled": false,
      "max_size_kb": -1,
      "max_objects": -1},
  "temp_url_keys": []
}

创建子用户(swift):

radosgw-admin subuser create --uid={uid} --subuser={uid} --access=[ read | write | readwrite | full ]

这里 full 不等同于 readwrite,因为它还包括访问控制策略。

如:

radosgw-admin subuser create --uid=johndoe --subuser=johndoe:swift --access=full
{ "user_id": "johndoe",
    "display_name": "John Doe",
    "email": "john@example.com",
    "suspended": 0,
    "max_buckets": 1000,
    "subusers": [
          { "id": "johndoe:swift",
            "permissions": "full-control"}],
    "keys": [
          { "user": "johndoe",
            "access_key": "11BS02LGFB6AL6H1ADMW",
            "secret_key": "vzCEkuryfn060dfee4fgQPqFrncKEIkh3ZcdOANY"}],
    "swift_keys": [],
    "caps": [],
    "op_mask": "read, write, delete",
    "default_placement": "",
    "placement_tags": [],
    "bucket_quota": { "enabled": false,
        "max_size_kb": -1,
        "max_objects": -1},
    "user_quota": { "enabled": false,
        "max_size_kb": -1,
        "max_objects": -1},
    "temp_url_keys": []}

查询用户信息

radosgw-admin user info --uid=johndoe

修改用户信息

要修改有关用户的信息,必须指定用户 ID ( --uid={username}) 和要修改的属性。典型的修改是邮箱(--email)、显示名(--display-name)、访问级别(--access)。例如:

radosgw-admin user modify --uid=johndoe --display-name="John E. Doe" --email=hello@test.com

如果修改子用户,指定 uid 和 subuser

radosgw-admin subuser modify --uid=johndoe --subuser=johndoe:swift --access=full

用户禁用:

注意禁用用户会禁用子用户。

radosgw-admin user suspend --uid=johndoe

用户启用:

radosgw-admin user enable --uid=johndoe

删除用户:

删除用户时,该用户和子用户将从系统中删除。但是,如果愿意,可以只删除子用户。要删除用户(和子用户),请指定用户 ID。

radosgw-admin user rm --uid=johndoe

要仅删除子用户,请指定子用户 ID。

radosgw-admin subuser rm --subuser=johndoe:swift

可以使用 --purge-data 选项清除与 UID 关联的所有数据,以及 --purge-keys 选项清除与 UID 关联的所有密钥。

添加/删除密钥

用户和子用户都需要密钥才能访问 S3 或 Swift 接口。要使用 S3,用户需要一个由 access-key 和 secret-key 组成的密钥对。另一方面,要使用 Swift,用户通常需要一个 secret-key(密码),并将其与关联的用户 ID 一起使用。可以创建密钥时指定或自动生成。也可以删除密钥。选项包括:

  • --key-type=<type> 指定密钥类型。选项有:s3、swift
  • --access-key=<key> 手动指定 S3 访问密钥。
  • --secret-key=<key> 手动指定 S3 密钥或 Swift 密钥。
  • --gen-access-key 自动生成随机 S3 访问密钥。
  • --gen-secret 自动生成随机 S3 密钥或随机 Swift 密钥。

如:            

radosgw-admin key create --uid=foo --key-type=s3 --access-key fooAccessKey --secret-key fooSecretKey
{ "user_id": "foo",
    "rados_uid": 0,
    "display_name": "foo",
    "email": "foo@example.com",
    "suspended": 0,
    "keys": [
      { "user": "foo",
        "access_key": "fooAccessKey",
        "secret_key": "fooSecretKey"}],
  }

可以为一个用户创建多个 S3 密钥对。

为子用户附加指定的 swift 密钥:

radosgw-admin key create --subuser=foo:bar --key-type=swift --secret-key barSecret
{ "user_id": "foo",
    "rados_uid": 0,
    "display_name": "foo",
    "email": "foo@example.com",
    "suspended": 0,
    "subusers": [
       { "id": "foo:bar",
         "permissions": "full-control"}],
    "swift_keys": [
      { "user": "foo:bar",
        "secret_key": "asfghjghghmgm"}]}

请注意,子用户只能拥有一个 swift 密钥。

配额管理

能够为用户和用户拥有的存储桶设置配额。配额包括存储桶中的最大对象数和存储桶可以容纳的最大存储大小。

  • 存储桶:该--bucket选项允许为用户拥有的存储桶指定配额。
  • 最大对象:该--max-objects设置允许指定最大对象数。负值禁用此设置。
  • 最大大小:该--max-size选项允许在 B/K/M/G/T 中指定配额大小,其中 B 是默认值。负值禁用此设置。
  • 配额范围:该--quota-scope选项设置配额的范围。选项是bucket和user。存储桶配额适用于用户拥有的存储桶。用户配额适用于用户。

设置用户配额

radosgw-admin quota set --quota-scope=user --uid=<uid> [--max-objects=<num objects>] [--max-size=<max size>]

radosgw-admin quota set --quota-scope=user --uid=johndoe --max-objects=1024 --max-size=1024B

启用/禁用用户配额

启用禁用分别为:

radosgw-admin quota enable --quota-scope=user --uid=<uid>
radosgw-admin quota disable --quota-scope=user --uid=<uid>

设置桶配额

radosgw-admin quota set --uid=<uid> --quota-scope=bucket [--max-objects=<num objects>] [--max-size=<max size]

启用/禁用存储桶配额

radosgw-admin quota enable --quota-scope=bucket --uid=<uid>
radosgw-admin quota disable --quota-scope=bucket --uid=<uid>

用户存储策略

假设当前 zone 有非默认存储策略为 placement_1。

以用户foo为例,对用户设置方法如下:

先查询用户 metadata 到文件

radosgw-admin metadata get user:foo > foo_metadata.json

然后编辑 foo_metadata.json 中 default_placement 对应的 value,保存。

...
        ],
        "swift_keys": [],
        "caps": [],
        "op_mask": "read, write, delete",
        "default_placement": "placement_1",
        "default_storage_class": "",
        "placement_tags": [],
        "bucket_quota": {
            "enabled": false,
            "check_on_raw": false,
            "max_size": -1,
            "max_size_kb": 0,
            "max_objects": -1
        },
        "user_quota": {

...

最后加载这个文件:

radosgw-admin metadata put user:foo < foo_metadata.json

rgwadmin 库(python)

rgwadmin 是一个python 库,对  Ceph Object Storage Admin API 进行了封装。

若其它语言若没有可用的库,可以参考 https://docs.ceph.com/en/latest/radosgw/adminops/直接通过 HTTP 客户端库进行调用。

这里只简单介绍代码示例,可自行安装进行了解。

from rgwadmin import RGWAdmin

rgw = RGWAdmin(access_key='XXX', secret_key='XXX', server='obj.example.com')
rgw.create_user(
    uid='liam',
    display_name='Liam Monahan',
    email='liam@umiacs.umd.edu',
    user_caps='usage=read, write; users=read',
    max_buckets=1000)
rgw.set_user_quota(
    uid='liam',
    quota_type='user',
    max_size_kb=1024*1024,
    enabled=True)
rgw.remove_user(uid='liam', purge_data=True)

from rgwadmin import RGWAdmin, RGWUser

RGWAdmin.connect(access_key='XXX', secret_key='XXX', server='obj.example.com')
u = RGWUser.create(user_id='test', display_name='Test User')
u.user_quota.size = 1024 * 1024  # in bytes
u.user_quota.enabled = True
u.save()
u.delete()

总结

以上是对象存储用户管理的介绍,以及如何使用 python 的 rgwadmin 进行操作。

在实际环境中,可与对象桶的使用(桶权限,桶配额等)密切配合,灵活使用。

0条评论
0 / 1000
Frost
3文章数
0粉丝数
Frost
3 文章 | 0 粉丝
Frost
3文章数
0粉丝数
Frost
3 文章 | 0 粉丝
原创

对象存储的用户管理介绍

2022-12-29 07:19:28
72
0

关键词:

ceph、User、Subuser、S3、swift、radosgw-admin

前言:

对象存储用户管理是对象存储的基本功能,必须通过创建用户、access_key 和 secrect_key,才能使终端用户能够与对象网关服务进行交互。本文将介绍用户的创建、修改、查看、禁用/启用、访问控制、密钥管理、设置配额、设置存储策略等操作。以及如何使用 python 的 rgwadmin 库进行操作。

有两种用户类型:

  • 用户:术语“用户”反映了 S3 接口的用户。
  • 子用户:术语“子用户”反映了 Swift 接口的用户。子用户与用户相关联。

用户管理

创建用户(S3):

radosgw-admin user create --uid={username} --display-name="{display-name}" [--email={email}]

如:

radosgw-admin user create --uid=johndoe --display-name="John Doe" --email=john@example.com
{ "user_id": "johndoe",
  "display_name": "John Doe",
  "email": "john@example.com",
  "suspended": 0,
  "max_buckets": 1000,
  "subusers": [],
  "keys": [
        { "user": "johndoe",
          "access_key": "11BS02LGFB6AL6H1ADMW",
          "secret_key": "vzCEkuryfn060dfee4fgQPqFrncKEIkh3ZcdOANY"}],
  "swift_keys": [],
  "caps": [],
  "op_mask": "read, write, delete",
  "default_placement": "",
  "placement_tags": [],
  "bucket_quota": { "enabled": false,
      "max_size_kb": -1,
      "max_objects": -1},
  "user_quota": { "enabled": false,
      "max_size_kb": -1,
      "max_objects": -1},
  "temp_url_keys": []
}

创建子用户(swift):

radosgw-admin subuser create --uid={uid} --subuser={uid} --access=[ read | write | readwrite | full ]

这里 full 不等同于 readwrite,因为它还包括访问控制策略。

如:

radosgw-admin subuser create --uid=johndoe --subuser=johndoe:swift --access=full
{ "user_id": "johndoe",
    "display_name": "John Doe",
    "email": "john@example.com",
    "suspended": 0,
    "max_buckets": 1000,
    "subusers": [
          { "id": "johndoe:swift",
            "permissions": "full-control"}],
    "keys": [
          { "user": "johndoe",
            "access_key": "11BS02LGFB6AL6H1ADMW",
            "secret_key": "vzCEkuryfn060dfee4fgQPqFrncKEIkh3ZcdOANY"}],
    "swift_keys": [],
    "caps": [],
    "op_mask": "read, write, delete",
    "default_placement": "",
    "placement_tags": [],
    "bucket_quota": { "enabled": false,
        "max_size_kb": -1,
        "max_objects": -1},
    "user_quota": { "enabled": false,
        "max_size_kb": -1,
        "max_objects": -1},
    "temp_url_keys": []}

查询用户信息

radosgw-admin user info --uid=johndoe

修改用户信息

要修改有关用户的信息,必须指定用户 ID ( --uid={username}) 和要修改的属性。典型的修改是邮箱(--email)、显示名(--display-name)、访问级别(--access)。例如:

radosgw-admin user modify --uid=johndoe --display-name="John E. Doe" --email=hello@test.com

如果修改子用户,指定 uid 和 subuser

radosgw-admin subuser modify --uid=johndoe --subuser=johndoe:swift --access=full

用户禁用:

注意禁用用户会禁用子用户。

radosgw-admin user suspend --uid=johndoe

用户启用:

radosgw-admin user enable --uid=johndoe

删除用户:

删除用户时,该用户和子用户将从系统中删除。但是,如果愿意,可以只删除子用户。要删除用户(和子用户),请指定用户 ID。

radosgw-admin user rm --uid=johndoe

要仅删除子用户,请指定子用户 ID。

radosgw-admin subuser rm --subuser=johndoe:swift

可以使用 --purge-data 选项清除与 UID 关联的所有数据,以及 --purge-keys 选项清除与 UID 关联的所有密钥。

添加/删除密钥

用户和子用户都需要密钥才能访问 S3 或 Swift 接口。要使用 S3,用户需要一个由 access-key 和 secret-key 组成的密钥对。另一方面,要使用 Swift,用户通常需要一个 secret-key(密码),并将其与关联的用户 ID 一起使用。可以创建密钥时指定或自动生成。也可以删除密钥。选项包括:

  • --key-type=<type> 指定密钥类型。选项有:s3、swift
  • --access-key=<key> 手动指定 S3 访问密钥。
  • --secret-key=<key> 手动指定 S3 密钥或 Swift 密钥。
  • --gen-access-key 自动生成随机 S3 访问密钥。
  • --gen-secret 自动生成随机 S3 密钥或随机 Swift 密钥。

如:            

radosgw-admin key create --uid=foo --key-type=s3 --access-key fooAccessKey --secret-key fooSecretKey
{ "user_id": "foo",
    "rados_uid": 0,
    "display_name": "foo",
    "email": "foo@example.com",
    "suspended": 0,
    "keys": [
      { "user": "foo",
        "access_key": "fooAccessKey",
        "secret_key": "fooSecretKey"}],
  }

可以为一个用户创建多个 S3 密钥对。

为子用户附加指定的 swift 密钥:

radosgw-admin key create --subuser=foo:bar --key-type=swift --secret-key barSecret
{ "user_id": "foo",
    "rados_uid": 0,
    "display_name": "foo",
    "email": "foo@example.com",
    "suspended": 0,
    "subusers": [
       { "id": "foo:bar",
         "permissions": "full-control"}],
    "swift_keys": [
      { "user": "foo:bar",
        "secret_key": "asfghjghghmgm"}]}

请注意,子用户只能拥有一个 swift 密钥。

配额管理

能够为用户和用户拥有的存储桶设置配额。配额包括存储桶中的最大对象数和存储桶可以容纳的最大存储大小。

  • 存储桶:该--bucket选项允许为用户拥有的存储桶指定配额。
  • 最大对象:该--max-objects设置允许指定最大对象数。负值禁用此设置。
  • 最大大小:该--max-size选项允许在 B/K/M/G/T 中指定配额大小,其中 B 是默认值。负值禁用此设置。
  • 配额范围:该--quota-scope选项设置配额的范围。选项是bucket和user。存储桶配额适用于用户拥有的存储桶。用户配额适用于用户。

设置用户配额

radosgw-admin quota set --quota-scope=user --uid=<uid> [--max-objects=<num objects>] [--max-size=<max size>]

radosgw-admin quota set --quota-scope=user --uid=johndoe --max-objects=1024 --max-size=1024B

启用/禁用用户配额

启用禁用分别为:

radosgw-admin quota enable --quota-scope=user --uid=<uid>
radosgw-admin quota disable --quota-scope=user --uid=<uid>

设置桶配额

radosgw-admin quota set --uid=<uid> --quota-scope=bucket [--max-objects=<num objects>] [--max-size=<max size]

启用/禁用存储桶配额

radosgw-admin quota enable --quota-scope=bucket --uid=<uid>
radosgw-admin quota disable --quota-scope=bucket --uid=<uid>

用户存储策略

假设当前 zone 有非默认存储策略为 placement_1。

以用户foo为例,对用户设置方法如下:

先查询用户 metadata 到文件

radosgw-admin metadata get user:foo > foo_metadata.json

然后编辑 foo_metadata.json 中 default_placement 对应的 value,保存。

...
        ],
        "swift_keys": [],
        "caps": [],
        "op_mask": "read, write, delete",
        "default_placement": "placement_1",
        "default_storage_class": "",
        "placement_tags": [],
        "bucket_quota": {
            "enabled": false,
            "check_on_raw": false,
            "max_size": -1,
            "max_size_kb": 0,
            "max_objects": -1
        },
        "user_quota": {

...

最后加载这个文件:

radosgw-admin metadata put user:foo < foo_metadata.json

rgwadmin 库(python)

rgwadmin 是一个python 库,对  Ceph Object Storage Admin API 进行了封装。

若其它语言若没有可用的库,可以参考 https://docs.ceph.com/en/latest/radosgw/adminops/直接通过 HTTP 客户端库进行调用。

这里只简单介绍代码示例,可自行安装进行了解。

from rgwadmin import RGWAdmin

rgw = RGWAdmin(access_key='XXX', secret_key='XXX', server='obj.example.com')
rgw.create_user(
    uid='liam',
    display_name='Liam Monahan',
    email='liam@umiacs.umd.edu',
    user_caps='usage=read, write; users=read',
    max_buckets=1000)
rgw.set_user_quota(
    uid='liam',
    quota_type='user',
    max_size_kb=1024*1024,
    enabled=True)
rgw.remove_user(uid='liam', purge_data=True)

from rgwadmin import RGWAdmin, RGWUser

RGWAdmin.connect(access_key='XXX', secret_key='XXX', server='obj.example.com')
u = RGWUser.create(user_id='test', display_name='Test User')
u.user_quota.size = 1024 * 1024  # in bytes
u.user_quota.enabled = True
u.save()
u.delete()

总结

以上是对象存储用户管理的介绍,以及如何使用 python 的 rgwadmin 进行操作。

在实际环境中,可与对象桶的使用(桶权限,桶配额等)密切配合,灵活使用。

文章来自个人专栏
对象用户
1 文章 | 1 订阅
0条评论
0 / 1000
请输入你的评论
0
0