我目前正在开发一个服务应用程序,它从 Mongo 中提取数据并将其返回给消费者。涉及到一层身份验证,我使用 Heroku 来托管服务。Mongo 托管在 MongoLabs 上,但存在一些重大的性能问题,因此我们已将 Mongo 托管在我们的其中一台云服务器上。我们希望能够使用防火墙保护对 Mongo 的访问,将 Heroku 上服务应用程序的 IP 地址列入白名单。
这有几个问题。
问题
好吧,至少这些是主要的......
- Heroku 在提供一些不错的功能(例如轻松管理集群设置、软件升级等)的同时,还从池中提取 IP 地址。虽然应用程序 url 的 dns 值可能不会改变,但底层 IP 地址可以并且将会改变。
- 为了更好地保护,
mongo-server01
放置在防火墙后面,需要使用静态 IP 地址添加规则以允许访问。
由于 Heroku 无法提供静态 IP 地址,因此我们需要考虑 Heroku 如何访问的选项,mongo-server01
同时仍保护其托管的数据。
出站请求的静态 IP 地址
似乎有几个选择,特别是对于 Heroku。 Fixie和QuotaGuard Static似乎都提供了该功能,但它们似乎仅适用于 HTTP 和 HTTPS 通信(甚至可能不是 HTTPS)。
Mongo 不使用 HTTP,它在端口 27017 上使用自己的网络协议,默认情况下 https://groups.google.com/forum/embed/#!topic/mongodb-user/eX_RIv2cZVw
这是否意味着这些代理不适用于对 Mongo 的调用?从理论上讲,代理仅用于 HTTP 或 HTTPS 请求似乎没有任何理由。话虽如此,似乎没有任何方法可以进入这些 Heroku 插件并将代理配置为使用不同的端口或处理 Mongo 的特定协议。
如果我们可以进入代理,也许我们可以放置一组额外的 ssh 密钥,以便 ssl 隧道链可以继续到mongo-server01
. 但是没有任何方法可以通过 ssh 连接到这些代理或通过插件仪表板访问配置。
问题(终于!)
如何从 Heroku 连接到防火墙主机以从 MongoDb 获取数据?是否有可用于实现此目的的代理?
简单的方法。不会工作,因为 Heroku 应用程序不使用静态 IP 地址。
使用代理。Heroku 代理插件不知道如何代理mongodb
协议。无法在代理上安装 ssh 密钥以进行 ssh 隧道。
在不向世界开放 Mongo 服务器的情况下,如何获得连接?