minio 客户端修改访问策略

2024-01-05/2024-01-05

背景

前端时间听前辈谗言,搭了个Minio服务用来存储文件,在设置存储桶权限时为了图方便直接写上了PUBLIC其实是没有好好研究权限这一块。
前两天省公司检测出服务器漏洞,访问存储桶的根路径会展示出文档树,把文件资源全暴露了。因为机器只开了一个端口,所以只能在客户端修改了。

访问策略描述

以下是官网的一份策略文件描述

{
   "Version" : "2012-10-17",
   "Statement" : [
      {
         "Effect" : "Allow",
         "Action" : [ "s3:<ActionName>", ... ],
         "Resource" : "arn:aws:s3:::*",
         "Condition" : { ... }
      },
      {
         "Effect" : "Deny",
         "Action" : [ "s3:<ActionName>", ... ],
         "Resource" : "arn:aws:s3:::*",
         "Condition" : { ... }
      }
   ]
}
  • 对于Statement.Action数组,指定一项或多项的API操作,官网有详细描述。S3 API操作,这也是我们主要关注的点。
  • 对于Statement.Resource键,指定要限制策略的存储桶或存储桶前缀。
  • 对于Statement.Condition键,您可以指定一个或多个支持的 Conditions

因为服务器只有一个用户,且需要查看文件为根路径以下,所以本文只针对第一点API做处理,这边简单介绍几个API

  • s3:*
    简单,所有权限
  • s3:CreateBucket
    创建桶的权限
  • s3:DeleteBucket
    删除桶的权限
  • s3:ForceDeleteBucket
    强制删除非空的桶
  • s3:GetBucketLocation
    对桶拥有读权限的用户可以执行获取桶区域位置信息的操作。
  • s3:ListAllMyBuckets
    获取指定账号下所有的存储桶列表
  • s3:DeleteObject
    删除对象
  • s3:GetObject
    获取、下载对象
  • s3:PutObject
    上传文件/生成文件上传链接
  • s3:ListBucket
    获取桶下所有文件

更多请参考S3 API操作
那么,不难发现,出现这一问题就是因为当权限设置为PUBLIC时,存在ListBucket权限,导致这一情况。

修改访问策略

去掉 ListBucket权限

{
    "Version": "2012-10-17",
    "Statement": [
        {
            "Effect": "Allow",
            "Principal": {
                "AWS": [
                    "*"
                ]
            },
            "Action": [
                "s3:GetBucketLocation",
                "s3:ListBucketMultipartUploads"
            ],
            "Resource": [
                "arn:aws:s3:::ifamily"
            ]
        },
        {
            "Effect": "Allow",
            "Principal": {
                "AWS": [
                    "*"
                ]
            },
            "Action": [
                "s3:AbortMultipartUpload",
                "s3:DeleteObject",
                "s3:GetObject",
                "s3:ListMultipartUploadParts",
                "s3:PutObject"
            ],
            "Resource": [
                "arn:aws:s3:::test/*"
            ]
        }
    ]
}
  1. 将文件上传服务器并命名为 testPolicy.json ,注意必须为 JSON 格式文件。
  2. 更新桶策略,这里采用 mc 命令,参考官网
mc anonymous set-json ~/testPolicy.json myminio/mydata

成功

image.png

访问存储桶的根路径

image.png

访问单张文件路径

image.png

完美解决了

后记

感觉对于客户端修改权限网上的资料有点老旧,也不完全,写下来对以后的小伙伴也有个参考

       
       
取消