設定 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

來源: www.habr.com