• 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
    

  • 相关阅读:
    swoole 查看tcp开启进程数
    详解LRU缓存算法
    glib 双向链表
    清华计算机本科 课表
    glib 单向链表
    通信课程
    基数排序
    glib 数组
    glib 散列表
    清华计算机博士 课表
  • 原文地址:https://www.cnblogs.com/wang_yb/p/15911798.html
Copyright © 2020-2023  润新知