许吉友 - 运维

用户管理

参考:https://docs.ceph.com/docs/master/radosgw/admin/

Ceph 中,有两种用户类型:UserSubuser。可以对 这两种类型进行增删改查,除了用户 ID,可以指定 key 和 secret,也可以自动生成。

创建一个 User

创建一个用户(S3 interface)

$ radosgw-admin user create --uid=xujiyou_id --display-name="xujiyou" --email=xujiyou@bbdservice.com

响应如下:

{
    "user_id": "xujiyou_id",
    "display_name": "xujiyou",
    "email": "xujiyou@bbdservice.com",
    "suspended": 0,
    "max_buckets": 1000,
    "subusers": [],
    "keys": [
        {
            "user": "xujiyou_id",
            "access_key": "9DDR7X24VCNXNPVSOYZ2",
            "secret_key": "KguITqKdPxVNsx7GpWwpgbgxfVm6OwBV0zlmr88e"
        }
    ],
    "swift_keys": [],
    "caps": [],
    "op_mask": "read, write, delete",
    "default_placement": "",
    "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": {
        "enabled": false,
        "check_on_raw": false,
        "max_size": -1,
        "max_size_kb": 0,
        "max_objects": -1
    },
    "temp_url_keys": [],
    "type": "rgw",
    "mfa_ids": []
}

创建一个 SUBUSER

创建一个 subuser(Swift interface) 为一个 user。

格式:

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

例子:

$ radosgw-admin subuser create --uid=xujiyou_id --subuser=xujiyou_id:swift --access=full

响应如下:

{
    "user_id": "xujiyou_id",
    "display_name": "xujiyou",
    "email": "xujiyou@bbdservice.com",
    "suspended": 0,
    "max_buckets": 1000,
    "subusers": [
        {
            "id": "xujiyou_id:swift",
            "permissions": "full-control"
        }
    ],
    "keys": [
        {
            "user": "xujiyou_id",
            "access_key": "9DDR7X24VCNXNPVSOYZ2",
            "secret_key": "KguITqKdPxVNsx7GpWwpgbgxfVm6OwBV0zlmr88e"
        }
    ],
    "swift_keys": [
        {
            "user": "xujiyou_id:swift",
            "secret_key": "4KzvCN0lqf4ByydZhhuYrAMFmBksRz9xS4LLZI6f"
        }
    ],
    "caps": [],
    "op_mask": "read, write, delete",
    "default_placement": "",
    "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": {
        "enabled": false,
        "check_on_raw": false,
        "max_size": -1,
        "max_size_kb": 0,
        "max_objects": -1
    },
    "temp_url_keys": [],
    "type": "rgw",
    "mfa_ids": []
}

查看用户信息

$ radosgw-admin user info --uid=johndoe

修改用户信息

$ radosgw-admin user modify --uid=xujiyou_id --display-name="Xu ji you"

这样会修改用户的显示名称,uid 是不能修改的。

修改 subuser:

$ radosgw-admin subuser modify --uid=xujiyou_id --subuser=xujiyou_id:swift --access=full

这句话什么都没改。

用户 暂停 & 启用

暂停用户:

$ radosgw-admin user suspend --uid=xujiyou_id

这会将用户的 suspended 字段设置为 1。

启用用户:

$ radosgw-admin user enable --uid=xujiyou_id

删除用户

删除一个用户时,会连带将其子用户也一并删除掉。

这里先删除子用户:

$ radosgw-admin subuser rm --subuser=xujiyou_id:swift --purge-data --purge-keys

--purge-data 表示清除用户的数据,--purge-keys 表示清除用户的key,慎用!!!

删除用户:

$ radosgw-admin user rm --uid=xujiyou_id

添加 & 删除 key

为用户创建 key,需指定 uid:

$ radosgw-admin key create --uid=xujiyou_id --key-type=s3 --access-key fooAccessKey --secret-key fooSecretKey

为 subuser 创建一个 key:

$ radosgw-admin key create --subuser=xujiyou_id:swift --key-type=swift --secret-key barSecret

subuser 也可以使用 S3 的 API:

$ radosgw-admin key create --subuser=xujiyou_id:swift --key-type=s3 --access-key barAccessKey --secret-key barSecretKey

