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.
Ответы
Ответ 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
- Создать лямбда-функцию в AWS
- Создайте API-шлюз для перенаправления всех запросов в вашу лямбда-функцию AWS https://medium.com/@shontauro/how-can-i-turn-my-restful-api-into-a-serverless-application-and-deploy -это-к-AWS-лямбда-шаг за ec7ce38e18be
Часть II
- Настройте VPC для вашей лямбда-функции
- Предоставить доступ к лямбда-функции в Интернете безопасным способом
- Разверните 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 и работаете с интернетом, поэтому нет необходимости создавать новый.
Шаги спомогли мне:
Создайте новые подсети (рекомендуется 2 или более) под вашим основным VPC. Дайте ему новый CIDR с маской, вы думаете, что это будет количество сетевых интерфейсов, используемых в вашей лямбде (я сделал X.X.X.X/28, потому что для нас этого достаточно)
Создайте NAT Gateway, добавьте к нему Elastic IP или создайте новый EIP и добавьте его в свою основную подсеть под вашим VPC. (помните, что это будет работать, если у вас уже есть Интернет-шлюз)
Создайте таблицу маршрутов и добавьте 0.0.0.0/0 маршрут к Target - Nat Gateway ID (nat-xxxxxxxxxxxxxxxxx), который мы создали (шаг 2)
Создайте новые группы безопасности (ALL to ALL), чтобы ваша лямбда работала с интернетом. Я считаю безопасным добавить 0.0.0.0/0 к лямбде для интернета.
Откройте лямбду - выберите свой VPC, добавьте SG, с которым вы работаете, и добавьте новые, созданные на шаге 4, для работы с интернетом. нажмите Сохранить и проверить.
Ответ 6
На самом деле вам больше не нужно создавать шлюзы Internet и NAT: https://aws.amazon.com/blogs/security/how-to-connect-to-aws-secrets-manager-service-within-a-virtual- частное облако /