Подтвердить что ты не робот

AWS Lambda: как настроить NAT-шлюз для лямбда-функции с доступом VPC

Согласно этому документу, если мне нужно получить доступ к интернет-ресурсам из функции Lambda с доступом VPC, мне нужно настроить шлюз NAT.

Поэтому я следовал этому руководству для настройки шлюза NAT. Однако на этапе, когда мне нужно отредактировать таблицы маршрутов моей подсети, чтобы добавить запись с адресатом: 0.0.0.0/0 и целевым идентификатором шлюза NAT, я получил сообщение об ошибке

An entry with this destination already exists

Я проверил и заметил, что для этой существующей записи целью был интернет-шлюз для моего VPC. Если я заменю эту запись идентификатором шлюза NAT, я не смогу получить доступ к любому из экземпляров EC2 в этом VPC через SSH из внешнего мира. Как мне найти решение, в котором все экземпляры EC2 в этом VPC:

  • Доступны только через SSH, а остальная часть трафика заблокирована
  • Могут полностью получить доступ к другим экземплярам EC2 в том же VPC
  • Лямбда-функция, имеющая доступ к этому VPC, может обращаться к внешним ресурсам, таким как SQS и Kinesis.
4b9b3361

Ответ 1

Для этого вам нужны как IGW, так и NAT-шлюз.

В публичных подсетях (которые вы хотите получить извне) укажите трафик 0.0.0.0/0 на шлюз IGW. Сам шлюз NAT должен находиться в одной из этих открытых подсетей.

В частных подсетях, которые вы хотите привязать к точке NAT 0.0.0.0/0, к интерфейсу эластичного сетевого интерфейса NAT.

Если 0.0.0.0/0 привязан к шлюзу, вам необходимо удалить его и добавить его, указывая на шлюз NAT.

См: http://docs.aws.amazon.com/AmazonVPC/latest/UserGuide/vpc-nat-gateway.html

Ответ 2

Я нашел хороший подробный учебник о том, как разрешить вашей лямбде подключаться как к ресурсам VPC, так и к Интернету здесь: https://gist.github.com/reggi/dc5f2620b7b4f515e68e46255ac042a7

Быстрый переход:

  • настроить новые подсети для вашей лямбды (с CIDR не перекрывая существующие подсетей). Тебе нужно:
    • одна подсеть, которая будет указывать на интернет-шлюз (IGW), который будет использоваться NAT (позвоните ему A)
    • несколько указателей на NAT, которые будут использоваться вашей лямбдой (B, C и D).
  • добавить шлюз NAT: установить подсеть в A
  • установите ваши подсети лямбды VPC в B, C и D
  • создать 2 таблицы маршрутов:
    • который указывает на ваш NAT с адресом 0.0.0.0/0
    • который указывает на ваш IGW (должен уже существовать) с адресом 0.0.0.0/0
  • обновите подсеть A, чтобы использовать таблицу маршрутов, указывающую на IGW
  • обновите подсети B, C и D, чтобы использовать таблицу маршрутов, указывающую на NAT

Надеюсь, что это поможет.

Ответ 3

Вам нужны две разные подсети. Звучит так, будто у тебя его есть.

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

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

Определение общей подсети: маршрут по умолчанию - это объект igw-xxxxxxxx Интернет-шлюз, а машины имеют общедоступные IP-адреса. Машины без общедоступных IP-адресов разрешены в общедоступной подсети, но они не смогут получить доступ к Интернету, потому что это неправильная конфигурация.

Похоже, вы пытаетесь изменить существующую подсеть от общего доступа к частному, изменив маршрут по умолчанию. Как и ожидалось, это нарушает другие вещи.

См. также Зачем нужна частная подсеть в VPC?

Ответ 4

Эй, ребята, я разработал пошаговое руководство с явными снимками экрана:

Часть I

  1. Создать лямбда-функцию в AWS
  2. Создайте API-шлюз для перенаправления всех запросов в вашу лямбда-функцию AWS https://medium.com/@shontauro/how-can-i-turn-my-restful-api-into-a-serverless-application-and-deploy -это-к-AWS-лямбда-шаг за ec7ce38e18be

Часть II

  1. Настройте VPC для вашей лямбда-функции
  2. Предоставить доступ к лямбда-функции в Интернете безопасным способом
  3. Разверните Node.js Restful API в вашей лямбда-функции https://medium.com/@shontauro/how-can-i-turn-my-restful-api-into-a-serverless-application-and-deploy-it- к-AWS-лямбда-шаг за 8ff6cc97780f

Ответ 5

Для использования Lambda внутри VPC и доступа в Интернет:

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

Шаги спомогли мне:

  1. Создайте новые подсети (рекомендуется 2 или более) под вашим основным VPC. Дайте ему новый CIDR с маской, вы думаете, что это будет количество сетевых интерфейсов, используемых в вашей лямбде (я сделал X.X.X.X/28, потому что для нас этого достаточно)

  2. Создайте NAT Gateway, добавьте к нему Elastic IP или создайте новый EIP и добавьте его в свою основную подсеть под вашим VPC. (помните, что это будет работать, если у вас уже есть Интернет-шлюз)

  3. Создайте таблицу маршрутов и добавьте 0.0.0.0/0 маршрут к Target - Nat Gateway ID (nat-xxxxxxxxxxxxxxxxx), который мы создали (шаг 2)

  4. Создайте новые группы безопасности (ALL to ALL), чтобы ваша лямбда работала с интернетом. Я считаю безопасным добавить 0.0.0.0/0 к лямбде для интернета.

  5. Откройте лямбду - выберите свой VPC, добавьте SG, с которым вы работаете, и добавьте новые, созданные на шаге 4, для работы с интернетом. нажмите Сохранить и проверить.