Configurare Minio in modo che l'utente possa lavorare solo con il proprio bucket

Minio è un archivio oggetti semplice, veloce e compatibile con AWS S3. Minio è progettato per ospitare dati non strutturati come foto, video, file di registro, backup. minio supporta anche la modalità distribuita, che offre la possibilità di connettere più dischi a un server di archiviazione di oggetti, compresi quelli posizionati su macchine diverse.

Lo scopo di questo post è configurare minio in modo che ogni utente possa lavorare solo con il proprio bucket.

In generale Minio è adatto ai seguenti casi:

  • storage non replicato su un file system affidabile con accesso tramite S3 (storage di piccole e medie dimensioni ospitato su NAS e SAN);
  • storage non replicato su un file system inaffidabile con accesso S3 (per sviluppo e test);
  • storage con replica su un piccolo gruppo di server in un rack con accesso tramite protocollo S3 (storage di failover con dominio di guasto pari al rack).

Sui sistemi RedHat colleghiamo il repository Minio non ufficiale.

yum -y install yum-plugin-copr
yum copr enable -y lkiesow/minio
yum install -y minio minio-mc

Genera e aggiungi a MINIO_ACCESS_KEY e MINIO_SECRET_KEY in /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=

Se non utilizzerai nginx prima di Minio, dovrai cambiare.

--address 127.0.0.1:9000

su

--address 0.0.0.0:9000

Lanciamo Minio.

systemctl start minio

Creiamo una connessione a Minio chiamata myminio.

minio-mc config host add myminio http://localhost:9000 MINIO_ACCESS_KEY 
MINIO_SECRET_KEY

Crea un bucket user1bucket.

minio-mc mb myminio/user1bucket

Crea un bucket user2bucket.

minio-mc mb myminio/user2bucket

Creare un file di criteri 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": ""
    }
  ]
}

Creare un file di criteri 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": ""
    }
  ]
}

Crea un utente user1 con la password test12345.

minio-mc admin user add myminio user1 test12345

Crea un utente user2 con la password test54321.

minio-mc admin user add myminio user2 test54321

Creiamo una policy in Minio chiamata user1-policy dal file user1-policy.json.

minio-mc admin policy add myminio user1-policy user1-policy.json

Creiamo una policy in Minio chiamata user2-policy dal file user2-policy.json.

minio-mc admin policy add myminio user2-policy user2-policy.json

Applicare la policy user1 all'utente user1.

minio-mc admin policy set myminio user1-policy user=user1

Applicare la policy user2 all'utente user2.

minio-mc admin policy set myminio user2-policy user=user2

Verifica della connessione delle policy agli utenti

minio-mc admin user list myminio

Il controllo della connessione delle policy agli utenti sarà simile a questo

enabled    user1                 user1-policy
enabled    user2                 user2-policy

Per chiarezza, passare attraverso il browser all'indirizzo http://ip-сервера-где-запущен-minio:9000/minio/

Vediamo che ci siamo connessi a Minio sotto MINIO_ACCESS_KEY=user1. Il bucket user1bucket è a nostra disposizione.

Configurare Minio in modo che l'utente possa lavorare solo con il proprio bucket

Non sarà possibile creare un bucket poiché non esiste alcuna azione corrispondente nella policy.

Configurare Minio in modo che l'utente possa lavorare solo con il proprio bucket

Creiamo un file nel bucket user1bucket.

Configurare Minio in modo che l'utente possa lavorare solo con il proprio bucket

Colleghiamoci a Minio sotto MINIO_ACCESS_KEY=user2. Il bucket user2bucket è a nostra disposizione.

E non vediamo né user1bucket né file da user1bucket.

Configurare Minio in modo che l'utente possa lavorare solo con il proprio bucket

Creata una chat di Telegram utilizzando Minio https://t.me/minio_s3_ru

Fonte: habr.com