使用服务帐户

时间:2016-02-18 10:35:26

标签: google-cloud-platform gcloud

我需要一个可以访问多个项目的服务帐户,但我根本找不到这样做的方法。似乎服务帐户始终绑定到项目。

另一种选择是在单独的项目上创建一个服务帐户,然后使用gcloud auth activate-service-account --key-file SOME_FILE.json对它们进行身份验证,但问题是,似乎无法自动创建服务帐户。

那么问题就在于:是否可以创建跨项目服务帐户或自动创建服务帐户?如果我能做到两件事,那就更好了

3 个答案:

答案 0 :(得分:35)

您应该可以将服务帐户添加到另一个项目中:

  1. 在云端控制台中的项目A中创建第一个服务帐户。使用gcloud auth activate-service-account激活它。

  2. 在云端控制台中,导航至项目B.找到" IAM&管理员" > " IAM"页。点击"添加"按钮。在"新成员"字段粘贴服务帐户的名称(它应该看起来像一个奇怪的电子邮件地址)并赋予它适当的角色。

  3. 运行gcloud命令,--project设置为项目B.他们应该成功(我只是手动验证这将有效)。

  4. 在我们完成所有安全后果之前,我们一直犹豫不决地自动创建服务帐户。

答案 1 :(得分:14)

我知道它有点旧,但如果有人还在寻找这个,要添加到@Zachary Newman回答,为了清楚起见,在项目A中创建服务帐户后,你应该将项目B转到“IAM”(不是“服务帐户”),您可以使用适当的角色添加刚刚创建的电子邮件。

答案 2 :(得分:3)

我已经确认自定义令牌签名可以与@Zachary Newman的过程一起使用。

我如何在项目A的GAE应用程序中创建可用于连接到项目B的Firestore的自定义令牌的具体过程如下:

  1. 在项目B的“ IAM”页面中,添加服务帐户{project-a}@appspot.gserviceaccount.com,这是项目A的GAE默认服务帐户。
  2. 在项目B的“ IAM”页面中,将“服务帐户令牌创建者”角色分配给{project-a}@appspot.gserviceaccount.com
  3. 在项目A中的GAE应用中调用Firebase Admin SDK initializeApp方法,并指定firebase-adminsdk-xxxxx@{project-b}.iam.gserviceaccount.com,这是项目B中项目“ Firebase Admin SDK管理员服务代理”的服务帐户,称为{{ 1}}和serviceAccountId设为https://{project-b}.firebaseio.com,然后创建自定义令牌。