Предположим, в appengine есть два разных приложения — одно на платформе Go, а другое на PHP
Каждый из них должен иметь возможность отправлять конкретные запросы друг другу, исключительно через внутреннюю сеть (т. Е. Это только службы, которые должны сделать эти конкретные запросы — другие удаленные запросы должны быть заблокированы).
Каков наилучший способ сделать это? Вдобавок ко всему, вот 3 возможных решения и почему я немного волнуюсь за них
1) Не храните их как отдельные приложения, а скорее как модули
Проблема в том, что использование модулей вызывает некоторые другие неудобства, такие как трудности с отчетами о присутствии в каналах. Кроме того, концептуально эти 2 запроса действительно являются единственными местами, к которым они обращаются, и будет понятнее увидеть, что происходит с точки зрения использования базы данных и т. Д., Если они разделены. Но проблема присутствия — скорее шоу-стопор
2) Добавьте запрос с каким-либо жестко закодированным длинным секретным ключом и разрешите ответ только через SSL
Кажется немного странным полагаться на это, так как ключ никогда не изменится … теоретически единственный способ узнать это, если администратор аккаунта или кто-то с источником указал это … но я не знаю кажется странным
3) Разрешить только через определенные диапазоны IP (возможно, в сочетании с # 2)
Это только кажется сомнительным, могут ли диапазоны IP быть точно известными?
4) Pub / Sub
Таким образом, кажется, что AppEngine допускает механизм pub / sub — но это не совсем подходит для моего варианта использования, так как я хочу получить ответ сразу, а не через обратную передачу после того, как подписчик обработает его
Все они
— В качестве дополнительного аспекта, если предположить, что это какой-то запрос https, выполняется ли это с помощью Socket API для каждого языка?
HTTPS, конечно, отличная идея в целом (не только для связи между двумя приложениями GAE).
Но для конкретного случая использования я бы рекомендовал опираться на X-Appengine-Inbound-Appid
заголовок запроса: инфраструктура App Engine гарантирует, что это не может быть установлено по запросам не из приложений GAE и для запросов, которые делать приходят из приложений GAE (через url-fetch, который не следует перенаправлениям), заголовок устанавливается в app-id.
Это задокументировано для Go на https://cloud.google.com/appengine/docs/go/urlfetch/ , для PHP на https://cloud.google.com/appengine/docs/php/urlfetch/ (и это точно так же для Java и Python, кстати).
- чисто через внутреннюю сеть
- Разрешить только через определенные диапазоны IP
Эти требования трудно или невозможно выполнить с помощью инфраструктуры механизма приложений, потому что вы не контролируете физические сетевые маршруты. Из движка приложения Часто задаваемые вопросы:
В настоящее время App Engine не предоставляет способ сопоставления статических IP-адресов с приложением. Чтобы оптимизировать сетевой путь между конечным пользователем и приложением App Engine, конечные пользователи из разных интернет-провайдеров или географических местоположений могут использовать разные IP-адреса для доступа к одному и тому же приложению App Engine.
Поэтому всегда предполагайте, что ваше общение происходит через открытую сеть, и никогда не предполагайте ничего об IP-адресах.
Добавить запрос с каким-нибудь жестко закодированным длинным секретным ключом
Жестко закодированный длинный секрет не обеспечивает никакой дополнительной безопасности, только неясность.
разрешить ответ только через SSL
Это лучшая идея; шифровать все вашего внутреннего трафика с сильным алгоритмом. Например, ECDHE-RSA или ECDHE-ECDSA, если доступно.