Firebase可调用云功能,该客户端SDK需要有效的身份验证上下文进行身份验证和授权。但是同时,它作为HTTP终结点公开,因此可以被调用,但会收到未经授权的响应。 我的问题是,是否有一种方法可以完全限制对可调用云功能的公共访问?因为Firebase会根据功能执行来收取云功能。即使返回未经授权的响应,请求也已经传递给功能,因此在DDoS攻击期间这可能会成为问题。
答案 0 :(得分:1)
没有内置的支持,可以在对Cloud Function的请求到达您的代码之前拒绝该请求。如果您需要这种功能,请考虑在您的Cloud Functions之前设置Cloud Endpoint。
仅使用Cloud Functions可以做的最好的事情就是检查调用者是否被授权为函数代码中的第一件事,从而减少了该函数处于活动状态的时间。在这种情况下,您仍然需要为调用付费,但是您将使GB-秒和CPU-秒最小化。
答案 1 :(得分:0)
我尝试了@Frank的建议,建议使用google cloud run进行部署,并使用ESP容器来调用私有云功能。详细的概述在文档本身中进行了描述。
https://cloud.google.com/endpoints/docs/openapi/get-started-cloud-functions#deploy_endpoints_proxy
答案 2 :(得分:0)
在@Frank van Puffelen给出的答案上面是完美的,但是您可以利用Trik通过保护该路线来限制访问。这是示例,
const functions = require('firebase-functions');
exports.scheduleSampleJob = functions.https.onRequest((req , res) => {
let auth = req.header('Authorization');
if(auth == 'YOUR_API_AUTHORIZATION_KEY'){
// valid Authorization key, process the call
}else{
//send forbidden if Authorization key not valid
return res.status(403).send('Access is Forbidden');
}
});
现在,如果您要调用端点,则在请求中将需要一个 Authorization 标头,该标头具有您的秘密密钥。
由于firebase cloud功能也可以与firebase-auth一起使用,因此您可以创建自定义逻辑,以允许仅具有auth的用户访问,并限制公众访问(不包括应用程序的真实用户)。