我需要一个可以访问多个项目的服务账户,但我一直没有找到任何方法来实现这一点。似乎服务账户总是绑定到一个项目上。
另一个选项是在不同的项目中创建服务账户,然后使用gcloud auth activate-service-account --key-file SOME_FILE.json
进行身份验证,但这里的问题是似乎无法自动化创建服务账户。
那么问题是:是否可以创建跨项目的服务账户或自动化服务账户的创建?更好的办法是两者都能做到。
我需要一个可以访问多个项目的服务账户,但我一直没有找到任何方法来实现这一点。似乎服务账户总是绑定到一个项目上。
另一个选项是在不同的项目中创建服务账户,然后使用gcloud auth activate-service-account --key-file SOME_FILE.json
进行身份验证,但这里的问题是似乎无法自动化创建服务账户。
那么问题是:是否可以创建跨项目的服务账户或自动化服务账户的创建?更好的办法是两者都能做到。
在Cloud Console中的项目A中创建第一个服务帐户。使用gcloud auth activate-service-account
激活它。
在Cloud Console中,导航至项目B。找到“IAM和管理” > “IAM”页面。单击“添加”按钮。在“新成员”字段中粘贴服务帐户的名称(它看起来像一个奇怪的电子邮件地址),并给它适当的角色。
运行带有--project
设置为项目B的gcloud
命令。它们应该成功(我刚刚手动验证了这一点)。
我们不愿轻易自动创建服务帐户,直到我们能够解决所有安全问题。
我知道这可能有点过时了,但如果还有人在寻找这方面的信息,以下是对@Zachary Newman答案的补充。为了让事情清楚明白,在项目A中创建服务账号后,您应该进入项目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
,然后创建自定义令牌。