onCall firebase云功能的CORS问题(GCP防火墙规则)
两年前,我部署了一个涉及多个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支持无法为我提供解决方案) 提前谢谢。不知道我是否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管理和功能版本等;然而,在重新部署这些函数之后,似乎只有那些带有数据库触发器