
AWS здесь. У меня есть простой сервер приложений, работающий на экземплярах EC2, которые находятся в группе автомасштабирования («целевой»), которая находится под управлением балансировщика нагрузки приложений (ALB). Доменное имя ALB сопоставляется CNAME в DNS с моим поддоменом dev, скажем, dev.myapp.example.com
. Следовательно, я могу использовать curl
, wget
, PostMan и т. д. для отправки HTTP-запросов http://dev.myapp.example.com
и получения ответов от него, и эти запросы балансируются по всем экземплярам EC2, которые находятся за ALB (в группе автомасштабирования).
Сервер приложений, работающий на этих экземплярах EC2, должен подключаться к сторонней базе данных как услуге. Мы будем называть эту облачную базу данных " MyCloudDB
" для целей этого вопроса.
Когда я вручную подготавливаю экземпляр EC2 и развертываю там свой сервер приложений, для того, чтобы он мог взаимодействовать с MyCloudDB
, мне нужно войти в MyCloudDB
веб-консоль и получить доступ к публичному IP-адресу экземпляра EC2 с подсетью /32 (честно говоря, не уверен, почему в подсети /32). Так, например, если AWS назначает публичный IP-адрес для экземпляра, скажем, 1.2.3.4
, то мне нужно войти в систему MyCloudDB
и добавить запись в список доступа для 1.2.3.4/32
. Тогда и только тогда сервер приложений (работающий на новом экземпляре EC2) сможет подключиться к MyCloudDB
.
Я пытаюсь выяснить, как сделать эту настройку списка разрешений/доступа совместимой с моим ALB и его группой автомасштабирования. Очевидно, что экземпляры EC2 в группе автомасштабирования являются эфемерными и будут запускаться и останавливаться в зависимости от моих правил автомасштабирования. Поскольку нам нужно, чтобы это было динамично/эластично, мне нужен способ сказать MyCloudDB
«доверять» любым запросам, поступающим от экземпляров EC2 за моим ALB. И, очевидно, не ослаблять безопасность настолько, чтобы создавать себе головную боль.
Предлагается MyCloudDB
3 типа вариантов доступа к сети:
- Список доступа IP (_то, что я использую в данный момент, исключительно)
- VPC-пиринг
- это позволяет моему приложению подключаться к VPC с помощью
MyCloudDB
VPC
- это позволяет моему приложению подключаться к VPC с помощью
- Частная конечная точка
- позволяет AWS PrivateLink подключаться к
MyCloudDB
- позволяет AWS PrivateLink подключаться к
- API управления REST
- позволяет мне управлять списком доступа IP, но через RESTful (веб-сервис) API
- поэтому я мог бы создать хук жизненного цикла экземпляра EC2 для запуска скрипта, который добавляет IP-адрес экземпляра в
MyCloudDB
список доступа IP-адресов с помощьюcurl
или какого-либо другого инструмента
Итак, с точки зрения автоматизации, у меня есть 3 варианта: VPC Peering, Private Endpoint (PrivateLink) или вызовы API. Я могу разобрать плюсы/минусы варианта вызова API, но я с трудом "увидеть лес сквозь деревья" по опции VPC Peering vs PrivateLink.
Аглавный вызоввот: в конечном итоге у меня будут шаблоны CloudFormation, управляющие развертыванием этого ALB в новых (эфемерных) средах. Поэтому мне нужно не только, чтобы это решение для подключения работало для экземпляров EC2, находящихся за ALB, мне нужно, чтобы оно работало с ALB, которые будут предоставлены через CloudFormation.
Учитывая мою ситуацию, контекст и потребности, каковы преимущества/недостатки VPC-пиринга по сравнению с PrivateLink?
решение1
Это практически то же самое, для чего был создан PrivateLink. Они фактически помещают сетевой интерфейс в ваш VPC, вы получаете к нему доступ. На их стороне он попадает на NLB, а затем попадает в их базу данных. Это минимальные привилегии, и это то, что я бы сделал.
Пиринг VPC открывает большую часть вашей сети для большей части их сети. Если ваши диапазоны IP-адресов конфликтуют, это становится сложнее. Я не вижу никаких преимуществ в этой ситуации.
Если бы список доступа IP был единственным вариантом, вам бы понадобились статические IP-адреса для вашей группы автомасштабирования. Создание шлюза NAT в каждой подсети и внесение их эластичных IP-адресов в белый список позволило бы этого добиться.