项目场景:
提示:这里简述项目相关背景:
最近新整合minio进行文件的存储,然后需要开放二次策略进行一个临时授权。Java版本11,minio版本8.0.3
问题描述
根据网上的一些教程,成功的整合了minio(具体教程:https://stevenocean.github.io/2021/01/12/minio-sts-assumerole-sample.html),只是进行二次策略进行STS的时候,发现了无法上传对象到bucket,一直报错,提示的是AccessDenied
对应的策略如下
{
"Version": "2012-10-17",
"Statement": [
{
"Effect": "Allow",
"Action": [
"s3:GetObject",
"s3:PutObject"
],
"Resource": [
"arn:aws:s3:::buckname/*"
]
}
]
}
原因分析:
原本猜测是不是打到k8s然后被拒绝了,然后直接使用对应报文用postman发送请求,结果确实是minio返回的错误码。之后又想是不是权限给小了,就把action配了“s3:*”,结果可以了!!!
解决方案:
之后挨个测试了一下,结果发现只要再加一个s3:GetBucketLocation就可以成功上传对象,然后找了一些文档,未果,如果有知道原因的麻烦指出。附上完整的yaml
{
"Version": "2012-10-17",
"Statement": [
{
"Effect": "Allow",
"Action": [
"s3:GetObject",
"s3:GetBucketLocation",
"s3:PutObject"
],
"Resource": [
"arn:aws:s3:::buckname/*"
]
}
]
}
PS:有一些小坑指出一下
1、minio的sdk中,只有8以上的才支持STS。
2、minio需要使用到google的findbugs,需要提前引入,对应gradle配置如下:
implementation(“com.google.code.findbugs:jsr305:3.0.1”)
implementation(“com.google.code.findbugs:annotations:3.0.1”)
3、如果要获取对应的对象临时url,临时授权好像无法获取,需要使用已经分配好的accesskey与secret(这点不知道是不是自己的问题)
如果有问题,欢迎指出