专栏
天翼云开发者社区

使用mc client对minio进行多用户设置及访问权限控制

2023-05-18 19:06:21 457阅读

本文档介绍怎样使用mc client客户端,通过命令在minio中创建多个用户,且为不同的用户分配不同的访问策略的步骤及每个步骤的相关说明

minio的访问策略描述

minio的访问策略由policy文件进行描述,一个新的policy文件的模板如下:

"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" : { ... }

以下是对上述每个字段的描述

Version字段

Version字段代表的是policy描述文件遵守的版本,有2008-10-17和2012-10-17两个可选值,我们用2012-10-17即可。

Statement字段

描述该policy的详细规则,他是一个数组的形式,支持多种规则的灵活组合

Effect字段

描述该规则的类型,有两个可选项:Allow 和 Deny,Allow代表该规则是放行规则,Deny代表该规则是拦截规则

Action字段

数组类型,描述操作,其中,可以使用s3:* 通配所有权限。

目前常用的操作摘录如下:

  • s3:CreateBucket
    ------- 创建bucket
  • s3:DeleteBucket
    -------删除bucket
  • s3:ForceDeleteBucket
    -------强制删除非空bucket
  • s3:GetBucketLocation
    -------获取bucket Location
  • s3:ListBucket
    -------获取所有bucket
  • s3:ListAllMyBuckets
    -------获取所有有权限的bucket
  • s3:DeleteObject
    -------删除对象
  • s3:GetObject
    ------- 获取/下载文件
  • s3:PutObject
    ------- 上传文件/生成文件上传链接
  • 其他更详细的操作类型,可以见文章最后的参考链接

    Resource字段

    resource用于描述这个策略控制的资源,均以arn:aws:s3:::开头,以下是几个例子:

  • arn:aws:s3:::*
    -------所有资源池
  • arn:aws:s3:::testbucket/*
    -------testbucket这个bucket下的资源
  • arn:aws:s3:::testbucket/abc*
    -------testbucket这个bucket下所有abc前缀的资源
  • arn:aws:s3:::testbucket/abcd/abc.txt
    -------testbucket这个bucket下的/abcd/abc.txt这个资源
  • Condition字段

    condation字段用于描述该策略的生效条件,一般不作配置,具体可设置的生效条件,可参见以下链接:

    https://docs.aws.amazon.com/zh_cn/IAM/latest/UserGuide/reference_policies_elements_condition.html

    policy 文件示例

    以下是一个policy文件的实例

    "Version" : "2012-10-17", "Statement" : [ "Effect" : "Allow", "Action" : [ "s3:ListBucket","s3:ListAllMyBuckets"], "Resource" : "arn:aws:s3:::*" "Effect" : "Allow", "Action" : [ "s3:GetObject","s3:GetBucketLocation"], "Resource" : "arn:aws:s3:::testbucket/*" "Effect" : "Deny", "Action" : [ "s3:GetObject","s3:GetBucketLocation"], "Resource" : "arn:aws:s3:::testbucket/20230504*"

    上述的policy文件依次表示:

  • 能够(或在程序里使用minioClient.listBuckets)查看所有bucket的名称及基础属性(不包括对应bucket的文件访问权限)
  • 能够获取及下载testbucket这个bucket下的文件
  • 拒绝获取或下载testbucket这个bucket下的以20230504开头的所有文件
  • 创建全新的minio用户

    接下来,我们需要创建一个用户,并给这个用户授权,以让这个用户能访问特定的资源,以下操作我们使用minio的官方客户端mc

    需要说明的是: 由于minio的admin接口分为/v1,/v2,/v3等多个版本,所以必须使用和服务端配套的mc客户端使用,不能用高版本的mc客户端访问低版本的minioserver,否则可能无法正确处理admin指令,下文的演示以使用admin v1接口的版本举例,其他版本的使用命令也是类似的,只是内部真正发起的请求地址不一样:

    最新版本的minioserver使用的是/v3的admin接口,最新版本的操作可参考官方文档,具体可见文章最后的参考链接

    新建访问策略

    参照上文的说明,配置好访问策略后,我们需要新建访问策略:

    [root@local /]# mc admin policy add minio_alias testpolicy "/tmp/policy.json"
    Added policy `testpolicy` successfully.

    上述命令的minio_alias是mc客户端里设置的minio别名,testpolicy是新建的访问策略名称,最后的路径是配置好的策略规则所在的文件全路径

    上述命令实际上是往minio服务端发起请求:PUT /minio/admin/v1/add-canned-policy?name=testpolicy

    [root@local /]# mc admin user add minio_alias testuser1 pwd1 testpolicy
    Added user `testuser1` successfully.

    上述命令的minio_alias是mc客户端里设置的minio别名,testuser1是用户名,pwd1是密码,testpolicy是授予给这个用户的访问策略

    上述命令实际上是往minio服务端发起请求:PUT /minio/admin/v1/add-user?accessKey=testuser1

    修改用户的访问策略

    当我们需要修改用户的初始策略时,可以通过这个命令修改:

    [root@local /]# mc admin user policy minio_alias testuser1 testpolicy
    Set a policy `testpolicy` for user `testuser1` successfully.

    上述命令实际是是往minio服务端发起请求:PUT /minio/admin/v1/set-user-policy?accessKey=testuser1&name=testpolicy

    需要注意的是,在最新版本的minio server及mc客户端里,修改用户策略的是:

    [root@local /]# mc admin policy detach minio_alias oldpolicy --user testuser1
    [root@local /]# mc admin policy attach minio_alias testpolicy --user testuser1

    删除旧的访问策略

    当我们需要删除原来的访问策略时,可以执行以下命令进行修改:

    如果是修改访问策略的话,我们可以直接新建同名的访问策略即可,minio会进行覆盖。

    [root@local /]#  mc admin policy remove minio_alias testpolicy
    Removed policy `testpolicy` successfully.

    上述命令实际上是往minio服务端发起请求:DELETE /minio/admin/v1/remove-canned-policy?name=testpolicy

    参考链接:

    https://min.io/docs/minio/linux/reference/minio-mc-admin.html

    https://docs.aws.amazon.com/zh_cn/IAM/latest/UserGuide/reference_policies_elements_condition.html

    https://min.io/docs/minio/linux/administration/identity-access-management/policy-based-access-control.html

    • 0
    • 0
    • 0
    0 评论