如何限制 Lambda 函数仅响应特定来源?

Posted

技术标签:

【中文标题】如何限制 Lambda 函数仅响应特定来源?【英文标题】:How to restrict a Lambda function to respond only to specific origins? 【发布时间】:2017-11-28 22:40:44 【问题描述】:

我想限制我的 Lambda 函数(使用无服务器框架工具创建)只接受来自 abc.comdef.com 的请求。它应该拒绝所有其他请求。我怎样才能做到这一点?我尝试像这样设置访问控制来源:

cors: true
response:
  headers:
    Access-Control-Allow-Origin: "'beta.leafycode.com leafycode.com'"

在处理程序中像这样:

headers: 
  "Access-Control-Allow-Origin" : "beta.leafycode.com leafycode.com"
,

但没有任何效果。知道为什么吗?

【问题讨论】:

【参考方案1】:

您的代码的问题是Access-Control-Allow-Origin doesn't accept multiple domains。

来自this answer:

听起来推荐的方法是让您的服务器读取 来自客户端的 Origin 标头,将其与域列表进行比较 您想允许,如果匹配,则回显 Origin 的值 标头作为 Access-Control-Allow-Origin 标头返回给客户端 回应。

因此,当编写对 OPTIONS 动词的支持时,即浏览器将预检请求以查看是否支持 CORS 的动词时,您需要编写 Lambda 代码来检查 event 对象以查看客户端并动态设置与域对应的Access-Control-Allow-Origin

在您的问题中,您使用了两种不同类型的 CORS 配置:Lambda 和 Lamba-Proxy。我建议您使用第二个选项,这样您就可以动态设置域。

headers: 
  "Access-Control-Allow-Origin" : myDomainValue
,

在无服务器框架here 中查看有关 CORS 配置的更多信息。

【讨论】:

嗨,我只是尝试了一个域,但它并没有限制请求。 @THpubs,如果您按照我的建议在处理程序中设置标头,请确保您不要在您的integration: lambda 中选择@987654329 @ 文件。如果还是不行,我建议你创建一个新的 hello-world 项目来测试这个特性,这样我们就可以消除另一个错误配置。 非常感谢它成功了!删除集成解决了这个问题。

以上是关于如何限制 Lambda 函数仅响应特定来源?的主要内容,如果未能解决你的问题,请参考以下文章

如何限制 serverless lambda 函数

将 aws 资源限制为特定的 ecs 集群

如何限制特定 API 网关路由的有效负载大小

如何限制 dnsmasq 仅回复特定的客户端 DNS 请求?

限制函数参数以允许特定值

我可以限制 AWS Lambda 的并发调用吗?