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

How to schedule http invocation of authenticated cloud function?

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

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

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

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

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

2) Cloud 运行 允许此服务帐户权限吗?

除非您启用了 allUsers,否则您需要将服务帐户添加到 Cloud 运行。 这是在 "Permissions" 选项卡下的 "Show Info Panel" 中。您还可以使用 --service-account 命令行选项通过 CLI 添加它。