private
:所有人都无法直接访问该桶的资源,如果外部需要访问,只能通过外链(最长有效期7天)
而我们的业务需求是要把用户头像放入
MinIO
的桶中,如果设置桶为
public
,那么所有人都可以遍历平台上注册用户的头像信息,这会造成隐私泄露;如果桶设置为
private
,那么只能以外链的形式给到给到前端,7天后,该外链i失效,导致前端页面无法展示用户头像。
那么,是否可以
既不暴露桶中所有的用户头像信息,又能永久访问(不通过外链形式)指定的用户头像文件
呢?
通过
mc
工具,对指定桶的
policy
进行定制化配置
1. 创建一个名为
test
的桶
默认
policy
是
private
,演示起见,可以先设为
public
。
2. 上传一个文件到test桶中
在浏览器中访问该桶的目录,可以发现列出了该桶下的文件目录:
3. 设置该桶具有下载权限:
mc policy download minio/test
4. 查看当前桶策略json文件:
mc get-json minio/test
Policy
文件 (test_policy.json
) 如下:
"Statement": [{
"Action": [
"s3:GetBucketLocation",
"s3:ListBucket"
"Effect": "Allow",
"Principal": {
"AWS": [
"Resource": [
"arn:aws:s3:::test"
"Action": [
"s3:GetObject"
"Effect": "Allow",
"Principal": {
"AWS": [
"Resource": [
"arn:aws:s3:::test/*"
"Version": "2012-10-17"
可以看到,在action
中有s3:ListBucket
这一项是allow的,所以我们可以在浏览器中遍历目录,删除即可
5. 修改test_policy.json如下:
"Statement": [{
"Action": [
"s3:GetBucketLocation"
"Effect": "Allow",
"Principal": {
"AWS": [
"Resource": [
"arn:aws:s3:::test"
"Action": [
"s3:GetObject"
"Effect": "Allow",
"Principal": {
"AWS": [
"Resource": [
"arn:aws:s3:::test/*"
"Version": "2012-10-17"
6. 重新应用该policy
mc policy set-json test_policy.json minio/test
7. 验证:
可以看到,无法再遍历桶目录了。