Настройка на Minio, за да може потребителят да работи само със своя bucket

Minio е просто, бързо и съвместимо с AWS S3 хранилище за обекти. Minio е предназначен за съхраняване на неструктурирани данни, като снимки, видеозаписи, файлове с журнали, резервни копия. В minio също се поддържа разпределен режим, който позволява свързване на множество дискове към един сървър за съхранение на обекти, включително такива, разположени на различни машини.

Целта на този пост е да настрои 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, тъй като в политиката няма съответно действие.

Настройка на 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

Купете надежден хостинг за сайтове със защита от DDoS, VPS и VDS сървъри 🔥 Купете надежден хостинг за сайтове със защита от DDoS, VPS и VDS сървъри | ProHoster