Configuración de Minio para que el usuario solo pueda trabajar con su bucket

Minio es un almacenamiento de objetos simple, rápido y compatible con AWS S3. Minio está diseñado para alojar datos no estructurados, como fotografías, videos, archivos de registro y copias de seguridad. Minio también admite un modo distribuido que permite conectar múltiples discos a un solo servidor de almacenamiento de objetos, incluso si están ubicados en diferentes máquinas.

El objetivo de este post es configurar Minio para que cada usuario solo pueda trabajar con su propio bucket.

En general, Minio es adecuado para los siguientes casos:

  • almacenamiento sin replicación sobre un sistema de archivos confiable con acceso S3 (almacenamientos pequeños y medianos alojados en NAS y SAN);
  • almacenamiento sin replicación sobre un sistema de archivos no confiable con acceso S3 (para desarrollo y pruebas);
  • almacenamiento con replicación en un pequeño grupo de servidores en un mismo rack con acceso a través del protocolo S3 (almacenamiento tolerante a fallos con un dominio de fallos igual al rack).

En sistemas RedHat, conectamos el repositorio no oficial de Minio.

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

Generamos y agregamos en MINIO_ACCESS_KEY y MINIO_SECRET_KEY en /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 no va a usar nginx frente a Minio, debe cambiar.

--address 127.0.0.1:9000

en

--address 0.0.0.0:9000

Iniciamos Minio.

systemctl start minio

Creamos una conexión a Minio llamada myminio.

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

Creamos el bucket user1bucket.

minio-mc mb myminio/user1bucket

Creamos el bucket user2bucket.

minio-mc mb myminio/user2bucket

Creamos el archivo de políticas 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": ""
    }
  ]
}

Creamos el archivo de políticas 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": ""
    }
  ]
}

Creamos el usuario user1 con la contraseña test12345.

minio-mc admin user add myminio user1 test12345

Creamos el usuario user2 con la contraseña test54321.

minio-mc admin user add myminio user2 test54321

Creamos una política en Minio llamada user1-policy desde el archivo user1-policy.json.

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

Creamos una política en Minio llamada user2-policy desde el archivo user2-policy.json.

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

Aplicamos la política user1-policy al usuario user1.

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

Aplicamos la política user2-policy al usuario user2.

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

Verificamos la conexión de las políticas a los usuarios

minio-mc admin user list myminio

La verificación de la conexión de las políticas a los usuarios será aproximadamente así

enabled    user1                 user1-policy
enabled    user2                 user2-policy

Para mayor claridad, accedemos a través del navegador en la dirección http://ip-servidor-donde-esta-ejecutado-minio:9000/minio/

Vemos que hemos accedido a Minio con MINIO_ACCESS_KEY=user1. El bucket user1bucket está disponible para nosotros.

Configuración de Minio para que el usuario solo pueda trabajar con su bucket

No se podrá crear un bucket, ya que no hay la acción correspondiente en la política.

Configuración de Minio para que el usuario solo pueda trabajar con su bucket

Crearemos un archivo en el bucket user1bucket.

Configuración de Minio para que el usuario solo pueda trabajar con su bucket

Nos conectaremos a Minio con MINIO_ACCESS_KEY=user2. El bucket user2bucket está disponible para nosotros.

Y no vemos ni user1bucket ni archivos de user1bucket.

Configuración de Minio para que el usuario solo pueda trabajar con su bucket

He creado un chat de Telegram sobre Minio https://t.me/minio_s3_ru

Fuente: habr.com

Compra un hosting fiable para sitios web con protección contra DDoS, servidores VPS VDS 🔥 Compra un hosting fiable para sitios web con protección contra DDoS, servidores VPS VDS | ProHoster