【发布时间】:2016-01-07 22:57:54
【问题描述】:
我目前正在开发一个服务应用程序,它可以从 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 服务器的情况下获得连接?
【问题讨论】:
标签: mongodb heroku ssh proxy outbound