有没有办法隐藏 MinIO 存储桶的文件列表索引页?
Is there a way to hide the file listing index page of a MinIO bucket?
我已将 MinIO 存储桶的访问权限设置为“下载”,以便任何人都可以读取(但不能写入)文件,但这启用了显示整个存储桶内容的“索引页面”。
例如,考虑包含文件 example.png
的存储桶 store/test
。我希望 example.png
可以被万维网读取,所以我将 store/test
的访问权限设置为“下载”,这意味着 https://store.example.com/test/example.png is now readable by anyone, but it also means that https://store.example.com/test 现在显示了所有文件的列表桶:
<!-- Pretty printed result of $ curl https://store.example.com/test -->
<?xml version="1.0" encoding="UTF-8"?>
<ListBucketResult xmlns="http://s3.amazonaws.com/doc/2006-03-01/">
<Name>test</Name>
<Prefix/>
<Marker/>
<MaxKeys>4500</MaxKeys>
<Delimiter/>
<IsTruncated>false</IsTruncated>
<Contents>
<Key>example.png</Key>
<LastModified>2021-02-05T08:13:06.683Z</LastModified>
<ETag>"7c8b827ef97e929258e9728cb96059cf-33"</ETag>
<Size>4295413012</Size>
<Owner>
<ID>02d6176db174dc93cb1b899f7c6078f08654445fe8cf1b6ce98d8855f66bdbf4</ID>
<DisplayName/>
</Owner>
<StorageClass>STANDARD</StorageClass>
</Contents>
</ListBucketResult>
我不想显示此列表页面,但我确实希望存储桶中的所有文件都是世界可读的,包括稍后添加到存储桶中的文件。如何实现?
您需要设置策略。我为您提供了策略配置,此文件可帮助您设置策略
{
"Statement":[
{
"Action":[
"s3:GetBucketLocation"
],
"Effect":"Allow",
"Principal":{
"AWS":[
"*"
]
},
"Resource":[
"arn:aws:s3:::psb-new"
]
},
{
"Action":[
"s3:GetObject"
],
"Effect":"Allow",
"Principal":{
"AWS":[
"*"
]
},
"Resource":[
"arn:aws:s3:::psb-new/*"
]
}
],
"Version":"2012-10-17"
}
在这里设置存储桶策略是正确的答案,使用 public 或下载策略允许完全访问存储桶,而该策略将仅限于您想要允许的操作。
添加到上面的@tapos-ghosh 策略,您可以将其应用为存储桶级策略:
- 使用该策略定义创建一个文件,例如 bucket_pol.json
- 应用存储桶策略:
mc policy set-json bucket_pol.json site1/public/
Access permission for site1/public/
is set from `bucket_pol.json
现在,我可以访问特定对象:
curl http://minio1:9000/public/public.object
Ubuntu 20.04.2 LTS \n \l
但是我无法获取存储桶的对象列表:
curl http://minio1:9000/public/
<?xml version="1.0" encoding="UTF-8"?>
<Error><Code>AccessDenied</Code><Message>Access Denied.</Message><BucketName>public</BucketName><Resource>/public/</Resource><RequestId>1668F2D9FA3B99E9</RequestId><HostId>c37065ef-0eb8-4cf3-847a-ffedd29f9e30</HostId></Error>
如果我的存储桶名称是 file
mc policy set none myminio/file
mc policy set download myminio/file/*
我已将 MinIO 存储桶的访问权限设置为“下载”,以便任何人都可以读取(但不能写入)文件,但这启用了显示整个存储桶内容的“索引页面”。
例如,考虑包含文件 example.png
的存储桶 store/test
。我希望 example.png
可以被万维网读取,所以我将 store/test
的访问权限设置为“下载”,这意味着 https://store.example.com/test/example.png is now readable by anyone, but it also means that https://store.example.com/test 现在显示了所有文件的列表桶:
<!-- Pretty printed result of $ curl https://store.example.com/test -->
<?xml version="1.0" encoding="UTF-8"?>
<ListBucketResult xmlns="http://s3.amazonaws.com/doc/2006-03-01/">
<Name>test</Name>
<Prefix/>
<Marker/>
<MaxKeys>4500</MaxKeys>
<Delimiter/>
<IsTruncated>false</IsTruncated>
<Contents>
<Key>example.png</Key>
<LastModified>2021-02-05T08:13:06.683Z</LastModified>
<ETag>"7c8b827ef97e929258e9728cb96059cf-33"</ETag>
<Size>4295413012</Size>
<Owner>
<ID>02d6176db174dc93cb1b899f7c6078f08654445fe8cf1b6ce98d8855f66bdbf4</ID>
<DisplayName/>
</Owner>
<StorageClass>STANDARD</StorageClass>
</Contents>
</ListBucketResult>
我不想显示此列表页面,但我确实希望存储桶中的所有文件都是世界可读的,包括稍后添加到存储桶中的文件。如何实现?
您需要设置策略。我为您提供了策略配置,此文件可帮助您设置策略
{
"Statement":[
{
"Action":[
"s3:GetBucketLocation"
],
"Effect":"Allow",
"Principal":{
"AWS":[
"*"
]
},
"Resource":[
"arn:aws:s3:::psb-new"
]
},
{
"Action":[
"s3:GetObject"
],
"Effect":"Allow",
"Principal":{
"AWS":[
"*"
]
},
"Resource":[
"arn:aws:s3:::psb-new/*"
]
}
],
"Version":"2012-10-17"
}
在这里设置存储桶策略是正确的答案,使用 public 或下载策略允许完全访问存储桶,而该策略将仅限于您想要允许的操作。
添加到上面的@tapos-ghosh 策略,您可以将其应用为存储桶级策略:
- 使用该策略定义创建一个文件,例如 bucket_pol.json
- 应用存储桶策略:
mc policy set-json bucket_pol.json site1/public/ Access permission for
site1/public/
is set from `bucket_pol.json
现在,我可以访问特定对象:
curl http://minio1:9000/public/public.object
Ubuntu 20.04.2 LTS \n \l
但是我无法获取存储桶的对象列表:
curl http://minio1:9000/public/
<?xml version="1.0" encoding="UTF-8"?>
<Error><Code>AccessDenied</Code><Message>Access Denied.</Message><BucketName>public</BucketName><Resource>/public/</Resource><RequestId>1668F2D9FA3B99E9</RequestId><HostId>c37065ef-0eb8-4cf3-847a-ffedd29f9e30</HostId></Error>
如果我的存储桶名称是 file
mc policy set none myminio/file
mc policy set download myminio/file/*