minio 开放子桶的所有权限配置

29 min read

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. 所有子账号均可以获取主桶的部分元信息。
  2. 子账号 1 可以访问子桶 1 的所有操作,但不能访问子桶 2 及主桶。
  3. 子账号 1 无法访问子桶 2 及主桶。
  4. 子账号 2 可以访问子桶 2 的所有操作,但不能访问子桶 1 及主桶。

在实际应用中,我们需要根据具体的业务场景和安全需求合理配置子账号权限,上面示例中的配置仅供参考。