你能看到触发云功能的服务帐户吗?
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>"
并记录下来。任务完成!
我有一堆 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>"
并记录下来。任务完成!