Ограничить доступ к API администратора REST SyncGateway

В соответствии с документацией Admin REST API SyncGateway не должен быть разоблачен

Цитата:

По умолчанию API REST администратора работает на порте 4985 (если вы не измените параметр конфигурации adminInterface). Не открывайте этот порт - он находится за брандмауэром. Любой, кто сможет получить доступ к этому порту, имеет свободный доступ и контроль над вашими базами данных и учетными записями пользователей.

Это имеет смысл, но мне интересно, как я могу предоставить моему Серверу приложений, который работает в Google AppEngine и который обрабатывает регистрацию / создание сеансов, доступ к API, не раскрывая его? Есть ли возможность выставить Admin REST API, но ограничить доступ к определенному серверу, отправляющему запрос или требующему сочетания имени пользователя и пароля, такого как GUI на :8091 порт?

редактировать

Просто для пояснения я добавляю свой комментарий к вопросу:

Сервер приложений (работающий на GAE) и сервер Couchbase (работающий на DigitalOcean) являются двумя разными физическими устройствами и, следовательно, имеют разные IP-адреса. Означает: я не могу изменить параметр конфигурации adminInterface в моем syncgateway_config.json на адрес обратной связи, так как соединение с моим GAE-сервером на Couchbase-сервере впоследствии не будет иметь никакого эффекта. Сервер был бы недоступен извне, если я не ошибаюсь?!

5 ответов

Решение

Обычно ожидается, что ваш сервер базы данных и другие серверы, которым необходим доступ на уровне администратора, будут находиться либо на том же хосте, либо во внутренней сети, которая находится за брандмауэром. В последнем случае вы можете безопасно привязать порт администратора к внутренней сети. Тогда, конечно, ваши правила брандмауэра будут разрешать внешние подключения только к общему порту Sync Gateway (SG).

Если у вас есть сервер авторизации, который находится в совершенно другой сети, все становится немного сложнее.

Одна из возможностей - использовать более интересные опции на брандмауэре, чтобы он мог разрешить внешний доступ к порту администратора, но только с внешнего сервера аутентификации. Я могу себе представить, что это можно сделать несколькими способами: (а) жестко закодировать только IP-адрес сервера аутентификации, (б) использовать SSL-соединение с клиентским сертификатом или (в) открыть SSH-туннель от сервера аутентификации к серверу SG.

Другой возможностью является использование распределенной системы аутентификации, такой как OAuth, которая предназначена именно для этого. Таким образом, ваше мобильное приложение будет обращаться к серверу авторизации для получения токена, а затем представлять токен SG, который затем показывает токен серверу аутентификации для его проверки. IIRC У нас пока нет поддержки OAuth общего назначения в SG, поэтому вам нужно написать небольшой обработчик OAuth для запуска на сервере SG, который бы выполнял эту работу.

[Отказ от ответственности: я архитектор в Couchbase и работал над Sync Gateway, но в настоящее время я работаю только с Couchbase Lite, поэтому я не эксперт по текущим возможностям SG!]

Вы можете установить http-прокси в той же локальной сети, что и Sync Gateway, например, nginx.

Вы должны настроить nginx для приема общедоступных SSL-соединений, аутентифицированных с использованием клиентских сертификатов.

Настройте Sync Gateway так, чтобы он принимал только административное соединение из локальной сети, совместно используемой с nginx.

Настройте сервер приложений для использования сертификата на стороне клиента при подключении к Sync Gateway через nginx.

Здесь есть хороший блог, посвященный настройке сертификата клиента nginx: http://nategood.com/client-side-certificate-authentication-in-ngi

Ну, новая информация в ваших комментариях должна быть рассмотрена. Я не эксперт в этой области, но я думаю, что предполагается, что служба аутентификации и шлюз синхронизации работают на одном сервере. Если нет, то все становится немного сложнее, но я думаю, что это можно сделать, изменив раздел adminInterface вашей конфигурации Sync Gateway на внутренний IP-адрес и порт (например, 192.168.3.2:4985).

Рекомендую обернуть то, что вам нужно, в сервис аутентификации Этот пост очень хорошо объясняет, как это сделать: http://ti.eng.br/configuring-your-very-first-couchbase-mobile-sync-backend/

Этот момент упоминается в документации (если я правильно понял вопрос). В разделе " Управление доступом к API " страницы " Администрирование API-интерфейсов REST".

Цитируя тот раздел, который содержит ответ на ваш вопрос:

Доступ к API-интерфейсам осуществляется через разные порты TCP, что упрощает предоставление API-интерфейса Sync REST на порту 4984 конечным точкам, сохраняя API-интерфейс администратора REST на порту 4985 защищенным за межсетевым экраном.

Если вы хотите изменить порты, вы можете сделать это в файле конфигурации.

Чтобы изменить порт Sync REST API, задайте свойство интерфейса в файле конфигурации.

Чтобы изменить порт API Admin REST, задайте свойство adminInterface в файле конфигурации.

Значением свойства является строка, состоящая из двоеточия, за которым следует номер порта (например, 4985). Вы также можете добавить имя хоста или числовой IP-адрес перед двоеточием для привязки только к сетевому интерфейсу с этим адресом.

В качестве полезного особого случая IP-адрес 127.0.0.1 привязывается к интерфейсу обратной связи, что делает порт недоступным для любого другого хоста. Это настройка по умолчанию для интерфейса администратора.

Жирными буквами написано, что вы можете указать IP-адрес и порт, чтобы связать его с определенной сетью.

Я думаю, что это то, что вам нужно.

Другие вопросы по тегам