公共ELB仅可从API网关访问

时间:2016-01-07 05:32:54

标签: amazon-web-services amazon-elb aws-api-gateway

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

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

1 个答案:

答案 0 :(得分:7)

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

AWS支持论坛帖子包括AWS人员提及此功能作为功能请求的考虑因素,但是:

  

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

     

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

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

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

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

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

当然,HAProxy还可以限制每秒请求数本身,以及允许的并发请求数,甚至可以将积压的请求排入队列,一次一个地发布给后端服务器当其他请求完成并打开一个空闲插槽时。