searchusermenu
  • 发布文章
  • 消息中心
点赞
收藏
评论
分享
原创

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

2023-05-18 11:06:21
820
0

说明

本文档介绍怎样使用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

 

 

至此,我们就完成了用户的创建及访问授权,我们可以使用testuser1和pwd1访问策略里配置的资源了。

 

参考链接:

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 / 1000
梁****健
11文章数
0粉丝数
梁****健
11 文章 | 0 粉丝
原创

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

2023-05-18 11:06:21
820
0

说明

本文档介绍怎样使用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

 

 

至此,我们就完成了用户的创建及访问授权,我们可以使用testuser1和pwd1访问策略里配置的资源了。

 

参考链接:

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

文章来自个人专栏
微服务相关
9 文章 | 1 订阅
0条评论
0 / 1000
请输入你的评论
0
0