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
Vemos que nos conectamos ao Minio em MINIO_ACCESS_KEY=user1. O bucket user1bucket está disponível para nós.
Não será possível criar um bucket, pois não há Ação correspondente na política.
Vamos criar um arquivo no bucket user1bucket.
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.
Criei um chat do Telegram usando Minio
Fonte: habr.com