跨项目管理使用服务账户

64

我需要一个可以访问多个项目的服务账户,但我一直没有找到任何方法来实现这一点。似乎服务账户总是绑定到一个项目上。

另一个选项是在不同的项目中创建服务账户,然后使用gcloud auth activate-service-account --key-file SOME_FILE.json进行身份验证,但这里的问题是似乎无法自动化创建服务账户。

那么问题是:是否可以创建跨项目的服务账户或自动化服务账户的创建?更好的办法是两者都能做到。

3个回答

105
您应该能够将服务帐户添加到另一个项目中:
  1. 在Cloud Console中的项目A中创建第一个服务帐户。使用gcloud auth activate-service-account激活它。

  2. 在Cloud Console中,导航至项目B。找到“IAM和管理” > “IAM”页面。单击“添加”按钮。在“新成员”字段中粘贴服务帐户的名称(它看起来像一个奇怪的电子邮件地址),并给它适当的角色。

  3. 运行带有--project设置为项目B的gcloud命令。它们应该成功(我刚刚手动验证了这一点)。

我们不愿轻易自动创建服务帐户,直到我们能够解决所有安全问题。


3
这个能用于签名和解码令牌吗?我认为密钥不同?我想让两个项目相互调用服务。 - Ian
2
我有同样的问题,这个能用于令牌签名吗? - Paddie
2
像魔法般好用!添加新用户并赋予正确角色时,只需复制粘贴来自另一个项目的 SA 帐户(类似电子邮件的长字符串)即可。 - Mamun

37

我知道这可能有点过时了,但如果还有人在寻找这方面的信息,以下是对@Zachary Newman答案的补充。为了让事情清楚明白,在项目A中创建服务账号后,您应该进入项目B的“IAM”(而不是“服务账号”)页面,然后您就可以添加刚刚创建的电子邮件和相应的角色。


6
我已确认使用 @Zachary Newman 的方法成功创建自定义令牌签名。
以下是我在项目 A 中创建自定义令牌的具体步骤,以便用于连接项目 B 的 Firestore:
1. 在项目 B 的 "IAM" 页面中,添加服务帐户 {project-a}@appspot.gserviceaccount.com,这是项目 A 的默认 GAE 服务帐户。 2. 在项目 B 的 "IAM" 页面中,将 "Service Account Token Creator" 角色分配给 {project-a}@appspot.gserviceaccount.com。 3. 在项目 A 的 GAE 应用程序中调用 Firebase Admin SDK 的 initializeApp 方法,指定 firebase-adminsdk-xxxxx@{project-b}.iam.gserviceaccount.com 作为具有项目 B 中的 "Firebase Admin SDK Administrator Service Agent" 的服务帐户,并将 https://{project-b}.firebaseio.com 指定为 databaseURL,然后创建自定义令牌。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接