Налаштування Minio, щоб користувач міг працювати тільки зі своїм bucket

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.

Налаштування Minio, щоб користувач міг працювати тільки зі своїм bucket

Створити bucket не вийде, то відповідного Action у політиці немає.

Налаштування Minio, щоб користувач міг працювати тільки зі своїм bucket

Створимо файл у bucket user1bucket.

Налаштування Minio, щоб користувач міг працювати тільки зі своїм bucket

Підключимося до Minio під MINIO_ACCESS_KEY=user2. Для нас є bucket user2bucket.

І не бачимо ні user1bucket, ні файлів з user1bucket.

Налаштування Minio, щоб користувач міг працювати тільки зі своїм bucket

Створив Telegram чат по Minio https://t.me/minio_s3_ru

Джерело: habr.com