注意
本文档适用于 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:PutUserPolicy
和iam:AttachUserPolicy
操作设置。直接将策略添加到用户
iam:PutGroupPolicy
和iam:AttachGroupPolicy
创建IAM组并使用iam:AddUserToGroup
动作添加到该组的用户将继承该组的所有策略。创建IAM角色并使用
iam:PutRolePolicy
和iam:AttachRolePolicy
添加角色策略。使用sts:AssumeRole
和sts:AssumeRoleWithWebIdentity
动作假设此角色的用户将继承该角色的所有策略。
这些身份策略根据中的规则进行评估和单个账户内策略评估逻辑.
主体
策略文档中的“主体”ARN在它们属于账户时对用户有所不同。
账户外部,用户主体由用户ID命名,例如arn:aws:iam:::user/uid
或arn:aws:iam::tenantname:user/uid
,其中uid
对应于--uid
从radosgw-admin
.
账户内部,用户主体使用用户名,例如arn:aws:iam::RGW33567154695143645:user/name
其中name
对应于--display-name
从radosgw-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,topic1是ID1是通知ID。
4.Removing Old Topics
: 一旦没有存储桶订阅旧用户拥有的主题,管理员可以通过以下方式删除它们:
$ radosgw-admin topic rm --topic topic1
账户根示例
账户根用户的凭证解锁了Ceph 对象网关 IAM API.
此示例使用awscli为S3操作创建IAM用户。
为账户根用户创建配置文件:
$ 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]:
创建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
为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]:
使用S3用户配置文件创建存储桶:
$ aws --profile rgws3 s3 mb s3://testbucket make_bucket: testbucket
由 Ceph 基金会带给您
Ceph 文档是一个社区资源,由非盈利的 Ceph 基金会资助和托管Ceph Foundation. 如果您想支持这一点和我们的其他工作,请考虑加入现在加入.