Я занимаюсь этой проблемой пару часов, и, может быть, это невозможно, а может быть.
У меня есть VPC в AWS с парой экземпляров EC2 и Lambda Instances.
На данный момент лямбда может без проблем вызывать, ssh и т. д. На сервер EC2.
Мои лямбды используют группу безопасности только с HTTP, HTTPS и SSH в «Outbound».
Моя группа безопасности ec2 по умолчанию принимает только 22 входящих (от моей группы безопасности Lambda И моего офисного IP).
Если я создаю экземпляр ec2 в своей общедоступной подсети, и я, и мои лямбда-функции могут получить к нему доступ через ssh.
Если я создам его в своей ЧАСТНОЙ подсети, мои лямбды могут использовать ssh, но я НЕ МОГУ ...
Действительно ли мне нужен NAT-СЕРВЕР для этого?
TL: DR; Только мой офис и мои лямбды должны иметь доступ к моим экземплярам ec2.





Вы можете сослаться на это: https://docs.aws.amazon.com/vpc/latest/userguide/VPC_Scenario2.html Вам нужно будет использовать шлюз NAT для доступа ко всему в частной подсети.
Я уже следил за этим (именно этим) руководством. Но я все еще не могу подключиться через SSH к экземпляру ec2, если я запускаю его в частной подсети. Однако лямбда может.
Время ожидания соединения истекло? Можем попробовать отладить, если хотите :)
Да, это так. Я создал простую Lambda, которая подключается по SSH к машине ec2, и просто запускаю команду. что-то вроде "установить питон" .. это работает. Но когда я пытаюсь получить к нему доступ через мой терминал Mac, он просто истекает.
Какой подход вы выбрали: с NAT GW или с экземпляром NAT?
Тот, у кого шлюз нац
Хорошо, не обращайте внимания на мой ответ, правильный - @ jarmod's
Первый вариант, который следует рассмотреть для SSH-доступа к экземплярам EC2, должен быть AWS Systems Manager Session Manager для доступа оболочки к инстансам EC2. Это потенциально большое дело. Больше никаких бастионов, никаких правил брандмауэра, разрешающих входящий порт 22. Вы в основном запускаете сеанс SSH в своем браузере, и он может нацеливаться на все экземпляры EC2, независимо от публичного / частного IP-адреса или подсети. На инстансах EC2 должна быть установлена последняя версия агента SSM, и они должны быть запущены с соответствующей ролью IAM (включая ключевые политики из AmazonEC2RoleForSSM).
Второй вариант, который следует рассмотреть, - это Команда запуска AWS Systems Manager, который позволяет удаленно запускать команды на ваших экземплярах EC2. Это не интерактивно, как SSH, но если вы просто хотите запустить последовательность сценариев, то это очень хорошо. Опять же, экземпляр должен запускать агент SSM и иметь соответствующую политику IAM, и этот вариант позволяет избежать необходимости туннелирования через узлы-бастионы.
Наконец, если вам действительно необходимо использовать SSH с вашего офисного ноутбука до экземпляра EC2 в частной подсети, вам понадобится несколько вещей:
Затем вам нужно проложить туннель через хозяин бастиона. Подробнее см. Безопасное подключение к инстансам Linux, запущенным в частном облаке Amazon VPC.
@MatiasN Зачем вам нужен SSH для частного экземпляра? Возможно, это поможет нам сделать лучшие предложения. Если это просто запуск сценария, вы потенциально можете использовать команду SSM Run для удаленного выполнения этого, не требуя SSH или подключения через хост-бастион.
Это похоже на хороший план. Это также сильно упростило бы мою лямбду. Спасибо
Кроме того, доказательством концепции был порт 22, закрытый для всех, кроме лямбда-функций и моего офисного IP-адреса.
Создайте хозяина бастиона.
Это будет общедоступный экземпляр EC2 в общедоступной подсети с той же группой безопасности, что и ваш частный экземпляр ec2.
Убедитесь, что трафик в группе безопасности разрешен. Вы можете сделать это, создав входящее правило для своей группы безопасности.
Теперь в Windows 10 вы можете запустить в командной строке следующее:
ssh -i your_private_key.pem ec2-user@private_ip -o "proxycommand ssh -W %h:%p -i your_private_key.pem ec2-user@public_ip"
Замените следующие 3 вещи в приведенной выше команде:
Да, вам понадобится NAT и многое другое. Каким образом экземпляр EC2 в частной подсети отправлял бы трафик в Интернет в противном случае? Он имеет IP-адрес RFC1918, поэтому трафик с него не маршрутизируется в Интернете. Если, конечно, у вас нет VPN-туннеля в VPC, которого, как я полагаю, у вас нет.