如何安排经过身份验证的云功能的 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 调用?的主要内容,如果未能解决你的问题,请参考以下文章
如何从 android 客户端进行经过身份验证的 django rest api 调用?