设置 Minio,使用户只能使用自己的存储桶

Minio 是一个简单、快速、兼容 AWS S3 的对象存储。 Minio 旨在托管非结构化数据,例如照片、视频、日志文件、备份。 minio还支持分布式模式,它提供了将多个磁盘连接到一台对象存储服务器的能力,包括位于不同机器上的磁盘。

这篇文章的目的是配置 minio,以便每个用户只能使用自己的存储桶。

一般来说,Minio适合以下情况:

  • 位于可靠文件系统之上的非复制存储,可通过 S3 进行访问(托管在 NAS 和 SAN 上的中小型存储);
  • 具有 S3 访问权限的不可靠文件系统之上的非复制存储(用于开发和测试);
  • 存储在一个机架中的一小组服务器上进行复制,并通过 S3 协议进行访问(故障转移存储的故障域与机架相同)。

在 RedHat 系统上,我们连接非官方的 Minio 存储库。

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

生成并添加到 /etc/minio/minio.conf 中的 MINIO_ACCESS_KEY 和 MINIO_SECRET_KEY。

# 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=

如果你在Minio之前不会使用nginx,那么你需要改变。

--address 127.0.0.1:9000

--address 0.0.0.0:9000

让我们启动 Minio。

systemctl start minio

我们创建一个与 Minio 的连接,称为 myminio。

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

创建存储桶 user1bucket。

minio-mc mb myminio/user1bucket

创建存储桶 user2bucket。

minio-mc mb myminio/user2bucket

创建策略文件 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": ""
    }
  ]
}

创建策略文件 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": ""
    }
  ]
}

创建用户user1,密码test12345。

minio-mc admin user add myminio user1 test12345

创建用户user2,密码test54321。

minio-mc admin user add myminio user2 test54321

我们在 Minio 中从文件 user1-policy.json 创建一个名为 user1-policy 的策略。

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

我们在 Minio 中从文件 user2-policy.json 创建一个名为 user2-policy 的策略。

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

将 user1-policy 策略应用到用户 user1。

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

将 user2-policy 策略应用到用户 user2。

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

检查策略与用户的连接

minio-mc admin user list myminio

检查策略与用户的连接将如下所示

enabled    user1                 user1-policy
enabled    user2                 user2-policy

为了清楚起见,请通过浏览器访问该地址 http://ip-сервера-где-запущен-minio:9000/minio/

我们看到我们在 MINIO_ACCESS_KEY=user1 下连接到了 Minio。 user1bucket 存储桶可供我们使用。

设置 Minio,使用户只能使用自己的存储桶

由于策略中没有相应的操作,因此无法创建存储桶。

设置 Minio,使用户只能使用自己的存储桶

让我们在存储桶 user1bucket 中创建一个文件。

设置 Minio,使用户只能使用自己的存储桶

让我们在 MINIO_ACCESS_KEY=user2 下连接到 Minio。 user2bucket 存储桶可供我们使用。

我们看不到 user1bucket 或 user1bucket 中的文件。

设置 Minio,使用户只能使用自己的存储桶

使用 Minio 创建 Telegram 聊天 https://t.me/minio_s3_ru

来源: habr.com