node.js - 尝试在 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 SQL 客户端- 也许相关?我让 Cloud SQL 在已部署的环境中成功运行。
- 服务帐户用户- 需要用作服务帐户?
- Storage Object Creator - 我只需要从这个项目创建签名上传 url 的能力。
我还通过控制台将提到的服务帐户分配给 Cloud Run 实例。
只是为了确认,应用程序使用服务帐户 JSON 密钥在本地运行 100% 正确,只是在 Google Cloud 中运行时无法正常工作。
解决方案
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.
推荐阅读
- python - 接收文件并将它们保存在套接字 Python 上
- smt - 计算一个 Int Set 的总和
- c - fgets() 和 sscanf() 仅将第一个整数存储在数组中
- android - 如何使用 Android Room @Ignore Sqlite 实体列
- javascript - 反应输入 onchange 模拟不使用 Jest 和酶更新值
- python - 当 allure-results 有多个结果文件夹时,Allure-report 为空
- entity-framework - 删除的列和索引在迁移期间不断重新添加自身
- asp.net-mvc - Datepicker 不显示日期,它显示日期和时间
- postgresql - 无法使用 node-postgres 连接到 Cloud SQL
- asp.net - aspx TextBox 不显示 html 字符