首页 文章

公共ELB仅可从API网关访问

提问于
浏览
5

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

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

1 回答

  • 7

    在http模式下运行时,'re correct, a client TLS (SSL) certificate on the back-side of API gateway would be the way to handle this, but ELB doesn' t目前支持客户端证书 .

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

相关问题