Назад к заметкам

опубликовано 2025-06-06

Как скрыть список файлов, но разрешить публичное скачивание в MinIO?

l-you avatarLiterally You

Это руководство подготовлено для релиза MinIO RELEASE.2025-05-24T17-08-30Z, который на момент публикации является последним доступным тегом версии.

Шаг 1: Создайте алиас для бакета

bash

mc alias set myminio https://minio.example.com YOUR_ACCESS_KEY YOUR_SECRET_KEY
mc mb myminio/public

Шаг 2: Установите для бакета политику публичного доступа только на чтение

bash

mc anonymous set download myminio/public

Это делает следующее: - Разрешает просмотр списка файлов в бакете. - Разрешает скачивание любого файла.

Шаг 3: Отредактируйте JSON политики бакета

Сначала выполните следующую команду, чтобы получить текущую JSON‑политику, созданную на предыдущем шаге.

bash

mc anonymous get-json myminio/public

Вывод будет выглядеть следующим образом: “Это политика, определённая пресетом ‘download’.

json

{
 "Statement": [
  {
   "Action": [
    "s3:GetBucketLocation",
    "s3:ListBucket"
   ],
   "Effect": "Allow",
   "Principal": {
    "AWS": [
     "*"
    ]
   },
   "Resource": [
    "arn:aws:s3::: public"
   ]
  },
  {
   "Action": [
    "s3:GetObject"
   ],
   "Effect": "Allow",
   "Principal": {
    "AWS": [
     "*"
    ]
   },
   "Resource": [
    "arn:aws:s3::: public/*"
   ]
  }
 ],
 "Version": "2012-10-17"
}

Строка, которая позволяет всем просматривать список файлов в бакете, — это s3:ListBucket в свойстве ‘Action’. Просто удалите её и загрузите политику снова следующей командой.

bash

mc anonymous set-json /path-to-your-edited-json-policy.json myminio/public

Где файл /path-to-your-edited-json-policy.json содержит отредактированную версию вашей политики.

json

{
 "Statement": [
  {
   "Action": [
    "s3:GetBucketLocation"
   ],
   "Effect": "Allow",
   "Principal": {
    "AWS": [
     "*"
    ]
   },
   "Resource": [
    "arn:aws:s3::: public"
   ]
  },
  {
   "Action": [
    "s3:GetObject"
   ],
   "Effect": "Allow",
   "Principal": {
    "AWS": [
     "*"
    ]
   },
   "Resource": [
    "arn:aws:s3:::public/*"
   ]
  }
 ],
 "Version": "2012-10-17"
}

Шаг 4: Проверьте, что листинг скрыт

Откройте корень вашего MinIO S3 эндпоинта. Например, ‘youbucket.s3.yourdomain.com’. Если вы получите ошибку в формате XML с текстом ‘Access Denied’, значит всё работает как задумано!