如何在使用第三方API时解决IP白名单问题?

我们使用API​​将拒绝请求的服务,除非源IP先前已被列入白名单。 他们只给我们3个插槽,这是一个问题,因为我们有超过3台机器需要使用API​​。

解决此问题最常用的技术是什么?

注意:我没有试图针对第三方API的条款和条件做任何事情。 我们正在使用ResellerClub ,我联系他们要求更多的插槽,但他们回答:

我请求你把你的服务器路由到一些IP地址。

因此,这个问题。


思考:

  • 我认为我们可以通过运行一种代理作为一个中间人来解决问题。 我们没有向第三方发送API请求,而是向第三方发送请求,这样所有的请求似乎都来自于他们眼中的一个IP。 有没有共同的软件做这种事情? 这样做似乎比下面的想法更简单,但我错了吗?
  • 正在使用“一个NAT实例”,我应该看看? 例如http://docs.aws.amazon.com/AmazonVPC/latest/UserGuide/VPC_NAT_Instance.html 。 看起来很复杂 – 有没有更简单的解决scheme? (运行额外的networking复杂性的额外实例是一个耻辱)。
  • 由于我们使用Docker, Weave是否可以相关?
  • 我们可以附加一个静态IP到VPC网关吗? 我看到使用AWS Storage Gateway( 源代码 )是可能的 – 虽然不知道常规的vpc igw吗?

我们的体系结构:我们使用AWS,并将我们的实例放在ELB后面运行的VPC中。 我们经常在不知道IP地址的情况下提出新的实例。 我们在所有机器上运行相同的软件。 机器运行CoreOS,我们的应用程序在Docker容器中运行。

一个相当普遍的基础结构是没有一个实际的应用服务器具有公共的IPv4 IP地址,它们将位于负载平衡器后面的RFC 1918专用networking范围内,并且他们做出的任何传出请求是:

  • 通过NAT网关路由,performance为单个源IP地址
  • 必须通过一个代理服务器进行,​​这个代理服务器在私有IP范围和更大的互联网之间架起了桥梁

我想我会发布一个更新,因为项目现在已经成功完成使用NAT实例。

正在使用“一个NAT实例”,我应该看看? 看起来很复杂 – 有没有更简单的解决scheme?

现在NAT实例全部build立起来了,最初的复杂感已经过去了,实际上感觉很简单 – 甚至比以前更干净(因为被迫使用私有子网是安全性的提升)。

来自AWS的官方NAT实例设置说明运行良好: http : //docs.aws.amazon.com/AmazonVPC/latest/UserGuide/VPC_NAT_Instance.html 。 我们使用Amazon提供的AMI来启动NAT实例。 经历了这个过程之后,我意识到它是如何“行业标准”,甚至可能是“最佳实践”。

缺点:

  1. NAT实例成为单点故障。 由于所有来自我们的networking服务器的外部stream量都是通过它传递的,如果它失败,实例将无法到达互联网接收软件更新,调用外部API(如支付网关),我们将无法SSH实例。
  2. 运行额外的机器要花钱,而且要维护更多。 ( t2.small不是很贵,而且库存AMI不需要修改,所以不是很大的维护负担)。
  3. 这些实例将具有较慢的外部networking连接。 (到目前为止,我还没有注意到这个差别)。
  4. 我们不能直接SSH到实例中,我们需要通过NAT实例(使用SSH代理)。 这听起来比现在更糟糕。 如果您花费几分钟编辑.ssh/config并在“ ProxyCommand ”上阅读,您可以使事情100%透明,这样只需使用ssh server1即可。
  5. 我们不能再通过使用公共IP(或者为特定的机器提供DNSlogging)来testing集群内的某个特定服务器。 这是你快速解决的问题。 一个解决方法,如果你真的需要确保你打一台机器是创build一个新的ELB,只把你想要的目标机器到实例池。