你能看到触发云功能的服务帐户吗?

Can you see the service account that triggers a cloud function?

我有一堆 gcloud 和 firebase 预定义服务帐户,我必须知道哪个调用由云任务触发的云函数,以便我可以赋予云函数调用者角色。这可能吗,还是我必须生成一个新的服务帐户?

您应该能够指定 Cloud Tasks 在任务排队时用来调用的服务帐户(请参阅 these docs):

  {
    httpRequest: {
      httpMethod: 'POST',
      url,
      oidcToken: {
        serviceAccountEmail: '<your-sa>@<your-project>.iam.gserviceaccount.com',
      },
    },
  }

我找不到显示调用 Cloud Functions 的服务帐户的方法(尤其是审计日志),我打算为此打开一个功能请求。

无论如何,你至少可以在你的代码中实现这一点。请求通过身份验证后,您会收到此 header

Authorization: bearer <token header>.<token body>.SIGNATURE_REMOVED_BY_GOOGLE

如您所见,因为令牌已由 google 验证,并且为了防止以后任何可重用性,签名被编辑。但是,这不是重要的部分,只是不要尝试验证 JWT 令牌!

这里的想法是获取令牌 body(查看点 . 分隔)并以 base 64 对其进行解码。您将得到这样的 JSON

{
   "iss":"https://accounts.google.com",
   "azp":"32555940559.apps.googleusercontent.com",
   "aud":"32555940559.apps.googleusercontent.com",
   "sub":"109283856132013660815",
   "email":"<the email of the requester>",
   "email_verified":true,
   "at_hash":"S83kJm6cdV18gyelCPNoaA",
   "iat":1617349064,
   "exp":1617352664
}

获取此部分 "email":"<the email of the requester>" 并记录下来。任务完成!