minio访问策略设置分两种:
- 桶策略
- 用户策略
一、web端设置桶策略
桶的创建者拥有管理桶的权限,其他未授权用户不可管理桶
桶默认可以有三种Access Policy策略:
public、custom、private
1.1、public
设置桶权限为public
不经过任何认证可以直接访问资源
1.2、custom
这种Access Policy策略是通过如下自定义Access Rules出现的
1.1.1、readonly
可以设置资源不经过授权,只能读取
1.1.2、writeonly
资源不经过授权,只能写入
1.1.3、readwrite
资源不经过授权,可读可写
1.3、private
桶设置为private后,未经授权不能进行任何操作,所有Access Rules失效
二、java程序设置桶策略
2.1、API设置桶策略
setBucketPolicy
- 策略json可在web端查看与编写
/**
* 设置桶策略
* @param builder 策略json
* @param bucketName 桶名称
*/
@SneakyThrows(Exception.class)
public static void createBucketPolicy(StringBuilder builder, String bucketName) {
if(builder.length()==0) builder=defaultBucketPolicy(bucketName);
minioClient.setBucketPolicy(SetBucketPolicyArgs.builder().bucket(bucketName).config(builder.toString()).build());
}
/**
* 获取默认桶策略
* @param bucketName
* @return
*/
private static StringBuilder defaultBucketPolicy(String bucketName){
StringBuilder builder=new StringBuilder();
builder.append("{\n" +
" \"Version\": \"2012-10-17\",\n" +
" \"Statement\": [\n" +
" {\n" +
" \"Effect\": \"Allow\",\n" +
" \"Action\": [\n" +
" \"s3:ListAllMyBuckets\",\n" +
" \"s3:ListBucket\",\n" +
" \"s3:GetBucketLocation\",\n" +
" \"s3:GetObject\",\n" +
" \"s3:PutObject\",\n" +
" \"s3:DeleteObject\"\n" +
" ],\n" +
" \"Principal\":\"*\",\n" +
" \"Resource\": [\n" +
" \"arn:aws:s3:::"+bucketName+"/*\"\n" +
" ]\n" +
" }\n" +
" ]\n" +
"}");
return builder;
}
2.2、API查看桶策略
/**
* 查看桶策略
* @param bucketName
* @return
*/
@SneakyThrows(Exception.class)
public static String queryBucketPolicy(String bucketName) {
String bucketPolicy = minioClient.getBucketPolicy(GetBucketPolicyArgs.builder().bucket(bucketName).build());
logger.info(bucketPolicy);
return bucketPolicy;
}
三、web端设置用户策略
3.1、策略概念及语法
策略(policy):IAM(Identity and Access Management)最新提供的一种细粒度授权的能力,可以精确到具体服务的操作、资源以及请求条件等。基于策略的授权是一种更加灵活的授权方式,能够满足企业对权限最小化的安全管控要求。
{
"Version": "2012-10-17",
"Statement": [
{
"Effect": "Allow",
"Action": [
"s3:ListAllMyBuckets",
"s3:ListBucket",
"s3:GetBucketLocation",
"s3:GetObject",
"s3:PutObject",
"s3:DeleteObject"
],
"Resource": [
"arn:aws:s3:::testpolicy1/*"
]
}
]
}
参数 | 说明 |
---|---|
Version | 标识策略的版本号,Minio中一般为"2012-10-17" |
Statement | 策略授权语句,描述策略的详细信息,包含Effect(效果)、Action(动作)、Principal(用户)、Resource(资源)和Condition(条件)。其中Condition为可选 |
Effect | Effect(效果)作用包含两种:Allow(允许)和Deny(拒绝),系统预置策略仅包含允许的授权语句,自定义策略中可以同时包含允许和拒绝的授权语句,当策略中既有允许又有拒绝的授权语句时,遵循Deny优先的原则。 |
Action | Action(动作)对资源的具体操作权限,格式为:服务名:资源类型:操作,支持单个或多个操作权限,支持通配符号*,通配符号表示所有。例如 s3:GetObject ,表示获取对象 |
Resource | Resource(资源)策略所作用的资源,支持通配符号*,通配符号表示所有。在JSON视图中,不带Resource表示对所有资源生效。Resource支持以下字符:-_0-9a-zA-Z*./\,如果Resource中包含不支持的字符,请采用通配符号*。例如:arn:aws:s3:::my-bucketname/myobject*\,表示minio中my-bucketname/myobject目录下所有对象文件。 |
Condition | Condition(条件)您可以在创建自定义策略时,通过Condition元素来控制策略何时生效。Condition包括条件键和运算符,条件键表示策略语句的Condition元素,分为全局级条件键和服务级条件键。全局级条件键(前缀为g:)适用于所有操作,服务级条件键(前缀为服务缩写,如obs:)仅适用于对应服务的操作。运算符与条件键一起使用,构成完整的条件判断语句。 |
3.2、系统默认策略
权限 | 描述 |
---|---|
consoleAdmin | 控制台管理员 |
diagnostics | 诊断 |
readonly | 只读 |
readwrite | 读写 |
writeonly | 只写 |
3.3、自定义策略
3.4、为用户添加策略
- 直接为用户指定策略
- 为用户指定用户组,用户组设置策略