2.0 版本的 minio 默认开启了 Bucket Policy,可以(相对)灵活地控制子账号对访问各子桶的权限。下面是一个示例:
{
"Version": "2012-10-17",
"Statement": [
{
"Effect": "Allow",
"Principal": {"AWS": ["arn:aws:iam::<账号ID>:user/<子账号1>", "arn:aws:iam::<账号ID>:user/<子账号2>"]},
"Action": [
"s3:GetBucketLocation",
"s3:ListBucket",
"s3:ListBucketMultipartUploads",
"s3:ListBucketVersions",
"s3:ListMultipartUploadParts"
],
"Resource": ["arn:aws:s3:::<主桶名>"]
},
{
"Effect": "Allow",
"Principal": {"AWS": ["arn:aws:iam::<账号ID>:user/<子账号1>"]},
"Action": "s3:*",
"Resource": ["arn:aws:s3:::<主桶名>/<子桶1>/*"]
},
{
"Effect": "Deny",
"Principal": {"AWS": ["arn:aws:iam::<账号ID>:user/<子账号1>"]},
"Action": "s3:*",
"Resource": [
"arn:aws:s3:::<主桶名>",
"arn:aws:s3:::<主桶名>/<子桶2>/*"
]
},
{
"Effect": "Allow",
"Principal": {"AWS": ["arn:aws:iam::<账号ID>:user/<子账号2>"]},
"Action": "s3:*",
"Resource": [
"arn:aws:s3:::<主桶名>/<子桶2>/*"
]
}
]
}
上面的示例将主桶下的两个子桶分别赋予两个子账号访问权限,并定义了如下的策略:
- 所有子账号均可以获取主桶的部分元信息。
- 子账号 1 可以访问子桶 1 的所有操作,但不能访问子桶 2 及主桶。
- 子账号 1 无法访问子桶 2 及主桶。
- 子账号 2 可以访问子桶 2 的所有操作,但不能访问子桶 1 及主桶。
在实际应用中,我们需要根据具体的业务场景和安全需求合理配置子账号权限,上面示例中的配置仅供参考。