删除 s3 的密钥对:

$ radosgw-admin key rm --uid=xujiyou_id --key-type=s3 --access-key=fooAccessKey

删除后,会自动生成一个密钥对。

删除 swift 的密钥对:

$ radosgw-admin key rm --subuser=xujiyou_id:swift --key-type=swift

用户管理权限

上边有个权限,是对数据的操作权限,这里要学的权限是管理权限。

要向用户添加管理功能,请执行以下命令:

radosgw-admin caps add --uid={uid} --caps={caps}

其中,caps 为:

--caps="[users|buckets|metadata|usage|zone]=[*|read|write|read, write]"

举例:

$ radosgw-admin caps add --uid=xujiyou_id --caps="users=*;buckets=*"

部分响应如下:

  "caps": [
        {
            "type": "buckets",
            "perm": "*"
        },
        {
            "type": "users",
            "perm": "*"
        }
    ],

删除管理权限:

$ radosgw-admin caps rm --uid=xujiyou_id --caps="users=*;buckets=*"

用户配额管理

先来说明下几个选项:

设置用户配额,例子:

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

启用用户配额:

$ radosgw-admin quota enable --quota-scope=user --uid=xujiyou_id

禁用用户配额:

$ radosgw-admin quota disable --quota-scope=user --uid=xujiyou_id

设置桶配额:

$ radosgw-admin quota set --quota-scope=bucket --uid=xujiyou_id --max-objects=1024 --max-size=1024B

开启桶配额:

$ radosgw-admin quota enable --quota-scope=bucket --uid=xujiyou_id

禁用桶配额:

$ radosgw-admin quota disable --quota-scope=bucket --uid=xujiyou_id

查看配额信息:

$ radosgw-admin user info --uid=xujiyou_id

部分响应如下:

   "bucket_quota": {
        "enabled": true,
        "check_on_raw": false,
        "max_size": 1024,
        "max_size_kb": 1,
        "max_objects": 1024
    },
    "user_quota": {
        "enabled": false,
        "check_on_raw": false,
        "max_size": 1024,
        "max_size_kb": 1,
        "max_objects": 1024
    },

配额统计信息会异步更新。您可以手动更新所有用户和所有存储桶的配额统计信息,以获取最新的配额统计信息:

$ radosgw-admin user stats --uid=xujiyou_id --sync-stats

要查看用户已消耗了多少配额,请执行以下操作:

$ radosgw-admin user stats --uid=xujiyou_id

响应如下 :

{
    "stats": {
        "size": 0,
        "size_actual": 0,
        "size_utilized": 0,
        "size_kb": 0,
        "size_kb_actual": 0,
        "size_kb_utilized": 0,
        "num_objects": 0
    },
    "last_stats_sync": "2020-04-16T02:36:04.336345Z",
    "last_stats_update": "0.000000"
}

默认配额和配额缓存略过。

读取全局配额:

$ radosgw-admin global quota get

响应如下:

{
    "bucket quota": {
        "enabled": false,
        "check_on_raw": false,
        "max_size": -1,
        "max_size_kb": 0,
        "max_objects": -1
    },
    "user quota": {
        "enabled": false,
        "check_on_raw": false,
        "max_size": -1,
        "max_size_kb": 0,
        "max_objects": -1
    }
}

设置全局配额:

$ radosgw-admin global quota set --quota-scope bucket --max-objects 1024
$ radosgw-admin global quota enable --quota-scope bucket

网关重启后生效。

使用记录

查看使用记录:

$ radosgw-admin usage show --show-log-entries=false

查看某用户某个时间段的使用记录:

$ radosgw-admin usage show --uid=johndoe --start-date=2012-03-01 --end-date=2012-04-01

缩减使用日志

在大量使用的情况下,使用日志可能会开始占用存储空间。您可以为所有用户和特定用户修剪使用日志。您也可以指定修剪操作的日期范围。

radosgw-admin usage trim --start-date=2010-01-01 --end-date=2010-12-31
radosgw-admin usage trim --uid=johndoe
radosgw-admin usage trim --uid=johndoe --end-date=2013-12-31