【问题标题】:How do I configure the Service Account keys in a Cloud Run container?如何在 Cloud Run 容器中配置服务帐号密钥?
【发布时间】:2020-04-20 07:55:34
【问题描述】:

我在 Go 中创建了一个使用 Secrets Manager 的后端,并将其部署到 Cloud Run。问题是 Secret Manager api 需要一个 Service Account credential json file 来指向并且可以在我的本地机器上运行,因为我只是在 GOOGLE_APPLICATION_CREDENTIALS 环境变量中指定了文件路径,但是我在 Cloud Run 中没有同样的便利环境。可以这么说,我在 Cloud Run 上的后端将如何指定其 GOOGLE_APPLICATION_CREDENTIALS 环境变量?

【问题讨论】:

标签: google-cloud-platform google-cloud-run


【解决方案1】:

根据官方文档

Setting Up Authentication for Server to Server Production Applications

如果未设置环境变量,ADC 使用默认服务 Compute Engine、Google Kubernetes Engine、Cloud Run、App Engine 和 Cloud Functions 为在其上运行的应用程序提供 那些服务。

因此,要从 Cloud Run 访问 Secret Manager,应用程序默认凭据 (ADC) 将使用 Cloud Run 的默认服务帐户。

编辑

默认情况下,云运行使用compure engine service account PROJECT_NUMBER-compute@developer.gserviceaccount.com,它具有EDITOR 角色。您有 2 个选择,要么使用默认服务帐户,要么使用 a non default service account that you createdSecret Manager Admin 角色部署云运行。

【讨论】:

  • 就是这样。只需转到EDIT & DEPLOY NEW REVISION 并选择所有者作为服务帐户。
【解决方案2】:

除了@marian.vladoi 的出色回答,简而言之,要访问 GCP API(在您的情况下为 Secret Manager API),您需要做两件事:

  1. 使用 --service-account 选项(或 UI 等效项)使用特定服务帐户部署您的 Cloud Run 应用程序。

  2. 授予此服务帐户执行某项操作的权限(在本例中为访问机密)。

在 Cloud Run 容器(或 GKE 应用、Cloud Run 应用、Cloud Functions 应用等)内,您无需使用 GOOGLE_APPLICATION_CREDENTIALS 指定键。当您在任何 GCP 客户端库中的 Google Cloud 上运行时,会自动获取必要的凭据。

【讨论】:

  • 我将“Secret Manager Admin”角色添加到我的“@cloudbuild.gserviceaccount.com”服务帐户并部署了一个新容器。仍然收到Permission 'secretmanager.versions.access' denied for resource 'projects/my-project/secrets/API_KEY/versions/latest' (or it may not exist). 错误。
  • @cloudbuild.gserviceaccount.com 听起来不对。我不确定您为什么选择该帐户。那不是您拥有的帐户。谷歌搜索:create service account google cloud,请创建一个合适的新 svc 帐户。
猜你喜欢
  • 2021-03-04
  • 1970-01-01
  • 2022-08-17
  • 1970-01-01
  • 2021-02-15
  • 1970-01-01
  • 2020-05-18
  • 1970-01-01
相关资源
最近更新 更多