【问题标题】:google storage signed url public read谷歌存储签名网址公开阅读
【发布时间】:2016-05-19 18:44:35
【问题描述】:

我正在尝试为公共图像创建签名 URL
是否可以在 URL 上设置权限级别,还是需要在文件上传后设置?

我尝试通过传递一些标题来做到这一点,但我不确定正确的方法。

opts := &storage.SignedURLOptions{
    GoogleAccessID: googleAccessID,
    PrivateKey:     data,
    Method:         "PUT",
    Expires:        time.Now().Add(time.Hour * 1),
    ContentType:    r.MimeType,
    Headers:        []string{"x-goog-acl"},
or maybe Headers:        []string{"x-goog-acl:public-read"},

}

那么客户端也需要设置header?

【问题讨论】:

    标签: go google-cloud-storage


    【解决方案1】:

    使用签名 URL 的任何人都以签署 URL 的实体的权限行事。假设您创建服务帐户 A 并使用 A 的私钥对 URL 进行签名。当最终用户尝试使用该 URL 获取资源时,GCS 将检查服务帐户 A 是否具有读取权限。

    【讨论】:

      【解决方案2】:

      您可以在创建新的存储桶编写器时执行此操作。您可以设置标题并创建 ACLRule。我使用“google.golang.org/cloud/storage”包在我在 Google App Engine 上托管的应用程序中执行此操作。希望这会有所帮助。

      wc := bucket.Object(filename).NewWriter(ctx)
      wc.ContentType = contentType
      wc.CacheControl = "public, max-age=86400"
      wc.ObjectAttrs.ACL = append(wc.ObjectAttrs.ACL, storage.ACLRule{Role: storage.RoleReader, Entity: storage.AllUsers})
      

      【讨论】:

      • 这是文件上传到bucket之后,不是在签名URL创建的时候?
      • 此示例向您展示如何在保存文件时设置权限。如果您需要在保存后更新权限,您可以使用 func (o *ObjectHandle) Update(ctx context.Context, attrs ObjectAttrs) 为其赋予新的权限。根据您的问题,我的印象是该文件已经公开,因此不需要签名 URL,因为这是您要临时共享的受限文件。
      猜你喜欢
      • 2014-07-25
      • 1970-01-01
      • 2018-01-30
      • 2020-07-23
      • 1970-01-01
      • 1970-01-01
      • 2018-12-14
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多