我有一堆gcloud和firebase预定义的服务帐户,我必须知道哪一个调用由云任务触发的云函数,这样我才能赋予云函数调用程序角色。这可能吗?还是我必须生成一个新的服务帐户?
您应该能够指定云任务在排队任务时用于调用的服务帐户(请参阅这些文档(:
{
httpRequest: {
httpMethod: 'POST',
url,
oidcToken: {
serviceAccountEmail: '<your-sa>@<your-project>.iam.gserviceaccount.com',
},
},
}
我没有找到显示调用云函数的服务帐户的方法(尤其是使用审计日志(,我将为此打开一个功能请求。
无论如何,您至少可以在代码中实现这一点。当请求经过身份验证时,您收到了此标头
Authorization: bearer <token header>.<token body>.SIGNATURE_REMOVED_BY_GOOGLE
正如您所看到的,因为令牌已经过谷歌的验证,并且为了防止以后的任何可重用性,签名被编辑。但是,这并不是重要的部分,只是不要尝试验证JWT令牌!
这里的想法是获得Token主体(查看点.
分隔(,并在基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>"
并将其记录下来。工作完成!