Ограничить доступ к 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-адрес и порт, чтобы связать его с определенной сетью.
Я думаю, что это то, что вам нужно.