Minio SDK訪問Bucket的策略配置


配置用戶來訪問 Bucket

Minio 是高性能的對象存儲服務,基於golang開發的,可以本地部署。
用它來管理自己系統中的上傳下載的文件很方便。

通過 SDK 訪問 Minio 服務時,一般先創建 service account,然后通過 access key 和 secret key 來訪問 bucket。
比如:

package main

import (
    "log"

    "github.com/minio/minio-go/v7"
    "github.com/minio/minio-go/v7/pkg/credentials"
)

func InitMinioClient(endpoint, accessKey, secretKey string) (*minio.Client, error) {
    return minio.New(endpoint, &minio.Options{
        Creds:  credentials.NewStaticV4(accessKey, secretKey, ""),
        Secure: false,
    })
}

// upload file
func PutFile(mc *minio.Client, bucketname, objectname, fp string) (minio.UploadInfo, error) {
    return mc.FPutObject(context.Background(), bucketname, objectname, fp, minio.PutObjectOptions{
      ContentType: "application/csv",
    })
}



func main() {
    endpoint := "your minio endpoint"
    accessKey := "Q3AM3UQ867SPQQA43P2F"
    secretKey := "zuf+tfteSlswRu7BJ86wekitnifILbZam1KYY3TG"

    // Initialize minio client object.
  	minioClient, err := InitMinioClient(endpoint, accessKey, secretKey)
  	// 省略錯誤處理 。。。 。。。
  
    PutFile(minioClient, "test", "test.csv", "./xxx.csv")
  	// 省略錯誤處理 。。。 。。。
}

在最新版的minio console中,配置service account 有2個入口:
image.png

配置policy 來訪問Bucket

首先,每個Bucket有3種訪問策略可以設置:

  1. public:不需要access key 和 secret key,可以直接訪問
  2. private:需要 access key 和 secret key 才能訪問
  3. custom:不需要access key 和 secret key,但是只能以符合策略的方式來訪問

image.png

默認是 privite 策略,也就是需要 access key 和 secret key 才能訪問。
public 策略允許所有人訪問,沒有任何訪問控制,適合公開的資源。

custom策略就是我們這次嘗試的目標。
由於我們沒有 access key 和 secret key,上面的代碼可以改成如下這樣:

package main

import (
    "log"

    "github.com/minio/minio-go/v7"
    "github.com/minio/minio-go/v7/pkg/credentials"
)

func InitMinioClient(endpoint string) (*minio.Client, error) {
    return minio.New(endpoint, &minio.Options{
        Creds:  credentials.NewStaticV4("", "", ""),
        Secure: false,
    })
}

// upload file
func PutFile(mc *minio.Client, bucketname, objectname, fp string) (minio.UploadInfo, error) {
    return mc.FPutObject(context.Background(), bucketname, objectname, fp, minio.PutObjectOptions{
      ContentType: "application/csv",
    })
}



func main() {
    endpoint := "your minio endpoint"
    // Initialize minio client object.
  	minioClient, err := InitMinioClient(endpoint)
  	// 省略錯誤處理 。。。 。。。
  
    PutFile(minioClient, "test", "test.csv", "./xxx.csv")
  	// 省略錯誤處理 。。。 。。。
}

同時配置 Bucket 的策略,允許 **PutFile **操作。
image.png

這樣,即使沒有配置 access key 和 secre key,我們也可以訪問 test Bucket 了。

總結

通過配置用戶的方式訪問,不需要指定具體的 Bucket。
通過配置策略的方式訪問,需要配置具體 Bucket 的訪問策略。
它們各有自己的應用場景,可以根據實際情況選擇一個適合自己的方式。

我用的minio版本是:

$ docker exec minio_minio_1 minio -v
minio version RELEASE.2022-02-16T00-35-27Z


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM