当前位置:  开发笔记 > 运维 > 正文

公共ELB仅可从API网关访问

如何解决《公共ELB仅可从API网关访问》经验,为你挑选了1个好方法。

有没有办法限制我的ELB只接受来自API网关的调用?我假设如果可能的话,可以使用API​​网关的客户端证书来完成.

一般来说,我对任何替代解决方案持开放态度 我需要的是暴露1 api端点而不使我的EC2实例/ ELB完全公开.我希望只能通过API网关进行呼叫,我可以限制每秒的呼叫数量.



1> Michael - sq..:

您是正确的,API网关背面的客户端TLS(SSL)证书将是处理此问题的方法,但ELB当前在http模式下运行时不支持客户端证书.

AWS支持论坛帖子包括AWS人员,提及将此功能视为功能请求,但是:

不幸的是,目前我们无法为此提供ETA.

https://forums.aws.amazon.com/thread.jspa?threadID=58561&start=0&tstart=0

当然,如果ELB处于TCP模式而不是HTTP,那么您的Web服务器可以处理所有SSL,包括客户端证书验证,但TCP模式与ELB中的HTTP模式没有相同的优势.

我的解决方案是在单独的实例上运行HAProxy,执行与ELB相同的功能,包括SSL终止和客户端证书验证.该实例在端口443上向全世界开放,但只允许呈现API网关客户端证书的SSL连接继续协商SSL并发出实际的HTTP请求,该请求将传递到其中一个后端实例.

HAProxy是一些非常精简的代码,我在t2.micro实例上每天使用SSL处理数十万个请求.我还在新的t2.nano实例上成功测试了它,每台机器每月<5美元几乎是不费吹灰之力的,并且其中一些将很快在相对较低的流量系统上投入生产......密切关注您的信用余额,以便了解何时需要进行扩展.

如果希望ELB提供前端面向Internet的冗余,并且ELB和应用服务器之间有多个HAProxy实例,则还可以在启用代理协议的情况下,在TCP模式下将HAProxy实例置于ELB 后面.这是我常见的配置,因为HAProxy具有HTTP路由功能,允许根据每个请求选择后端服务器组,以便例如example.com/api可以在一组服务器上,并且example.com/blog可以是在不同的集合上,所有都在相同的域名下.(这也是集成S3内容而不存在跨源问题的可靠方法,因为代理可以将某些路径的请求转发到S3存储桶,例如).

当然,HAProxy还可以限制每秒请求数本身,以及允许的并发请求数,甚至可以将请求积压排队,一次一个地向后端服务器发送请求,作为其他请求完成并打开一个免费插槽.

推荐阅读
mobiledu2402851377
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有