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