如何使用项目级服务帐户为 Google Cloud Storage 创建已签名的 URL?

How can I create a signed URL for Google Cloud Storage with a project level service account?

对于每个 Google 计算实例,都有一个这样的默认服务帐户:

1234567890123-计算@developer.gserviceaccount.com

我可以创建具有适当范围(即 https://www.googleapis.com/auth/devstorage.full_control)的实例,并使用此帐户发出 API 请求。

在这个页面上:https://cloud.google.com/storage/docs/authentication#service_accounts 它说:

Every project has a service account associated with it, which may be used for authentication and to enable advanced features such as Signed URLs and browser uploads using POST.

这意味着我可以使用此服务帐户创建已签名的 URL。但是,我不知道如何使用此服务帐户创建签名 URL,因为我似乎无法获得与此帐户关联的私钥(.p12 文件)。

我可以从开发人员控制台创建一个新的、独立的服务帐户,并且可以选择下载 .p12 文件进行签名,但项目级服务帐户不会出现在 "APIs and auth / Credentials" 部分下.我可以在 "Project / Permissions" 下看到它们,但我无法在那里对它们进行任何操作。

我是否遗漏了一些其他方法来检索这些默认帐户的私钥,或者在使用它们时没有办法对 url 进行签名?

当您通过主帐户或 GCE 服务帐户或对存储桶和文件具有适当权限的其他服务帐户进行身份验证时,您可以使用任何服务帐户的 p12 密钥。

在这种情况下,只需创建一个服务帐户下载 p12 密钥并使用以下命令签署您的 URL:

$ gsutil signurl -d 10m privatekey.p12 gs://bucket/foo

尽管您可以使用以下命令使用不同的服务帐户进行身份验证:

gcloud auth activate-service-account service-account-email --key-file key.p12

您可以使用这些命令列出和切换您的帐户:

$ gcloud 授权列表
$ gcloud 配置设置帐户