Configurer Minio pour que l'utilisateur ne puisse travailler qu'avec son propre bucket

Minio est un magasin d'objets simple, rapide et compatible AWS S3. Minio est conçu pour héberger des données non structurées telles que des photos, des vidéos, des fichiers journaux, des sauvegardes. minio prend également en charge le mode distribué, qui offre la possibilité de connecter plusieurs disques à un serveur de stockage d'objets, y compris ceux situés sur différentes machines.

Le but de cet article est de configurer minio pour que chaque utilisateur puisse travailler uniquement avec son propre bucket.

De manière générale, Minio convient aux cas suivants :

  • stockage sans réplication au-dessus d'un système de fichiers fiable avec accès via S3 (stockage de petite et moyenne taille hébergé sur NAS et SAN) ;
  • stockage non répliqué au-dessus d'un système de fichiers peu fiable avec accès S3 (pour le développement et les tests) ;
  • stockage avec réplication sur un petit groupe de serveurs dans un rack avec accès via le protocole S3 (stockage failover avec un domaine de panne égal au rack).

Sur les systèmes RedHat, nous connectons le référentiel non officiel Minio.

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

Générez et ajoutez MINIO_ACCESS_KEY et MINIO_SECRET_KEY dans /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=

Si vous n'utilisez pas nginx avant Minio, vous devez alors changer.

--address 127.0.0.1:9000

sur

--address 0.0.0.0:9000

Lançons Minio.

systemctl start minio

Nous créons une connexion à Minio appelée myminio.

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

Créez un bucket user1bucket.

minio-mc mb myminio/user1bucket

Créez un bucket user2bucket.

minio-mc mb myminio/user2bucket

Créez un fichier de stratégie 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": ""
    }
  ]
}

Créez un fichier de stratégie 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": ""
    }
  ]
}

Créez un utilisateur user1 avec le mot de passe test12345.

minio-mc admin user add myminio user1 test12345

Créez un utilisateur user2 avec le mot de passe test54321.

minio-mc admin user add myminio user2 test54321

Nous créons une politique dans Minio appelée user1-policy à partir du fichier user1-policy.json.

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

Nous créons une politique dans Minio appelée user2-policy à partir du fichier user2-policy.json.

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

Appliquez la stratégie user1-policy à l’utilisateur user1.

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

Appliquez la stratégie user2-policy à l’utilisateur user2.

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

Vérification de la connexion des politiques aux utilisateurs

minio-mc admin user list myminio

La vérification de la connexion des politiques aux utilisateurs ressemblera à ceci

enabled    user1                 user1-policy
enabled    user2                 user2-policy

Pour plus de clarté, passez par le navigateur jusqu'à l'adresse http://ip-сервера-где-запущен-minio:9000/minio/

Nous voyons que nous nous sommes connectés à Minio sous MINIO_ACCESS_KEY=user1. Le bucket user1bucket est à notre disposition.

Configurer Minio pour que l'utilisateur ne puisse travailler qu'avec son propre bucket

Il ne sera pas possible de créer un bucket, car il n'y a pas d'action correspondante dans la politique.

Configurer Minio pour que l'utilisateur ne puisse travailler qu'avec son propre bucket

Créons un fichier dans le bucket user1bucket.

Configurer Minio pour que l'utilisateur ne puisse travailler qu'avec son propre bucket

Connectons-nous à Minio sous MINIO_ACCESS_KEY=user2. Le bucket user2bucket est à notre disposition.

Et nous ne voyons ni user1bucket ni les fichiers de user1bucket.

Configurer Minio pour que l'utilisateur ne puisse travailler qu'avec son propre bucket

Création d'un chat Telegram en utilisant Minio https://t.me/minio_s3_ru

Source: habr.com