【发布时间】:2020-05-31 14:53:27
【问题描述】:
我在 Docker 容器中有一个 Node.js 应用,我正尝试将它部署到 Google Cloud Run。
我希望我的应用能够读取/写入位于同一项目下的 GCS 存储桶中的文件,但我无法找到很多相关信息。
这是我迄今为止尝试过的:
1。希望它开箱即用
又名。在没有凭据的情况下进行初始化,例如在 App Engine 中。
const { Storage } = require('@google-cloud/storage');
// ...later in an async function
const storage = new Storage();
// This line throws the exception below
const [file] = await storage.bucket('mybucket')
.file('myfile.txt')
.download()
最后一行抛出这个异常
{ Error: Could not refresh access token: Unsuccessful response status code. Request failed with status code 500"
at Gaxios._request (/server/node_modules/gaxios/build/src/gaxios.js:85:23)
2。希望在将 Storage Admin IAM 角色设置为我的 Cloud Run 服务帐户后,它可以开箱即用。
不。和以前没有区别。
3。将我的凭据文件复制为cloudbuild.yaml 步骤:
...
- name: 'gcr.io/cloud-builders/gsutil'
args: ['cp', 'gs://top-secret-bucket/gcloud-prod-credentials.json', '/www/gcloud-prod-credentials.json']
...
它可以很好地复制文件,但是从我的应用程序中也看不到该文件。我仍然不确定它到底被复制到了哪里,但是从我的应用程序中列出 /www 目录并没有显示任何痕迹。
4。将我的凭据文件复制为 Docker 步骤
等等,但为此我需要验证 gsutil,为此我需要凭据。
所以...
如果不将凭据文件上传到版本控制,我有哪些选择?
【问题讨论】:
-
看这里...cloud.google.com/run/docs/securing/service-identity 我们被告知有“应用程序默认凭据”。您将哪些 GCS 角色分配给了哪些凭据以及效果如何?
-
这是一个示例,显示您的代码有助于获得答案。您如何在代码中设置凭据?
-
@John Hanley,我找不到将这些凭据提供给我的应用程序的方法(除了将它们推送到我们不想要的存储库之外)。我编辑了问题并添加了一个代码示例。我希望它有所帮助。
-
这似乎是故事的核心 ...cloud.google.com/run/docs/securing/service-identity ... 从这里我感觉到 [PROJECT-NUMBER]-compute@developer.gserviceaccount.com 是 Cloud Rub 的身份用于 ADC。
-
@Kolban 你是对的。我在之前的实验中禁用了我的 Compute Engine 默认服务帐户。我启用了它并确保为同一个帐户分配了“存储对象管理员”角色。之后,它按预期工作。谢谢!
标签: docker google-cloud-storage google-cloud-run google-container-registry