如何从谷歌应用引擎中触发HTTP云功能



我在谷歌应用引擎标准环境Python中有一个Flask应用程序,我还有一个带有HTTP触发器的云函数,它接受包括文件URL在内的JSON主体。CF在该URL下载文件,然后将其保存到GCS存储桶中。GAE服务帐户具有云函数调用程序权限,但当在我的GAE代码中使用urlfetch.fetch()来触发CF时,应用程序引擎代码会出现403 Forbidden错误,除非我让任何人都可以调用CF触发器。

如何在Python中从GAE成功调用/触发CF?我想答案是其中之一:

  1. 在GAE服务帐户上设置IAM权限以{在此处启发我}
  2. 像这样在urlfetch.fetch()中添加身份验证头{不同的启示}
  3. 使CF可以从任何地方触发,但硬编码一些密钥,以便CF代码本身处理身份验证

这里有很好的文档:云功能验证简而言之,您必须在身份验证标头中提供您的服务帐户凭据。

要获取凭据,请使用Google Auth客户端库。如果您是从本地进行测试,您应该创建一个服务帐户JSON并将其加载到环境变量GOOGLE_APPLICATION_CREDENTIALS中,但在应用程序引擎上,它将从头开始工作。

获得令牌后,将其作为auth头进行传递,如下所示:

auth_req = google.auth.transport.requests.Request()
auth_token = google.oauth2.id_token.fetch_id_token(auth_req, cloud_function_url)
response = requests.post(cloud_function_url, json=payload, headers={"Authorization" : f"Bearer {auth_token}"})

相关内容

  • 没有找到相关文章

最新更新