限制对SyncGateway的Admin REST API的访问

use*_*815 5 google-app-engine couchbase couchbase-lite couchbase-sync-gateway

根据该文件管理REST APISyncGateway不应该暴露.

引用:

默认情况下,Admin REST API在端口4985上运行(除非您更改adminInterface配置参数).不要暴露此端口 - 它属于防火墙.任何能够访问此端口的人都可以免费访问和控制您的数据库和用户帐户.

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

编辑

只是为了澄清我在评论中添加我的评论:

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

Jen*_*fke 4

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

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

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

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

[免责声明:我是 Couchbase 的架构师,曾参与 Sync Gateway 的工作,但这些天我只在 Couchbase Lite 上工作,所以我不是 SG 当前功能的专家!]