持续创作,加速成长!这是我参与「掘金日新计划 · 6 月更文挑战」的第4天,点击查看活动详情
1、引入minio最新maven依赖
<!--minio文件服务器maven坐标依赖-->
<dependency>
<groupId>io.minio</groupId>
<artifactId>minio</artifactId>
<version>7.0.2</version>
</dependency>
2、nacos的yml文件配置minio的服务器、账号、密码、和动态生成最重要的桶的名称(唯一)
#文件服务器服务地址和key-secret minio: endpoint: http://127.0.0.1:9000 accessKey: minio secretKey: minio bucketName: bucketTest
2、配置minio的配置类-设置minio readwrite(读写) 访问策略:bucketName动态可选我们自己的桶
@Data
@Configuration
public class MinioConfig {
@Value("${minio.endpoint}")
private String endpoint;
@Value("${minio.accessKey}")
private String accesskey;
@Value("${minio.secretKey}")
private String secretkey;
@Value("${minio.bucketName}")
private String bucketName;
@Bean
public MinioClient getMinioClient() throws Exception {
#使用MinIO服务的URL,端口,Access key和Secret key创建一个MinioClient对象
MinioClient minioClient = new MinioClient(endpoint,accesskey,secretkey);
//是否有该桶,没有则创建桶并设置桶的策略
boolean flag = minioClient.bucketExists(bucketName);
if(!flag){
minioClient.makeBucket(bucketName);
}
//获取访问策略,如果访问策略为空,则设置-任何用户(Principal)-无条件的(Condition)-允许访问行为可进行(Effect)-读写-任何动作访问(Action)-所有资源文件(Resource)
String bucketPolicy = minioClient.getBucketPolicy(bucketName);
if(StringUtils.isEmpty(bucketPolicy)){
//设置桶的策略
minioClient.setBucketPolicy(bucketName,definedDefaultBucketPolicy(bucketName));
}
return minioClient;
}
/**
* 获取默认桶策略
* @param bucketName
* @return
*/
private String definedDefaultBucketPolicy(String bucketName){
StringBuffer buffer=new StringBuffer();
buffer.append("{" +
""Version":"2021-10-17"," +
""Statement":" +
"[" +
"{"Effect":"Allow"," +
""Principal":{"AWS":["*"]}," +
""Action":" +
"["s3:ListBucket"," +
""s3:ListBucketMultipartUploads"," +
""s3:GetBucketLocation"]," +
""Resource":["arn:aws:s3:::"+bucketName+""]}," +
"{"Effect":"Allow"," +
""Principal":{"AWS":["*"]}," +
""Action":" +
"["s3:PutObject"," +
""s3:AbortMultipartUpload"," +
""s3:DeleteObject"," +
""s3:GetObject"," +
""s3:ListMultipartUploadParts"]," +
""Resource":["arn:aws:s3:::"+bucketName+"/*"]}]}");
return buffer.toString();
}
}
参数 | 说明 |
---|---|
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:)仅适用于对应服务的操作。运算符与条件键一起使用,构成完整的条件判断语句。 |