有没有办法隐藏 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/*