0

当我为存储 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
    },
})

我正在使用的服务帐户具有存储对象创建者和存储对象查看者角色...

4

2 回答 2

1

按照创建签名 URL 的指南下载对象: https ://cloud.google.com/storage/docs/samples/storage-generate-signed-url-v4

或者,您可以使用 gsutil 命令创建签名的 URl: https ://cloud.google.com/storage/docs/gsutil/commands/signurl

于 2021-05-18T09:59:30.750 回答
0

如果您在创建签名 url 时指定标题,则必须在“卷曲”生成的 url 时包含它们;-)

于 2021-05-18T20:09:27.677 回答