Minio入门系列【10】Minio之权限控制策略 | 您所在的位置:网站首页 › boss怎么设置pc端权限 › Minio入门系列【10】Minio之权限控制策略 |
前言
本段文章来源于华为云OBS,因为都是S3标准的对象存储,所以很多概念和Minio是相通的。 为什么要进行访问权限控制(华为OBS)为保证存储在SSO中数据的安全性,SSO资源(桶和对象)默认为私有,只有资源拥有者可以访问。
OBS提供丰富灵活的访问权限控制手段,满足不同场景下的授权需求。 相对比阿里云SSO、华为云OBS,Minio权限及安全管理,没有提供特别多的功能,毕竟是开源的,但是对于一般应用程序,也够用了。 用户管理 添加用户及权限用户是权限最直接的体现,Minio提供了用户管理功能,可以在控制台直接添加用户密码(密码最少八位),及相关权限。 如果每个用户都去绑定一个权限比较麻烦,minio提供了分组管理,也可以理解为角色,分组添加多个权限,然后用户添加到分组中,都可以具有多个权限了。 直接在下面菜单创建分组: 默认情况下,管理员创建的IAM用户没有任何权限,需要将其加入用户组,并给用户组授予策略和角色,才能使得用户组中的用户获得策略定义的权限,这一过程称为授权。授权后,用户就可以基于被授予的权限对服务进行操作。 IAM权限作用于SSO所有的桶和对象。如果要授予IAM用户操作SSO资源的权限,则需要向IAM用户所属的用户组授予一个或多个SSO权限。 一般SSO根据授权精细程度分为角色和策略。 角色(Minio中貌似没有角色):IAM最初提供的一种根据用户的工作职能定义权限的粗粒度授权机制。该机制以服务为粒度,提供有限的服务相关角色用于授权。由于华为云各服务之间存在业务依赖关系,因此给用户授予角色时,可能需要一并授予依赖的其他角色,才能正确完成业务。角色并不能满足用户对精细化授权的要求,无法完全达到企业对权限最小化的安全管控要求。策略(minio中有):IAM最新提供的一种细粒度授权的能力,可以精确到具体服务的操作、资源以及请求条件等。基于策略的授权是一种更加灵活的授权方式,能够满足企业对权限最小化的安全管控要求。例如:针对SSO服务,管理员能够控制IAM用户仅能对某一个桶资源进行指定的管理操作。多数细粒度策略以API接口为粒度进行权限拆分。 策略结构&语法策略结构包括:Version(策略版本号)和Statement(策略权限语句),其中Statement可以有多个,表示不同的授权项。 以上表示,当所述请求包括以下访问控制列表(ACL)中的一个:public-read,public-read-write或authenticated-read,拒绝任何亚马逊S3在桶examplebucket中PutObject或PutObjectAcl请求。 策略语法参数: 参数说明Version标识策略的版本号,Minio中一般为"2012-10-17"Statement策略授权语句,描述策略的详细信息,包含Effect(效果)、Action(动作)、Principal(用户)、Resource(资源)和Condition(条件)。其中Condition为可选EffectEffect(效果)作用包含两种:Allow(允许)和Deny(拒绝),系统预置策略仅包含允许的授权语句,自定义策略中可以同时包含允许和拒绝的授权语句,当策略中既有允许又有拒绝的授权语句时,遵循Deny优先的原则。ActionAction(动作)对资源的具体操作权限,格式为:服务名:资源类型:操作,支持单个或多个操作权限,支持通配符号*,通配符号表示所有。例如 s3:GetObject ,表示获取对象ResourceResource(资源)策略所作用的资源,支持通配符号*,通配符号表示所有。在JSON视图中,不带Resource表示对所有资源生效。Resource支持以下字符:-_0-9a-zA-Z*./\,如果Resource中包含不支持的字符,请采用通配符号*。例如:arn:aws:s3:::my-bucketname/myobject*\,表示minio中my-bucketname/myobject目录下所有对象文件。ConditionCondition(条件)您可以在创建自定义策略时,通过Condition元素来控制策略何时生效。Condition包括条件键和运算符,条件键表示策略语句的Condition元素,分为全局级条件键和服务级条件键。全局级条件键(前缀为g:)适用于所有操作,服务级条件键(前缀为服务缩写,如obs:)仅适用于对应服务的操作。运算符与条件键一起使用,构成完整的条件判断语句。 系统默认策略AWS Identity and Access Management (IAM) 是一种 Web 服务,可以帮助您安全地控制对 AWS 资源的访问。您可以使用 IAM 控制对哪个用户进行身份验证 (登录) 和授权 (具有权限) 以使用资源。 默认存在5种IAM策略: 权限解释consoleAdmin控制台管理员diagnostics诊断readonly只读readwrite读写writeonly只写 自定义策略我们可以通过控制台或者mc客户端添加策略,实际就是一个Json文件。 首先在控制台点击IAM策略,然后点击创建策略。 添加之后,可以查看到当前决策的内容信息,也可以修改Json文件。 然后进入用户管理,选择用户后,再添加我们自定义的权限策略。 桶策略是作用于所配置的桶及桶内对象的。桶拥有者通过桶策略可为IAM用户或其他帐号授权桶及桶内对象的操作权限。 页面管理桶策略 1. 访问策略管理存储桶的访问策略管理,是最大粒度的权限,可以设置私有或者公开。 点击存储桶的管理按钮,进入管理页面。 除了对存储桶大粒度的进行访问控制,页面上还支持对前缀粒度的访问控制。 比如我们主要只公开当前桶一部分共有访问,需要对另一部分进行访问控制,我们可以设置桶的策略为Plubic,然后设置某一目录下的文件只读或者只写。 首先点击添加访问规则按钮。 Minio也提供了API来管理桶策略,也是需要定义策略Json,然后调用API。 1. 设置桶策略API如下: public void setBucketPolicy(SetBucketPolicyArgs args)示例: StringBuilder builder = new StringBuilder(); builder.append("{\n"); builder.append(" \"Statement\": [\n"); builder.append(" {\n"); builder.append(" \"Action\": [\n"); builder.append(" \"s3:GetBucketLocation\",\n"); builder.append(" \"s3:ListBucket\"\n"); builder.append(" ],\n"); builder.append(" \"Effect\": \"Allow\",\n"); builder.append(" \"Principal\": \"*\",\n"); builder.append(" \"Resource\": \"arn:aws:s3:::my-bucketname\"\n"); builder.append(" },\n"); builder.append(" {\n"); builder.append(" \"Action\": \"s3:GetObject\",\n"); builder.append(" \"Effect\": \"Allow\",\n"); builder.append(" \"Principal\": \"*\",\n"); builder.append(" \"Resource\": \"arn:aws:s3:::my-bucketname/myobject*\"\n"); builder.append(" }\n"); builder.append(" ],\n"); builder.append(" \"Version\": \"2012-10-17\"\n"); builder.append("}\n"); minioClient.setBucketPolicy( SetBucketPolicyArgs.builder().bucket("my-bucketname").config(builder.toString()).build()); 2. 查询桶策略API如下: public String getBucketPolicy(GetBucketPolicyArgs args)示例: String policy = minioClient.getBucketPolicy( GetBucketPolicyArgs.builder().bucket("aaaaa").build()); System.out.println("Current policy: " + policy);查询结果如下所示: { "Version":"2012-10-17", "Statement":[ { "Effect":"Allow", "Principal":{ "AWS":[ "*" ] }, "Action":[ "s3:GetBucketLocation", "s3:ListBucketMultipartUploads" ], "Resource":[ "arn:aws:s3:::aaaaa" ] }, { "Effect":"Allow", "Principal":{ "AWS":[ "*" ] }, "Action":[ "s3:DeleteObject", "s3:ListMultipartUploadParts", "s3:PutObject", "s3:AbortMultipartUpload" ], "Resource":[ "arn:aws:s3:::aaaaa/bb*" ] } ] } 对象策略Minio貌似没有具体对象文件的访问策略管理。那么在WEB端,需要加载图片,下载视频,如何去访问文件呢? 1. SDK直接访问如果是JS集成,可以使用使用客户端直连Minio,此方式简单效率高,但是安全性不高。 如果是后台应用JAVA集成,Web请求访问,文件服务再去访问Minio获取资源,然后再响应给Web端,此方式安全性高,但是链路较长,效率低了一半。。。 2. 公开访问权限可以设置桶的访问策略为Public,这样就能直接访问到文件,但是各种针对于用户不需要登录就能访问的照片,文件等,因为安全性最低。 3. 临时访问URLWEB端可以请求后台服务,后台服务调用getPresignedObjectUrl方法,返回一个临时访问路径,WEB端使用此链接直接去访问对象,此方式安全可靠,效率也高,但是多了一步请求临时URL的访问。 参考文档https://support.huaweicloud.com/perms-cfg-obs/obs_40_0040.html |
CopyRight 2018-2019 实验室设备网 版权所有 |