使用服务帐户进行跨项目管理

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,然后创建自定义令牌。

【讨论】:

以上是关于使用服务帐户进行跨项目管理的主要内容,如果未能解决你的问题,请参考以下文章

使用多个 Google Analytics 帐户进行跨子域跟踪。

如何使用服务帐户在 gcp 中设置正确的 iam 策略

如何跨子域进行身份验证

微服务架构:跨服务数据共享

怎么把本地账户设为管理员账户?

有没有办法在 Google Cloud Platform 中对服务帐户进行分组?