Как лямбда внутри частного su bnet может получить доступ к EC2 в publi c su bnet? - PullRequest
1 голос
/ 02 августа 2020

Я создал экземпляр EC2 внутри publi c su bnet (так что я могу получить к нему доступ из моей домашней сети), и я создал несколько лямбда-выражений внутри частных подсетей моего VP C.

Моя первая лямбда может свободно обращаться к inte rnet (через шлюз NAT) и выполнять свою работу. Это означает получение файла из inte rnet и загрузку его в S3 один раз в день.

Моя вторая лямбда должна получить этот файл из S3 (что он делает без проблем), прочтите файл и затем загрузите данные в MySQL, запущенный на экземпляре EC2. Он не может подключиться к базе данных (используя publi c или частный IP-адрес EC2), и журналы Cloudwatch показывают, что время сеанса истекло, что заставляет меня думать, что это проблема сети.

У меня есть Третья лямбда, которая также должна будет взаимодействовать с экземпляром EC2 / DB.

Моя группа безопасности разрешает весь входящий трафик c с IP-адреса моей домашней сети, шлюза NAT и диапазона IP-адресов VP C. Разрешен весь исходящий трафик c.

Я ценю, что EC2 / DB не всегда настраивается таким образом, в publi c su bnet, но я предпочитаю взаимодействовать с ним это можно сделать из дома с помощью Sequel Pro.

Однако возможна ли моя установка? Например, могут ли мои частные лямбды su bnet взаимодействовать с экземпляром publi c su bnet ec2? Если да, есть ли у кого-нибудь идеи, как я могу это сделать?

1 Ответ

4 голосов
/ 03 августа 2020

Похоже, ваша ситуация:

  • Экземпляр Amazon EC2, работающий в publi c su bnet, с MySQL
    • Экземпляр EC2 имеет Группа безопасности, разрешающая весь входящий трафик c с IP вашей домашней сети, шлюза NAT и VP C Диапазон IP-адресов
  • Функция AWS Lambda, подключенная к частному su bnet того же VP C
  • Шлюз NAT, позволяющий частным подсетям подключаться к Inte rnet
  • Функция Lambda не может подключиться к базе данных MySQL, работающей на экземпляр EC2

нормальная конфигурация безопасности для этого сценария будет:

  • Группа безопасности для лямбда-функции (Lambda-SG), которая разрешает весь исходящий доступ (входящий не требуется)
  • Группа безопасности на экземпляре EC2 (EC2-SG), которая разрешает входящий доступ из Lambda-SG на порт 3306, а также любые входящие разрешения, которые вы хотите получить для доступа к вашему экземпляру через S SH и др. c.

Учитывая, что ваша группа безопасности включает «диапазон IP C IP», этого должно быть достаточно для разрешения входящего доступа.

Лямбда-функция должна ссылаться на экземпляр EC2 через его частный IP-адрес для хранения трафика c внутри VP C. По умолчанию все подсети в VP C могут взаимодействовать друг с другом, если только Сетевые ACL не были изменены (и их обычно следует оставить со значениями по умолчанию).

Это означает, что остается только одно объяснение: база данных MySQL не принимает трафик c из диапазона IP-адресов VP C. (Я не человек MySQL, но я знаю, что PostgreSQL требует определения диапазонов входящих IP-адресов, поэтому это может быть верно и для MySQL.)

Для диагностики того, что может происходить в вашей сети я рекомендую:

  • Запустить другой экземпляр Amazon EC2 в publi c su bnet
  • Подключитесь к новому экземпляру и попробуйте для подключения к базе данных MySQL через частный IP-адрес
  • Если это работает, повторите процесс, но с экземпляра EC2 в частном su bnet . Чтобы использовать это, вам нужно будет подключиться к экземпляру 'publi c' EC2, а оттуда подключиться к 'частному' экземпляру EC2. Затем попробуйте подключиться к MySQL из этого частного экземпляра.

Эти шаги постепенно позволят вам определить, где может возникнуть проблема с сетью l ie. Сообщите нам, что вы найдете!

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...