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

Cross project management using service account

我需要一个可以访问多个项目的服务帐户,但我一直无法找到实现此目的的方法。好像服务账号总是和项目绑定的。

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

那么问题来了:是否可以创建跨项目服务帐户或自动创建服务帐户?如果我能两者都做就更好了

您应该能够将服务帐户添加到另一个项目:

  1. 在 Cloud Console 中的项目 A 中创建第一个服务帐户。使用 gcloud auth activate-service-account.

  2. 激活它
  3. 在 Cloud Console 中,导航到项目 B。找到 "IAM & admin" > "IAM" 页面。单击 "Add" 按钮。在 "New members" 字段中粘贴服务帐户的名称(它应该看起来像一个奇怪的电子邮件地址)并为其赋予适当的角色。

  4. 运行 gcloud 命令 --project 设置为项目 B。它们应该会成功(我只是手动验证这会起作用)。

在解决所有安全问题之前,我们犹豫要不要自动创建服务帐户。

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

我已确认自定义令牌签名适用于@Zachary Newman 的程序。

我在项目A的GAE应用中创建自定义token用于连接项目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" 的服务帐户,如 serviceAccountIdhttps://{project-b}.firebaseio.com 作为 databaseURL,然后创建一个自定义令牌。