我正在尝试为 Ceph S3 存储桶设置存储桶策略。
该政策有效,但允许公众访问
{
"Version": "2012-10-17",
"Statement": [
{
"Sid": "AllowAllForAuthenticatedUsers",
"Effect": "Allow",
"Principal": {
"AWS": [
"*"
]
},
"Action": "s3:*",
"Resource": [
"arn:aws:s3:::mybucket",
"arn:aws:s3:::mybucket/*"
]
}
]
}
我相信我需要指定有权访问
Principal
中的存储桶的每个用户。 Ceph 文档在这里展示了这个例子:
{
"Version": "2012-10-17",
"Statement": [{
"Effect": "Allow",
"Principal": {"AWS": ["arn:aws:iam::usfolks:user/fred:subuser"]},
"Action": "s3:PutObjectAcl",
"Resource": [
"arn:aws:s3:::happybucket/*"
]
}]
}
我相信示例中的
usfolks
是租户,文档提到了这一点:
我们使用 RGW“租户”标识符代替 Amazon 12 位帐户 ID。将来,我们可能允许您为租户分配账户 ID,但目前,如果您想在 AWS S3 和 RGW S3 之间使用策略,则在创建用户时必须使用 Amazon 账户 ID 作为租户 ID。
我检查了我的存储桶上的
tenant
是一个空字符串,并使用 radosgw-admin bucket stats
进行了验证。另外,查看 subsers
时,radosgw-admin user info
未设置:"subusers": [],
。
以下是我尝试过的多种格式中的一些
Principal
,在每种情况下我都通过尝试下载文件进行测试,但都收到错误403 HeadObject operation Forbidden
:
"AWS": ["myuser-000"]
"AWS": ["arn:aws:iam:::user/myuser-000:"]
"AWS": ["arn:aws:iam:::user/*"]
"AWS": ["arn:aws:iam::usfolks:user/myuser-000:"]
"AWS": ["arn:aws:iam:::myuser-000:"]
在这些情况下,
myuser-000
也是存储桶所有者,我正在使用该用户的凭据进行身份验证。
这是最终起作用的存储桶策略:
{
"Version": "2012-10-17",
"Statement": [
{
"Effect": "Allow",
"Principal": {
"AWS": [
"arn:aws:iam:::user/USERNAMEA",
"arn:aws:iam:::user/USERNAMEB",
"arn:aws:iam:::user/USERNAMEC"
]
},
"Action": "s3:*",
"Resource": [
"arn:aws:s3:::BUCKETNAME",
"arn:aws:s3:::BUCKETNAME/*"
]
}
]
}
这假设默认 Ceph 环境不使用租户。替换
BUCKETNAME
和 USERNAME#
对于主体与本策略文档中的用户列表不匹配的情况,存在默认拒绝。
值得注意的是,主体中的通配符
*
在 Ceph 中不起作用。