注意

本文档适用于 Ceph 开发版本。

用户账户

Squid 版本中的新增内容。

Ceph对象网关支持用户账户作为可选功能来用户,组和角色类似于AWS身份和访问管理(IAM)中的那些。

账户根用户

每个账户都由一个账户根用户管理 。像普通用户和角色一样,radosgw-admin管理操作 API.

创建 。账户根用户对所有资源拥有默认权限,这些资源属于账户。根用户的凭证(访问和密钥)可用于Ceph 对象网关 IAM API创建额外的IAM用户和角色,用于与Ceph 对象网关 S3 API一起使用,以及管理其关联的访问密钥和策略。

鼓励账户所有者仅使用此账户根用户进行管理,并为特定应用程序创建具有细粒度权限的用户和角色。

警告

虽然账户根用户不需要IAM策略来访问账户内的资源,但可以添加策略明确拒绝其访问。谨慎使用拒绝语句。

资源所有权

当普通(非账户)用户创建存储桶并上传对象时,这些资源属于用户。相关的S3 ACLs将用户命名为所有者和授予权利人,这些存储桶仅对拥有用户可见s3:ListBuckets请求中使用的密钥 ID。

。相反,当用户或角色属于账户时,他们创建的资源归账户本身所有。相关的S3 ACLs将账户ID命名为所有者和授予权利人,这些存储桶对所有账户中的用户或角色可见s3:ListBuckets

由于资源归账户所有而不是其用户,因此所有使用统计和配额强制适用于整个账户而不是其单个用户。

账户ID

账户标识符可以用在多个地方,这些地方原本接受用户ID或租户名称,因此账户ID使用特殊格式以避免歧义:字符串RGW后跟17位数字,如RGW33567154695143645。如果未指定,则在该格式下创建账户时将随机生成账户ID。

账户ID通常出现在亚马逊资源名称(ARNs) 的IAM策略文档中。例如,arn:aws:iam::RGW33567154695143645:user/A引用该账户中的名为A的IAM用户。Ceph对象网关也支持该位置的租户名称。

账户ID还可以用于类型为Grantee用户ID也在此处支持。CanonicalUser的ACLs的

IAM策略

虽然非账户用户默认允许创建存储桶和上传对象,但账户用户从一开始就没有任何权限。

在IAM用户执行API操作之前,必须添加一些策略来允许它。账户根用户可以通过多种方式为其用户添加身份策略。

  • 使用iam:PutUserPolicyiam:AttachUserPolicy操作设置。

  • 直接将策略添加到用户iam:PutGroupPolicyiam:AttachGroupPolicy创建IAM组并使用iam:AddUserToGroup动作添加到该组的用户将继承该组的所有策略。

  • 创建IAM角色并使用iam:PutRolePolicyiam:AttachRolePolicy添加角色策略。使用sts:AssumeRolests:AssumeRoleWithWebIdentity动作假设此角色的用户将继承该角色的所有策略。

这些身份策略根据中的规则进行评估单个账户内策略评估逻辑.

主体

策略文档中的“主体”ARN在它们属于账户时对用户有所不同。

账户外部,用户主体由用户ID命名,例如arn:aws:iam:::user/uidarn:aws:iam::tenantname:user/uid,其中uid对应于--uidradosgw-admin.

账户内部,用户主体使用用户名,例如arn:aws:iam::RGW33567154695143645:user/name其中name对应于--display-nameradosgw-admin。账户用户继续匹配租户形式,以便在用户迁移到账户时,现有策略继续有效。

租户隔离

像用户一样,账户可以选择属于租户以实现存储桶的命名空间隔离。例如,一个名为“acct”的账户可以存在于租户“a”下,而另一个名为“acct”的账户可以存在于租户“b”下。参考多租户 for details.

一个租户账户只能包含具有相同租户名称的用户。

无论租户如何,账户ID和电子邮件地址必须全局唯一。

账户管理

创建账户

要创建账户:

radosgw-admin account create [--account-name={name}] [--account-id={id}] [--email={email}]

创建账户根用户

要创建账户根用户:

radosgw-admin user create --uid={userid} --display-name={name} --account-id={accountid} --account-root --gen-secret --gen-access-key

删除账户

要删除账户:

radosgw-admin account rm --account-id={accountid}

账户统计/配额

要查看账户统计:

radosgw-admin account stats --account-id={accountid} --sync-stats

要启用账户配额:

radosgw-admin quota set --quota-scope=account --account-id={accountid} --max-size=10G
radosgw-admin quota enable --quota-scope=account --account-id={accountid}

要为账户启用存储桶配额:

radosgw-admin quota set --quota-scope=bucket --account-id={accountid} --max-objects=1000000
radosgw-admin quota enable --quota-scope=bucket --account-id={accountid}

