首页 > 解决方案 > 尝试在 Cloud Run 中使用 Google Cloud Storage 时调用者没有权限

问题描述

我正在尝试使用 Cloud Storage 在 Google Cloud Run 上设置节点项目。使用创建的服务帐户时遇到身份验证问题。

创建服务帐户时,我确实成功下载了 JSON 令牌,并让所有内容在我的本地开发环境中正常运行。

问题是当我将应用程序成功部署到 Cloud Run 时,我收到以下错误: Error: The caller does not have permission

当我尝试获取用于将文件上传到存储桶的签名 URL 时,会发生这种情况。

我这样创建存储客户端:

const { Storage } = require("@google-cloud/storage");
const storage = new Storage();

...在我的脚本中,调用如下:

const [url] = await storage
  .bucket(bucketName)
  .file(filename)
  .getSignedUrl(options);

我为 IAM 服务账户设置了以下权限:

我还通过控制台将提到的服务帐户分配给 Cloud Run 实例。

只是为了确认,应用程序使用服务帐户 JSON 密钥在本地运行 100% 正确,只是在 Google Cloud 中运行时无法正常工作。

标签: node.jsgoogle-cloud-platformgoogle-cloud-storagegoogle-cloud-rungoogle-cloud-iam

解决方案


I managed to resolve the issue. It looks like when deployed into Cloud Run it also requires the extra permission "Service Account Token Creator" to run getSignedUrl. Locally for some reason this role is not required.


推荐阅读