【问题标题】:Create GCP and Firebase Project with Service Account Without Organization or Folder使用没有组织或文件夹的服务帐户创建 GCP 和 Firebase 项目
【发布时间】:2019-04-16 12:27:28
【问题描述】:

我需要使用 Google Cloud Platform (GCP) 服务帐户通过资源管理器 REST API 以编程方式创建项目。我想以无头方式创建 Firebase 项目。

我们当前的解决方案涉及模仿用户和浏览器来实现这一点,因为在没有组织(或文件夹,必须在组织下)的情况下,似乎无法通过 GCP 资源管理器 REST API 创建项目即服务帐户)。

当我尝试将项目创建为服务帐户时,我收到 403 Bad Request 响应,内容是“服务帐户无法在没有父级的情况下创建项目”。

尝试使用空父项创建项目即服务帐户会产生 400 错误请求响应,说“请求包含无效参数”。

尝试使用类型为“组织”且没有 Id 的父级创建项目即服务帐户会产生 400 错误请求响应,即“父级 ID 必须为数字”。

由于我没有组织(对 organizations.list 的调用返回 {})并且我无法在没有域的情况下创建组织,因此我不确定如何沿着这条路径前进。

【问题讨论】:

标签: firebase google-cloud-platform


【解决方案1】:

问:如何在没有 GCP 组织的情况下使用服务帐号以编程方式创建 Google Cloud Platform (GCP) 项目?

答:你不能。


实际的 gmail.com 用户可以在 No Organization 中创建项目,但 Service Account 必须指定 organizationfolder 作为 parent在项目创建时。

您当前以用户身份执行此操作的解决方案可能是唯一真正的解决方法。为此,您将使用 OAuth2 ClientIDSecret 为具有 https://www.googleapis.com/auth/cloud-platform 范围的用户获取 offline 凭据。然后,您可以使用该refresh_token 生成access_tokens,用于将Cloud Resource Manager API 调用到create projects

但是,我会为组织提出一个强有力的案例。如果您可以获得一个域,您可以使用该域来设置Cloud Identityget an Organization resource。然后,您可以在您的Organization 资源上授予Service Account Project Creator 角色,它将能够以编程方式创建项目。

这里的好处是您使用此服务帐户创建的所有项目都将在一个组织下,因此您可以轻松授予权限并管理所有项目在一个地方。一个新人加入您的团队,而不必一次授予他们访问您的每个 Firebase 或 GCP 项目的权限,您可以通过向组织资源添加一个权限来做到这一点。

更多:Granting, Changing, and Revoking Access to Resources

【讨论】:

  • 嗨@lukwam,非常有用的答案,但我仍然在努力解决一些问题:我正在尝试使用 projectCreator 角色在项目中创建一个服务帐户,但这是不可能的,因为它是一个组织范围的角色。无法在组织级别创建服务帐号,那么如何创建可以创建项目的服务帐号?
  • 这很简单。您无需在项目内授予权限,而是在服务账户设置下,只需在组织的 IAM 设置中使用服务账户的电子邮件地址,并在那里授予其项目创建者角色。您可以在您的组织中授予任何 Google 用户、组、域或服务帐户项目创建者角色。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-03-06
  • 1970-01-01
  • 2020-02-18
  • 2023-04-06
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多