如何安排经过身份验证的云功能的 http 调用?

Posted

技术标签:

【中文标题】如何安排经过身份验证的云功能的 http 调用?【英文标题】:How to schedule http invocation of authenticated cloud function? 【发布时间】:2020-02-08 02:28:00 【问题描述】:

我有一种不经常使用的云功能,它的冷启动延迟很慢。我想通过保持函数温暖来减少这种延迟。此函数通常仅由应用引擎应用调用,因此它具有限制 Cloud Invoker 权限。 Cloud Scheduler 似乎是 ping 函数以使其保持温暖的一个很好的候选者。似乎有必要直接调用该函数。尽管常见的约定是使用 pub/sub 来调度函数,但单个函数不能同时被 http 触发和 pubsub 触发。

我将我的 Cloud Scheduler 作业设置如下,但在运行时仍然出现 PERMISSION_DENIED 错误。是配置有问题,还是 Cloud Scheduler 无法直接通过 http 调用身份验证函数?一种怀疑是 Audience 参数实际上并不是 Cloud Functions 所期望的“target_audience”参数,而是标准的“aud”参数。

【问题讨论】:

【参考方案1】:

有几个潜在的问题需要调查:

1) 您是否拥有服务帐号的 iam.serviceAccounts.actAs 权限?

当 Cloud Scheduler 从服务帐户创建令牌时,它需要权限 iam.serviceAccounts.actAs。这是roles/iam.serviceAccountUser 的角色。将此角色添加到Cloud Scheduler Service Agent(注意“代理”一词)。

2) Cloud Run 是否允许此服务帐号权限?

除非您启用了allUsers,否则您需要将服务帐号添加到 Cloud Run。 这是在“权限”选项卡下的“显示信息面板”中。您也可以通过 CLI 使用 --service-account 命令行选项添加它。

【讨论】:

谢谢!要点 1 解决了这个问题。我没有意识到 Cloud Scheduler 也有自己的服务帐户需要配置。 顺便说一句,忽略我关于它不起作用的原始评论现在已被删除。我仍然失败,但没有深入查看日志,发现它不再是身份验证问题,而是我的函数需要的缺少查询字符串参数的 400。 只是一个更新,您不能再对 GCP 创建的角色添加特定权限。只能编辑自定义角色。 @DonnaldCucharo - 您的评论如何适用于我的回答? Google Cloud 从未支持编辑 Google Cloud 预配置角色。 @JohnHanley 您提到向 Cloud Scheduler 服务代理添加特定角色。你能澄清一下这是什么意思吗?我知道这个答案适用于 OP,但据我了解,您是在要求我们为角色添加一个角色(我觉得这有点令人困惑)。您的意思是在具有Cloud Scheduler Service Agent 角色的服务帐户上添加角色吗?

以上是关于如何安排经过身份验证的云功能的 http 调用?的主要内容,如果未能解决你的问题,请参考以下文章

调用经过用户身份验证的 http 触发器时发生错误

如何在 https 云功能中检查身份验证? [复制]

如何进行经过身份验证的服务调用

如何从 android 客户端进行经过身份验证的 django rest api 调用?

如何防止经过身份验证的用户欺骗 RESTful API 调用

如何在 .NET Core 中对 Spotify 进行经过身份验证的调用