云函数返回403响应



我将其中一个云功能的连接设置更改为'只允许内部流量'设置。

我有我的nodejs应用程序在同一项目中运行,与我的云功能相同的区域。我删除了'allUser'从我的云功能访问并添加My-PROJECT-ID@appspot.gserviceaccount.com作为我的云函数的调用者

但我现在得到403错误,当我从我的nodejs应用程序调用函数。我能做些什么来解决这个问题?

我遵循这个指导:这里

------------------ 更新 ----------------

非常感谢下面的解释。现在已经开始说得通了。现在我的设置如下:

云功能端:

  1. 我添加了My-PROJECT-ID@appspot.gserviceaccount.com
  2. 删除'allUsers'作为函数调用器。
  3. 在变量,网络和高级设置下,我点击了"只允许内部流量",然后在出口设置下我已经添加了前面使用IP 10.8.0.0创建的连接器。我以以下格式添加了连接器:projects/PROJECT_ID/locations/REGION/connectors/CONNECTOR_NAME选择路由所有流量通过VPC连接器

App Engine (NODE js) side:

当函数公开可用时,我调用它时,使用的是给定的主机名。现在我的POST请求如下所示:

const optionsCFS = {
hostname: "10.8.0.0",//process.env.CLOUD_URL,
port: 443, //(tried 28 as well)
timeout: 5000,
path: process.env.CLOUD_ORDER_SAVE_PATH, // remaining path
method: 'POST',
headers: {
'Content-Type': 'application/application-json',
'Content-Length': CFSdata.length,
//'charset': 'utf-8'
}
}
console.log('Going to call CF ')
const orderReq = https.request(optionsCFS, resCFServer => 
{ // Do something })

I get Error 502 - Bad Gateway.

当您将流量设置为仅限内部时,您对云功能(或云运行,这是相同的行为)说:

  • 嘿,只接受来自VPC的流量

但是,你没有说:

  • 嘿,让我的服务只能通过私有IP访问,不再通过公共IP访问

差异很重要,因为即使您将云功能(或云运行)设置为进入模式Allow internal traffic only,服务仍然暴露在互联网上,仍然可以公开访问,但是服务前面的网关(我猜是GFE, Google前端)执行额外的检查:"您来自VPC吗?">

此检查基于仅存在于内部谷歌网络的流量元数据(这也意味着流量留在谷歌云主干,以保留这些元数据)。


所以,我继续我的解释....当将无服务器VPC连接器配置为App Engine时,只能将私有流量路由到VPC连接器,符合RFC 1918。

然而,正如解释的那样,云功能和云运行服务是在互联网上可访问的,而不是在私有IP上(符合RFC 1918)。因此,您的应用程序引擎流量不会通过无服务器VPC连接器,并且不能被接受为"内部"。

入口检查时的流量。

在Cloud Functions和Cloud Run中,可以设置vpc-egress的值为private-ranges-only(与App Engine的默认行为类似,只路由rfc1918范围内的ip)或all。你需要使用这个最新的模式来调用Cloud Functions或Cloud Run中的内部服务。

相关内容

  • 没有找到相关文章

最新更新