Configurando o Minio para que o usuário possa trabalhar apenas com seu próprio bucket

Minio é um armazenamento de objetos simples, rápido e compatível com AWS S3. O Minio foi projetado para hospedar dados não estruturados, como fotos, vídeos, arquivos de log e backups. O minio também oferece suporte ao modo distribuído, que oferece a capacidade de conectar vários discos a um servidor de armazenamento de objetos, incluindo aqueles localizados em máquinas diferentes.

O objetivo deste post é configurar o minio para que cada usuário possa trabalhar apenas com seu próprio bucket.

Em geral, o Minio é adequado para os seguintes casos:

  • armazenamento sem replicação sobre um sistema de arquivos confiável com acesso via S3 (armazenamento pequeno e médio hospedado em NAS e SAN);
  • armazenamento não replicado em um sistema de arquivos não confiável com acesso S3 (para desenvolvimento e teste);
  • armazenamento com replicação em um pequeno grupo de servidores em um rack com acesso via protocolo S3 (armazenamento failover com domínio de falha igual ao rack).

Nos sistemas RedHat conectamos o repositório Minio não oficial.

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

Gere e adicione MINIO_ACCESS_KEY e MINIO_SECRET_KEY em /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 você não usará o nginx antes do Minio, precisará mudar.

--address 127.0.0.1:9000

em

--address 0.0.0.0:9000

Vamos lançar o Minio.

systemctl start minio

Criamos uma conexão com o Minio chamada myminio.

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

Crie um intervalo user1bucket.

minio-mc mb myminio/user1bucket

Crie um intervalo user2bucket.

minio-mc mb myminio/user2bucket

Crie um arquivo de política 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": ""
    }
  ]
}

Crie um arquivo de política 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": ""
    }
  ]
}

Crie um usuário user1 com a senha test12345.

minio-mc admin user add myminio user1 test12345

Crie um usuário user2 com a senha test54321.

minio-mc admin user add myminio user2 test54321

Criamos uma política no Minio chamada user1-policy a partir do arquivo user1-policy.json.

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

Criamos uma política no Minio chamada user2-policy a partir do arquivo user2-policy.json.

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

Aplique a política user1-policy ao usuário user1.

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

Aplique a política user2-policy ao usuário user2.

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

Verificando a conexão das políticas aos usuários

minio-mc admin user list myminio

Verificar a conexão das políticas aos usuários será mais ou menos assim

enabled    user1                 user1-policy
enabled    user2                 user2-policy

Para maior clareza, acesse o navegador até o endereço http://ip-сервера-где-запущен-minio:9000/minio/

Vemos que nos conectamos ao Minio em MINIO_ACCESS_KEY=user1. O bucket user1bucket está disponível para nós.

Configurando o Minio para que o usuário possa trabalhar apenas com seu próprio bucket

Não será possível criar um bucket, pois não há Ação correspondente na política.

Configurando o Minio para que o usuário possa trabalhar apenas com seu próprio bucket

Vamos criar um arquivo no bucket user1bucket.

Configurando o Minio para que o usuário possa trabalhar apenas com seu próprio bucket

Vamos nos conectar ao Minio em MINIO_ACCESS_KEY=user2. O bucket user2bucket está disponível para nós.

E não vemos user1bucket ou arquivos de user1bucket.

Configurando o Minio para que o usuário possa trabalhar apenas com seu próprio bucket

Criei um chat do Telegram usando Minio https://t.me/minio_s3_ru

Fonte: habr.com