【问题标题】:How to authenticate to Cloud Storage from a Docker app on Cloud Run如何从 Cloud Run 上的 Docker 应用向 Cloud Storage 进行身份验证
【发布时间】: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


【解决方案1】:

这就是我设法使它工作的方法:

  • 初始化客户端库的代码是正确的。与原始问题相比,这里没有任何变化。如果 GCS 存储桶与您的 Cloud Run 服务属于同一项目,则您无需加载任何凭据。
  • 我了解到服务帐户 [myprojectid]-compute@developer.gserviceaccount.com(又名“Compute Engine 默认服务帐户”)是默认用于运行 Cloud Run 服务的帐户,除非您指定其他帐户。
  • 我访问了Service Accounts 页面并确保上述服务帐户已启用(我的未启用,这是我所缺少的)。
  • 然后我去了here,编辑了上述服务帐户的权限并添加了存储对象管理员角色。

有关本文的更多信息:https://cloud.google.com/run/docs/securing/service-identity

【讨论】:

    【解决方案2】:

    我认为正确的方法是更改​​为具有所需权限的自定义服务帐户。部署新修订时,您可以在“安全”选项卡下执行此操作。

    【讨论】:

      猜你喜欢
      • 2020-07-22
      • 2020-01-24
      • 1970-01-01
      • 2019-10-30
      • 2019-12-31
      • 2011-12-25
      • 1970-01-01
      • 2019-11-12
      • 2014-10-30
      相关资源
      最近更新 更多