当前位置: 首页 > 知识库问答 >
问题:

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

汤飞
2023-03-14

我目前正在进行一个项目,该项目将自动设置一个新的Firebase/GCloud项目。它在很大程度上依赖于Firebase CLI和gcloud SDK,这些SDK具有几个强制步骤的用户凭据。

我现在正在尝试将这个项目移动到云运行的Docker容器中。我已经能够使用Firebase CLI的内置基于令牌的CI命令,使用用户凭据对其进行身份验证。

我想问一下是否可以使用类似的方法对gcloud SDK进行身份验证。

为什么服务帐户可能不起作用

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

    null

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

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

到目前为止的想法

  1. gCloud auth登录--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角色并升级/下载服务帐户
  4. 添加Google Analytics
  5. 添加云存储
  6. 创建新的云存储桶
  7. 添加Firestore本机模式
  8. 复制预定义的云函数和安全角色,并将它们部署到云中

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

共有1个答案

齐永昌
2023-03-14

我不确定你想实现的目标是否可能。即使黑客攻击是可能的,你也不知道有一天它会因为版本更新或API更改而被打破。

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

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

我不确定是否已经抓住了你所有的阻滞剂和问题,告诉我们更多,也许有好的变通方法!!

 类似资料:
  • 这是服务到服务身份验证中概述的规则的一个例外吗?该规则规定需要设置为接收服务的url(例如https://xxxxx.run.app)。和是一回事吗? 最后,除了使用googlecloudsdk(即imaging不存在)之外,是否还有其他方法使用用户帐户而不是服务帐户进行身份验证?

  • 这里是我的用例。 我已经在私有模式下部署了云运行服务。(与云函数相同的问题) 我正在开发一个使用云运行的新服务。我使用应用程序中的默认凭据进行身份验证。它在Compute Engine和Cloud Run上工作,因为默认凭据是从元数据服务器获得的。 但是,我不能使用我的用户帐户凭据。 日志跟踪在Java、Node或Go中非常清晰:不可能在用户凭据类型上生成标识令牌。 所以, null 爪哇 我做这

  • 警告:这是一篇非常长的帖子,仅仅是因为我不知道如何以其他方式解释我们的具体问题(抱歉)。 短版: 我们正在构建一个非常模块化的Java应用程序套件(客户端和服务器端)。一些客户端必须针对服务器进行身份验证,服务器可以针对不同类型的用户存储进行身份验证。服务器还可以代表其经过身份验证的用户调用其他服务器,即使用其凭据。到目前为止,使用简单的用户名/密码凭据可以很好地工作,但现在我们必须通过Kerbe

  • 我是Spring Security的新手,我做了以下教程:https://windoctor7.github.io/spring-jwt.html 但是我修改了一些数据库中搜索用户的代码,所以,我创建了一个@bean: 1部分,拦截呼叫。 我拦截“登录”并在数据库中搜索用户是否存在: } 用户是正确的,最后一行: 我在AbstractAuthenticationProcessingFilter中遇

  • 我想创建一个登录,用户只需输入他/她的邮件地址,并通过电子邮件进行验证。使用firebase,到目前为止我有这样的代码: > 当用户在将邮件放入字段中后单击按钮登录时。我尝试创建一个新帐户(密码是随机的,因为我不需要它)。如果它不存在,我会发送验证邮件。如果该帐户存在,我会与checkIfVerifiedUser核实用户是否通过单击邮件来验证该帐户。 这是我调用的方法: 问题是我要么firebas