Minio это простое, быстрое и совместимое с AWS S3 хранилище объектов. Minio создан для размещения неструктурированных данных, таких как фотографии, видеозаписи, файлы журналов, резервные копии. В minio также поддерживается распределенный режим (distributed mode), который предоставляет возможность подключения к одному серверу хранения объектов множества дисков, в том числе расположенных на разных машинах.
Цель этого поста настроить minio так чтобы каждый юзер мог работать только со своим bucket.
В целом, Minio подходит для следующих случаев:
- хранилище без репликации поверх надежной файловой системы с доступом по S3 (малые и средние хранилища, размещенные на NAS и SAN);
- хранилище без репликации поверх ненадежной файловой системы с доступом по S3 (для разработки и тестирования);
- хранилище с репликацией на небольшой группе серверов в одной стойке с доступом по протоколу S3 (отказоустойчивое хранилище с доменом отказа равным стойке).
На RedHat системах подключаем неофициальный репозиторий Minio.
yum -y install yum-plugin-copr
yum copr enable -y lkiesow/minio
yum install -y minio minio-mc
Генерируем и добавляем в MINIO_ACCESS_KEY и MINIO_SECRET_KEY в /etc/minio/minio.conf.
# Custom username or access key of minimum 3 characters in length.
MINIO_ACCESS_KEY=
# Custom password or secret key of minimum 8 characters in length.
MINIO_SECRET_KEY=
Если вы не будете использовать nginx перед Minio, то нужно изменить.
--address 127.0.0.1:9000
на
--address 0.0.0.0:9000
Запускаем Minio.
systemctl start minio
Создаем подключение к Minio под названием myminio.
minio-mc config host add myminio http://localhost:9000 MINIO_ACCESS_KEY
MINIO_SECRET_KEY
Создаем bucket user1bucket.
minio-mc mb myminio/user1bucket
Создаем bucket user2bucket.
minio-mc mb myminio/user2bucket
Создаем файл политики user1-policy.json.
{
"Version": "2012-10-17",
"Statement": [
{
"Action": [
"s3:PutBucketPolicy",
"s3:GetBucketPolicy",
"s3:DeleteBucketPolicy",
"s3:ListAllMyBuckets",
"s3:ListBucket"
],
"Effect": "Allow",
"Resource": [
"arn:aws:s3:::user1bucket"
],
"Sid": ""
},
{
"Action": [
"s3:AbortMultipartUpload",
"s3:DeleteObject",
"s3:GetObject",
"s3:ListMultipartUploadParts",
"s3:PutObject"
],
"Effect": "Allow",
"Resource": [
"arn:aws:s3:::user1bucket/*"
],
"Sid": ""
}
]
}
Создаем файл политики user2-policy.json.
{
"Version": "2012-10-17",
"Statement": [
{
"Action": [
"s3:PutBucketPolicy",
"s3:GetBucketPolicy",
"s3:DeleteBucketPolicy",
"s3:ListAllMyBuckets",
"s3:ListBucket"
],
"Effect": "Allow",
"Resource": [
"arn:aws:s3:::user2bucket"
],
"Sid": ""
},
{
"Action": [
"s3:AbortMultipartUpload",
"s3:DeleteObject",
"s3:GetObject",
"s3:ListMultipartUploadParts",
"s3:PutObject"
],
"Effect": "Allow",
"Resource": [
"arn:aws:s3:::user2bucket/*"
],
"Sid": ""
}
]
}
Создаем пользователя user1 с паролем test12345.
minio-mc admin user add myminio user1 test12345
Создаем пользователя user2 с паролем test54321.
minio-mc admin user add myminio user2 test54321
Создаем политику в Minio под названием user1-policy из файла user1-policy.json.
minio-mc admin policy add myminio user1-policy user1-policy.json
Создаем политику в Minio под названием user2-policy из файла user2-policy.json.
minio-mc admin policy add myminio user2-policy user2-policy.json
Применяем политику user1-policy к юзеру user1.
minio-mc admin policy set myminio user1-policy user=user1
Применяем политику user2-policy к юзеру user2.
minio-mc admin policy set myminio user2-policy user=user2
Проверяем подключение политик к пользователям
minio-mc admin user list myminio
Проверка подключения политик к пользователям будет примерно такая
enabled user1 user1-policy
enabled user2 user2-policy
Для наглядности заходим через браузер по адресу http://ip-сервера-где-запущен-minio:9000/minio/
Видим что мы подключились к Minio под MINIO_ACCESS_KEY=user1. Для нас доступен bucket user1bucket.
Создать bucket не получится, так соответствующего Action в политике нет.
Создадим файл в bucket user1bucket.
Подключимся к Minio под MINIO_ACCESS_KEY=user2. Для нас доступен bucket user2bucket.
И не видим ни user1bucket ни файлов из user1bucket.