Как правильно настроить брандмауэр VPC для экземпляров App Engine?

Мы пытаемся развернуть приложение на основе микросервисов с использованием движка приложений Google (в основном гибких экземпляров), имея шлюз для службы по умолчанию и несколько микросервисов, обеспечивающих бизнес-логику. Вы можете думать об этом как о:

  • foo.appspot.com
  • service1.foo.appspot.com
  • service2.foo.appspot.com

как это делается, здесь < / а>

Я хотел бы, чтобы сервисы были доступны только со шлюза (и, возможно, с нескольких других машин), а не извне, но я не мог заставить его работать.

Мне удалось настроить все службы в данной сети VPC, добавив правило «Запретить весь трафик», входящий в эту сеть, за исключением шлюза, который помечен и разрешает все. (как описано в этом ответе здесь)

Это работает во время выполнения, однако при этом мы не можем развернуть с помощью gcloud app deploy. (Зависает на шаге "Обновление сервиса"). Я пытался разрешить порт 22, но похоже, что это не тот, который используется. Я также пытался заблокировать только порты 80 и 443, но теперь сервисы App Engine 1 и Service 2 снова доступны извне.

Как мне настроить брандмауэр, чтобы его можно было развернуть в App Engine, и ограничить доступ к службам только для шлюза? Возможно ли это даже с использованием брандмауэра VPC, или мне следует использовать экземпляр KCE или избегать использования инфраструктуры GCP и подписывать / проверять запросы самостоятельно?


person gvo    schedule 30.01.2019    source источник
comment
Вы пытаетесь запустить gcloud app deploy из Google Cloud Shell?   -  person Nahuel Varela    schedule 31.01.2019
comment
Я запускаю его со своего терминала, он хорошо работает, когда я удаляю правило VPC, и не работает, когда я возвращаю его.   -  person gvo    schedule 31.01.2019
comment
Вы можете выполнить развертывание на своем экземпляре шлюза, но при попытке развертывания на других службах возникает ошибка?   -  person Nahuel Varela    schedule 31.01.2019
comment
Правильно, поскольку мой GW доступен, он также работает нормально для развертывания, но другие приложения не могут быть развернуты, если я не удалю правило denyall на VPC.   -  person gvo    schedule 31.01.2019


Ответы (2)


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

Вот несколько возможных обходных путей, которые вы можете попробовать:

  • Используйте виртуальную машину Bastion. С этой опцией у вас будет код для того, что было вашей службой по умолчанию в виртуальной машине Bastion, а затем развернуть ваш GAE flex с двумя другими службами и установить там правило брандмауэра GAE, чтобы разрешить связь только с виртуальной машиной Bastion.

  • Как вы сказали в своем вопросе, вы можете использовать Kubernetes. Вот руководство о том, как развернуть контейнерный веб-приложение.

  • Наконец, вы можете выполнить собственную проверку входящих запросов, используя стандартные заголовки HTTP, такие как X-Forwarded-For, для определения IP-адреса клиента.

person Pablo Almécija Rodríguez    schedule 12.02.2019
comment
Спасибо за ответ, возможно, тогда мы перейдем на Kubernetes. Есть ли место, где мы поддерживаем запрос этой функции? Это не похоже на экзотический архитектурный образец, поэтому Google может быть интересно поддержать его в будущем. - person gvo; 12.02.2019
comment
Вы можете подать запрос функции в общедоступной системе отслеживания проблем по этой ссылке. , но уже есть запрос, связанный с этим здесь - person Pablo Almécija Rodríguez; 12.02.2019

Один из способов сделать это - использовать элементы управления брандмауэром для App Engine Flexible, которые можно использовать для установки правил во внешнем интерфейсе.

Если вы откажетесь от доступа к своему приложению (например, просто измените deny брандмауэр по умолчанию, как показано на рисунке), ничто не получит доступа к вашим службам, и вы все равно сможете развернуть свое приложение в GAE. Затем вам просто нужно будет разрешить определенным диапазонам IP-адресов доступ к вашему приложению с другими правилами брандмауэра в GAE.

введите здесь описание изображения

В этом случае вам даже не нужно иметь VPC и создавать там правила межсетевого экрана.

person Pablo Almécija Rodríguez    schedule 05.02.2019
comment
Что ж, это сработало бы, если бы у меня было специальное правило брандмауэра для шлюза (также известного как служба по умолчанию в моем App Engine), но это не так. С вашим предложением будет недоступен и Шлюз. - person gvo; 07.02.2019
comment
Это тоже наша проблема - person Voncay; 28.05.2020