【发布时间】:2021-05-17 17:08:39
【问题描述】:
当我为存储 gcp 存储桶中的对象生成带有服务帐户的签名下载 URL 时,我希望任何人都可以使用它,而无需进行身份验证。但是,我不断收到“匿名调用者没有 storage.objects.get 访问 Google Cloud Storage 对象的权限”。我做错了什么?
url, err := gcs.SignedURL(bktName, so.Name(), &gcs.SignedURLOptions{
GoogleAccessID: serviceAccountName,
Method: "GET",
Expires: time.Now().Add(duration),
ContentType: md.RenditionMetadata[0].ContentType,
Headers: []string{fmt.Sprintf("x-goog-meta-filename: %s", md.RenditionMetadata[0].FileName)},
SignBytes: func(b []byte) ([]byte, error) {
signedBlob, err := iam.SignBlob(s.GoogleIamService(), serviceAccountName, b)
if err != nil {
return nil, err
}
return []byte(signedBlob), err
},
})
我使用的服务帐户具有存储对象创建者和存储对象查看者角色...
【问题讨论】:
-
如果我将对象公开,它似乎可以工作,但这是不可接受的,带有持续时间的签名 url 是绝对必要的......
标签: google-cloud-platform storage bucket signed-url