尝试在 Cloud Run 中使用 Google Cloud Storage 时调用者没有权限

2024-01-09

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

创建服务帐户时,我成功下载了 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 服务账户设置了以下权限:

  • 云 SQL 客户端- 也许相关?我已经在部署的环境中成功运行了 Cloud SQL。
  • 服务帐户用户- 需要用作服务帐户吗?
  • 存储对象创建者- 我只需要能够从该项目创建签名的上传网址。

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

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


我设法解决了这个问题。看起来部署到 Cloud Run 时还需要额外的权限“Service Account Token Creator”才能运行getSignedUrl。由于某种原因,本地不需要此角色。

要添加此角色,请转到 Google Cloud Console 中的 IAM 和管理部分,编辑“App Engine 默认服务帐户”并添加“服务帐户令牌创建者”角色。单击“保存”即可。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

尝试在 Cloud Run 中使用 Google Cloud Storage 时调用者没有权限 的相关文章

随机推荐