将现有用户迁移到账户

现有用户可以被user modify:

radosgw-admin user modify --uid={userid} --account-id={accountid}

Note

收入到账户中

Note

账户成员资格是永久的。一旦添加,用户不能从其账户中删除。

Note

IAM用户API对UserName的格式提出额外要求,这在将用户迁移到账户时强制执行。如果迁移失败并显示“UserName contains invalid characters”,则应修改--display-name以匹配[\w+=,.@-]+.

警告

用户的通知主题的所有权不会转移到账户。通知将继续工作,但主题将不再对SNS主题API可见。主题及其关联的存储桶通知可以按照迁移通知主题.

由于账户用户默认没有任何权限,必须添加一些身份策略来恢复用户的原始权限。

或者,您可能希望为每个现有用户创建一个新账户。在这种情况下,您可能希望添加--account-root选项,使每个用户成为其账户的根用户。

迁移通知主题

仅当notification_v2功能启用时才支持账户主题,如Bucket Notifications中所述.

1.Migration Impact: 当非账户用户迁移到账户时,现有的通知主题可以通过RadosGW管理员API访问,但用户会失去通过SNS主题API访问它们的能力。尽管如此,主题仍然有效,并且存储桶通知将继续按预期发送。

2.Re-creation of Topics: 账户用户应使用相同的名称重新创建主题。旧主题(现在无法访问)和新账户拥有的主题将共存而不会相互干扰。

3.Updating Bucket Notification Configurations: 订阅旧用户拥有的主题的存储桶应更新为使用新账户拥有的主题。为防止重复通知,保持相同的通知ID。例如,如果存储桶的现有通知配置是:

{"TopicConfigurations": [{ "Id": "ID1", "TopicArn": "arn:aws:sns:default::topic1", "Events": ["s3:ObjectCreated:*"]}]}

更新后的配置将是:

{"TopicConfigurations": [{ "Id": "ID1", "TopicArn": "arn:aws:sns:default:RGW00000000000000001:topic1", "Events": ["s3:ObjectCreated:*"]}]}

在此示例中,RGW00000000000000001是账户ID,topic1ID1是通知ID。

4.Removing Old Topics: 一旦没有存储桶订阅旧用户拥有的主题,管理员可以通过以下方式删除它们:

$ radosgw-admin topic rm --topic topic1

账户根示例

账户根用户的凭证解锁了Ceph 对象网关 IAM API.

此示例使用awscli为S3操作创建IAM用户。

  1. 为账户根用户创建配置文件:

    $ aws --profile rgwroot configure set endpoint_url http://localhost:8000
    $ aws --profile rgwroot configure
    AWS Access Key ID [None]: {root access key}
    AWS Secret Access Key [None]: {root secret key}
    Default region name [None]: default
    Default output format [None]:
    
  2. 创建IAM用户,添加凭证,并附加S3访问策略:

    $ aws --profile rgwroot iam create-user --user-name Alice
    {
        "User": {
            "Path": "/",
            "UserName": "Alice",
            "UserId": "b580aa8e-14c7-4b6a-9dac-a30c640244b6",
            "Arn": "arn:aws:iam::RGW63136524507535818:user/Alice",
            "CreateDate": "2024-02-07T00:15:45.162786+00:00"
        }
    }
    $ aws --profile rgwroot iam create-access-key --user-name Alice
    {
        "AccessKey": {
            "UserName": "Alice",
            "AccessKeyId": "JBNLYD5BDNRVV64J02E8",
            "Status": "Active",
            "SecretAccessKey": "SnHoE700kdNuT22K8Bhy2iL3DwZU0sUSDI1gUXHr",
            "CreateDate": "2024-02-07T00:16:34.679316+00:00"
        }
    }
    $ aws --profile rgwroot iam attach-user-policy --user-name Alice \
          --policy-arn arn:aws:iam::aws:policy/AmazonS3FullAccess
    
  3. 为S3用户创建配置文件:

    $ aws --profile rgws3 configure set endpoint_url http://localhost:8000
    $ aws --profile rgws3 configure
    AWS Access Key ID [None]: JBNLYD5BDNRVV64J02E8
    AWS Secret Access Key [None]: SnHoE700kdNuT22K8Bhy2iL3DwZU0sUSDI1gUXHr
    Default region name [None]: default
    Default output format [None]:
    
  4. 使用S3用户配置文件创建存储桶:

    $ aws --profile rgws3 s3 mb s3://testbucket
    make_bucket: testbucket
    

由 Ceph 基金会带给您

Ceph 文档是一个社区资源,由非盈利的 Ceph 基金会资助和托管Ceph Foundation. 如果您想支持这一点和我们的其他工作,请考虑加入现在加入.