使用服务帐户进行跨项目管理
Posted
技术标签:
【中文标题】使用服务帐户进行跨项目管理【英文标题】:Cross project management using service account 【发布时间】:2016-05-30 11:23:55 【问题描述】:我需要一个可以访问多个项目的服务帐户,但我根本找不到这样做的方法。似乎服务帐户始终绑定到项目。
另一种选择是在单独的项目上创建一个服务帐户,然后使用gcloud auth activate-service-account --key-file SOME_FILE.json
对其进行身份验证,但这里的问题是似乎无法自动创建服务帐户。
那么问题来了:是否可以创建跨项目服务帐户或自动创建服务帐户?如果我能两者都做就更好了
【问题讨论】:
【参考方案1】:您应该能够将服务帐户添加到另一个项目:
在 Cloud Console 中的项目 A 中创建第一个服务帐号。使用gcloud auth activate-service-account
激活它。
在 Cloud Console 中,导航到项目 B。找到“IAM 和管理员”>“IAM”页面。单击“添加”按钮。在“新成员”字段中粘贴服务帐户的名称(它应该看起来像一个奇怪的电子邮件地址)并为其赋予适当的角色。
运行gcloud
命令并将--project
设置为项目B。它们应该会成功(我只是手动验证了这将起作用)。
在我们能够解决所有安全后果之前,我们会犹豫是否要自动创建服务帐户。
【讨论】:
这是否适用于签名和解码令牌?我会认为键不同?我想让两个项目互相调用服务。 我也有同样的问题,这是否适用于令牌签名? 工作就像一个魅力!添加具有正确角色的新用户时,只需复制粘贴 SA 帐户(来自 OTHER 项目的长电子邮件外观)【参考方案2】:我知道它有点老了,但是如果有人还在寻找这个,添加到@Zachary Newman 的答案,为了清楚起见,在项目 A 中创建服务帐户后,你应该去项目 B 到“IAM ”(不是“服务帐户”),在那里您将能够添加您刚刚创建的具有适当角色的电子邮件。
【讨论】:
【参考方案3】:我已确认自定义令牌签名适用于 @Zachary Newman 的程序。
我如何在项目 A 中的 GAE 应用程序中创建自定义令牌,可用于连接到项目 B 的 Firestore 的具体过程如下:
-
在项目B的“IAM”页面,添加服务账号
project-a@appspot.gserviceaccount.com
,这是项目A的GAE默认服务账号。
在项目B的“IAM”页面中,将“Service Account Token Creator”角色分配给project-a@appspot.gserviceaccount.com
。
在项目 A 的 GAE 应用程序中调用 Firebase Admin SDK initializeApp
方法,并指定 firebase-adminsdk-xxxxx@project-b.iam.gserviceaccount.com
,这是项目 B 中具有“Firebase Admin SDK 管理员服务代理”的服务帐户,如 serviceAccountId
和 @987654326 @ as databaseURL
,然后创建自定义令牌。
【讨论】:
以上是关于使用服务帐户进行跨项目管理的主要内容,如果未能解决你的问题,请参考以下文章