相关文章推荐
飘逸的花卷  ·  python ...·  4 月前    · 
近视的香菜  ·  go - Golang json ...·  1 年前    · 
霸气的单车  ·  android - Increasing ...·  1 年前    · 
  • private :所有人都无法直接访问该桶的资源,如果外部需要访问,只能通过外链(最长有效期7天)
  • 而我们的业务需求是要把用户头像放入 MinIO 的桶中,如果设置桶为 public ,那么所有人都可以遍历平台上注册用户的头像信息,这会造成隐私泄露;如果桶设置为 private ,那么只能以外链的形式给到给到前端,7天后,该外链i失效,导致前端页面无法展示用户头像。

    那么,是否可以 既不暴露桶中所有的用户头像信息,又能永久访问(不通过外链形式)指定的用户头像文件 呢?

    通过 mc 工具,对指定桶的 policy 进行定制化配置

    1. 创建一个名为 test 的桶

    默认 policy private ,演示起见,可以先设为 public

    2. 上传一个文件到test桶中

    在浏览器中访问该桶的目录,可以发现列出了该桶下的文件目录:

    3. 设置该桶具有下载权限:

    mc policy download minio/test
    

    4. 查看当前桶策略json文件:

    mc get-json minio/test
    

    Policy文件 (test_policy.json) 如下:

    "Statement": [{ "Action": [ "s3:GetBucketLocation", "s3:ListBucket" "Effect": "Allow", "Principal": { "AWS": [ "Resource": [ "arn:aws:s3:::test" "Action": [ "s3:GetObject" "Effect": "Allow", "Principal": { "AWS": [ "Resource": [ "arn:aws:s3:::test/*" "Version": "2012-10-17"

    可以看到,在action中有s3:ListBucket这一项是allow的,所以我们可以在浏览器中遍历目录,删除即可

    5. 修改test_policy.json如下:

    "Statement": [{ "Action": [ "s3:GetBucketLocation" "Effect": "Allow", "Principal": { "AWS": [ "Resource": [ "arn:aws:s3:::test" "Action": [ "s3:GetObject" "Effect": "Allow", "Principal": { "AWS": [ "Resource": [ "arn:aws:s3:::test/*" "Version": "2012-10-17"

    6. 重新应用该policy

    mc policy set-json test_policy.json minio/test
    

    7. 验证:

    可以看到,无法再遍历桶目录了。

  • 私信