Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/firebase/6.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
onCall firebase云功能的CORS问题(GCP防火墙规则)_Firebase_Google Cloud Platform_Google Cloud Functions - Fatal编程技术网

onCall firebase云功能的CORS问题(GCP防火墙规则)

onCall firebase云功能的CORS问题(GCP防火墙规则),firebase,google-cloud-platform,google-cloud-functions,Firebase,Google Cloud Platform,Google Cloud Functions,两年前,我部署了一个涉及多个firebase云函数的项目,其中一些函数是通过使用数据库触发器调用的,还有3个是通过使用“functions.https.onCall…”触发器(“callable”函数)调用的 部署后,一切都很顺利,但在2019年10月左右,我不得不放弃该项目,并没有继续维护它 目前,我对让网站重新全面运行很感兴趣,因此我遵循了收到的电子邮件中列出的所有必要步骤,如更新node.js版本、firebase管理和功能版本等;然而,在重新部署这些函数之后,似乎只有那些带有数据库触发器

两年前,我部署了一个涉及多个firebase云函数的项目,其中一些函数是通过使用数据库触发器调用的,还有3个是通过使用“functions.https.onCall…”触发器(“callable”函数)调用的

部署后,一切都很顺利,但在2019年10月左右,我不得不放弃该项目,并没有继续维护它

目前,我对让网站重新全面运行很感兴趣,因此我遵循了收到的电子邮件中列出的所有必要步骤,如更新node.js版本、firebase管理和功能版本等;然而,在重新部署这些函数之后,似乎只有那些带有数据库触发器的函数才能工作。 (请注意,这些函数从工作时起没有进行任何修改。)

对于不起作用的功能,我在浏览器控制台上遇到的错误是:

CORS策略已阻止从源“https://….com”获取“https://…./functionName”的访问:请求的资源上不存在“Access Control Allow origin”标头。如果不透明响应满足您的需要,请将请求的模式设置为“no cors”,以获取禁用cors的资源

在对我的步骤进行了一些测试和追溯之后,我已经能够准确地指出问题所在,但是,我还无法完全解决它。

基本上,我注意到,自从我第一次部署该项目以来,GCP上的权限处理方式已经发生了变化,例如,我现在必须添加防火墙规则,以便能够运行我以前使用的实例,而不必这样做。因此,我突然想到,很可能是防火墙本身阻止函数连接到GCP上的虚拟机实例,从而阻止函数运行时的完成,并导致错误

因此,我决定通过授予对实例的开放访问权来测试这一点,方法是指定0.0.0.0/0作为与虚拟机相关的目标标记入口的源IP范围,之后,所有功能都再次完全运行。

问题是,出于显而易见的原因,我真的不想保留对实例的开放访问,但我无法通过任何其他方法建立成功的连接

我阅读了以下几页:

访问控制:

配置网络设置:

云功能IAM角色:

此外:

而且,根据我收集的信息,我正在寻找的是设置防火墙规则,以便与应用程序相关的服务帐户启用权限。但是,我还没有做到这一点,因为:

•首先,在防火墙规则详细信息上选择“指定的目标标记”(就像我对IP范围所做的那样)将禁用“服务帐户”作为源过滤器

•将“网络中的所有实例”设置为目标,“服务帐户”设置为源过滤器,“应用引擎默认服务帐户”(…@appspot.gserviceaccount.com)或“firebase adminsdk”(firebase adminsdk-…@…iam.gserviceaccount.com)设置为“源服务帐户”;未授予必要的权限,因为功能恢复不工作。 对于最后一个选项,我甚至遵循以下步骤: 对于项目运行时服务帐户:..。@appspot.gserviceaccount.com;但一切都没有改变

•最后,选择其他可用选项作为“源服务帐户”(计算引擎默认服务帐户)也无法启用连接

总而言之:解决问题的唯一必要步骤是找到一种方法,我可以从firebase云功能调用GCP中的VM,而不授予访问所有IP的权限;只是功能(因此我假设与管理员帐户相关?)。

此外,以防万一:

检查firebase控制台设置后,我注意到出现以下警告: “您的项目缺少用于firebase管理SDK的服务帐户” (尽管在最初的项目部署期间创建了一个,但我将其称为firebase adminsdk-A@proyect.iam.gserviceaccount.com)

因此,我完成了创建一个新的程序:firebase adminsdk-B@proyect.iam.gserviceaccount.com,并向函数添加密钥,但是,此新帐户也不会授予防火墙上的必要权限。 此外,我现在在防火墙选项中的“firebase adminsdk”下有2个firebase服务帐户:

firebase adminsdk-A@proyect.iam.gserviceaccount.com

firebase adminsdk-B@proyect.iam.gserviceaccount.com

所有这些都不能在被选中时解决CORS问题

我不知道是不是因为firebase控制台上没有检测到第一个服务帐户导致了这个问题

最后,如果这是相关的:

我在网上找到了一些解决方案,比如检查“云函数调用器”的云函数控制台上的函数的所有权限是否设置为allUsers,以及重新部署所有函数;但这没什么区别

() ()

此外,阅读后:

“警告:使用低于7.7.0版的Firebase CLI部署的新HTTP和HTTP可调用函数默认为私有函数,在调用时会抛出HTTP 403错误。请明确公开这些函数,或在部署任何新函数之前更新Firebase CLI。”

我将Firebase CLI更新为最新版本,并再次重新部署了所有功能

很抱歉,文字墙,但我想尽可能彻底,因为这似乎是一个相当具体的问题。(Firebase支持无法为我提供解决方案)

提前谢谢。

不知道我是否