限制对 SyncGateway 的 Admin REST API 的访问

Limit access to the Admin REST API of SyncGateway

根据 documentation,不应公开 SyncGatewayAdmin REST API

引用:

By default, the Admin REST API runs on port 4985 (unless you change the adminInterface configuration parameter). Do not expose this port—It belongs behind your firewall. Anyone who can reach this port has free access to and control over your databases and user accounts.

这是有道理的,但我想知道如何授予我的应用程序服务器,它在 Google AppEngine 上运行并且处理会话的注册/创建访问 API 而不会暴露它?是否有一个选项可以公开 Admin REST API 但限制对发送请求或需要用户名/密码组合的特定服务器的访问,例如 :8091 端口上的 GUI?

编辑

为了澄清起见,我在问题中添加了我的评论:

应用程序服务器(运行 在 GAE 上)和 Couchbase 服务器(运行 在 DigitalOcean 上)是两个不同的物理设备,因此具有不同的 IP 地址。意思是:我无法将 syncgateway_config.json 中的 adminInterface 配置参数更改为环回地址,因为从我的 GAE 服务器到 Couchbase 服务器的连接没有任何后的效果。如果我没记错的话,从外部无法访问服务器?!

建议将您需要的内容包装在身份验证服务中。此博客 post 很好地解释了如何执行此操作:http://ti.eng.br/configuring-your-very-first-couchbase-mobile-sync-backend/

好吧,您评论中的新信息需要解决。我不是这方面的专家,但我认为假设是同一台服务器上的身份验证服务和同步网关 运行。如果事情没有变得稍微复杂一些,但我认为通过将同步网关配置的 adminInterface 部分更改为内部 IP 地址和端口(例如 192.168.3.2:4985)可能是可行的。

您可以在与 Sync Gateway 相同的本地网络上安装 http 代理,例如nginx.

您可以将 nginx 配置为接受 public 面向使用客户端证书进行身份验证的 SSL 连接。

将 Sync Gateway 配置为仅接受来自与 nginx 共享的本地网络的管理员连接。

将您的 App Server 配置为在通过 nginx 连接到 Sync Gateway 时使用客户端证书。

这里有一篇介绍 nginx 客户端证书设置的好博客:http://nategood.com/client-side-certificate-authentication-in-ngi

通常的期望是您的数据库服务器和其他需要管理员级别访问权限的服务器将位于同一主机上,或者位于防火墙后面的内部网络上。在后一种情况下,您可以安全地将管理端口绑定到内部网络。当然,您的防火墙规则将只允许外部连接到同步网关 (SG) public 端口。

如果您的身份验证服务器位于完全不同的网络上,事情就会变得有点复杂。

一种可能性是在防火墙上使用更高级的选项,这样它就可以允许外部访问管理端口,但是只能来自外部身份验证服务器。我可以想象这样做的几种方法是(a)仅对 auth 服务器的 IP 地址进行硬编码,(b)使用带有客户端证书的 SSL 连接,或(c)打开从 auth 服务器到 SG 服务器的 SSH 隧道。

另一种可能性是使用像 OAuth 这样的分布式身份验证系统,它就是专门为做这种事情而设计的。因此,您的移动应用程序将与 auth 服务器通信以获取令牌,然后将令牌提交给 SG,然后 SG 将令牌显示给 auth 服务器以对其进行验证。 IIRC 我们在 SG 中还没有通用的 OAuth 支持,因此您需要在 SG 服务器上为 运行 编写一个小型 OAuth 处理程序来完成这项工作。

[免责声明:我是 Couchbase 的一名架构师,曾从事 Sync Gateway 方面的工作,但最近我只从事 Couchbase Lite 方面的工作,所以我不是 SG 当前功能的专家!]

文档中提到了这一点(如果我没看错的话)。在第 Administering the REST APIs 页的 管理 API 访问 部分。

引用包含回答您问题的部分:

The APIs are accessed on different TCP ports, which makes it easy to expose the Sync REST API on port 4984 to endpoints while keeping the Admin REST API on port 4985 secure behind your firewall.

If you want to change the ports, you can do that in the configuration file.

To change the Sync REST API port, set the interface property in the configuration file.

To change the Admin REST API port, set the adminInterface property in the configuration file.

The value of the property is a string consisting of a colon followed by a port number (for example, :4985). You can also prepend a host name or numeric IP address before the colon to bind only to the network interface with that address.

As a useful special case, the IP address 127.0.0.1 binds to the loopback interface, making the port unreachable from any other host. This is the default setting for the admin interface.

粗体字表示可以指定IPandPort绑定到特定网络。

我想这就是你需要的。