使用用户凭据在 Cloud 运行 中验证 gcloud SDK

Authenticating gcloud SDK in Cloud Run with user credentials

我目前正在开发一个将自动设置新 Firebase/Gcloud 项目的项目。它在很大程度上依赖于 Firebase CLI and gcloud SDK 和几个强制性步骤的用户凭据。

我现在正尝试将此项目移动到云 运行 上的 Docker 容器中。我已经能够使用他们的 built-in token-based CI command.

使用用户凭据对 Firebase CLI 进行身份验证

请问是否可以使用类似的方法验证gcloud SDK。

为什么服务帐户可能无法使用

我意识到像这样的服务到服务程序应该使用服务帐户进行身份验证。然而,在我的例子中,程序的流程是这样的:

  1. 使用 Firebase CLI 创建一个新的 gcloud/firebase 项目
  2. 使用 gcloud SDK 为新项目添加 IAM 绑定、启用 API、计费等

我无法使用服务帐户对步骤 2 中的请求进行身份验证,因为该项目刚刚创建,因此我还没有机会授予任何服务帐户编辑它或下载该项目的权限密钥文件。这就是为什么我想使用代表用户凭据的令牌进行身份验证。

默认情况下,云 运行 环境实际上可以访问托管容器的项目的服务帐户。由于此服务帐号没有编辑新建项目的权限,因此使用它进行身份验证是没有意义的。

到目前为止的想法

  1. gcloud auth login --no-launch-browser - 需要用户交互,并且每个登录会话提供的密钥似乎是唯一的
  2. 由于 Firebase CLI 使用用户凭据进行身份验证,也许有一种方法可以使用它来对 gcloud SDK 进行身份验证?
  3. 是否可以让服务帐户继承用户的所有权限?我见过几个这样的例子,但它们只适用于每个项目级别。我意识到这个解决方案是多么不合时宜。
  4. gcloud SDK 似乎将用户凭据保存在 /root/.config/gcloud 文件夹中。在设置我的 Docker-container 时,我违背了所有合理的逻辑并复制了这个文件夹。这实际上有效,当我 运行 它在本地 Docker 容器上,但是当我 运行 它在云 运行 上时,默认服务帐户似乎覆盖所有其他凭据。本地 Docker 容器可以访问复制的配置,但即使文件复制成功,gcloud SDK 似乎无法识别它们。

编辑: 我的意图是让不太精通技术的大学通过单击按钮创建一个具有大量预定义设置的新 Firebase 项目。这包括以下步骤:

  1. 设置一个新的 Firebase 项目(自动设置一个新的 Google Cloud 项目)
  2. 启用计费
  3. 设置用户 IAM 角色和 upgrade/download 服务帐户
  4. 添加Google 分析
  5. 添加云存储
  6. 创建新的云存储桶
  7. 添加 Firestore 本机模式
  8. 复制预定义的云功能和安全角色并将它们部署到云端

创建的 Google 云项目必须是我们 Google 云组织的一部分。项目的所有者并不重要,因为我在创建后手动设置了 IAM 角色。

以上所有步骤都适用于我的本地系统,当我使用想法 #4 时,它们也适用于 Cloud 运行 之外的通用 docker 容器。我正在处理的问题是验证 step #2 and step #3 的请求。由于这两个请求都处理新创建的项目,因此 Cloud 运行 的默认服务身份目前无法拥有验证这些请求所需的角色。这就是为什么我正在寻找一种方法来通过 Firebase CLI 在步骤 #1 中使用的相同用户凭据进行身份验证,因为默认情况下这些凭据将具有所有者权限。

我不确定您想要实现的目标是否可行。即使有可能被破解,你也不知道是否有一天它会因为版本更新或 API 更改而被破坏。

此外,在 VM 上将个人帐户用于应用 运行 并不是一个好主意。该日志将跟踪您作为用户而不是应用程序身份(服务帐户)。您的个人操作(在您的计算机上和您对云的访问)和应用程序操作(代表您执行的操作)是什么?

如果您关心的是部署,您可以查看 terraform,或者您甚至可以编写自己的部署脚本。

我不确定是否已经捕获了您所有的阻碍和问题,请告诉我们更多信息,也许有好的解决方法!!