15 May

Настройка Minio, чтобы юзер мог работать только со своим bucket

Amazon Web ServicesData storageData storagesDevOps

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.



Создал Telegram чат по Minio https://t.me/minio_s3_ru

Tags:minios3хранение данныххранилище данных
Hubs: Amazon Web Services Data storage Data storages DevOps
+14
3.7k 37
Leave a comment
Popular right now
Python для анализа данных
December 2, 202019,000 ₽SkillFactory
Профессия Data Scientist
December 2, 2020135,000 ₽SkillFactory
Специализация Data Science
December 2, 202095,000 ₽SkillFactory
BIG DATA с нуля
December 22, 202019,700 ₽Нетология