我有一个Google Cloud项目,它有以下资源:
- App Engine标准环境,它承载前端(基本上是react-app)。
- 私有Google Cloud功能
现在,我考虑以下场景从react-app
调用函数- 设置
Allow only internal traffic
为云功能:只有App Engineflexible environments
可以调用该功能,因此排除 - 使用
CORS
认证:客户端仍然可以调用该函数 - 使云函数
public
:将允许每个人调用该函数,不建议用于私有API - 使用
Google Cloud API
调用函数:这将在前端暴露我的Google Cloud API密钥。
那么有没有办法从App Engine标准环境中调用Cloud函数
你不能用ingress = internal调用Cloud Functions(或Cloud Run),只能用App Engine。看我的答案在这里
为了保证云功能的安全,您可以依赖IAM服务。如果你的应用引擎服务调用你的云函数(我的意思是你的后端代码在应用引擎上运行,而不是在用户浏览器中运行的静态JS文件),你只能授予应用引擎服务帐户(你现在可以自定义服务帐户来运行你的应用引擎服务)调用云函数的权限。
当然,你的云功能是公开暴露的,但只有经过认证和授权的流量才会被路由到你的云功能。所有不良流量(来自互联网或其他未经授权的服务)将被GFE(谷歌前端)自动拒绝,然后调用您的云功能。因此,你将只支付有效的流量,所有的坏流量被丢弃的谷歌。
如果代码在用户浏览器上运行(因为你的App Engine只提供静态文件),你可以使用代理层来添加安全过滤,比如API Gateway。你可以看看这个答案