Подключение по SSH к инстансу AWS EC2, расположенному в частной подсети в VPC

Я занимаюсь этой проблемой пару часов, и, может быть, это невозможно, а может быть.

У меня есть VPC в AWS с парой экземпляров EC2 и Lambda Instances.

На данный момент лямбда может без проблем вызывать, ssh и т. д. На сервер EC2.

Мои лямбды используют группу безопасности только с HTTP, HTTPS и SSH в «Outbound».

Моя группа безопасности ec2 по умолчанию принимает только 22 входящих (от моей группы безопасности Lambda И моего офисного IP).

Если я создаю экземпляр ec2 в своей общедоступной подсети, и я, и мои лямбда-функции могут получить к нему доступ через ssh.

Если я создам его в своей ЧАСТНОЙ подсети, мои лямбды могут использовать ssh, но я НЕ МОГУ ...

Действительно ли мне нужен NAT-СЕРВЕР для этого?

TL: DR; Только мой офис и мои лямбды должны иметь доступ к моим экземплярам ec2.

Да, вам понадобится NAT и многое другое. Каким образом экземпляр EC2 в частной подсети отправлял бы трафик в Интернет в противном случае? Он имеет IP-адрес RFC1918, поэтому трафик с него не маршрутизируется в Интернете. Если, конечно, у вас нет VPN-туннеля в VPC, которого, как я полагаю, у вас нет.

jarmod 15.10.2018 16:35
Стоит ли изучать PHP в 2026-2027 годах?
Стоит ли изучать PHP в 2026-2027 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Приемы CSS-макетирования - floats и Flexbox
Приемы CSS-макетирования - floats и Flexbox
Здравствуйте, друзья-студенты! Готовы совершенствовать свои навыки веб-дизайна? Сегодня в нашем путешествии мы рассмотрим приемы CSS-верстки - в...
Тестирование функциональных ngrx-эффектов в Angular 16 с помощью Jest
В системе управления состояниями ngrx, совместимой с Angular 16, появились функциональные эффекты. Это здорово и делает код определенно легче для...
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
5
1
10 907
3
Перейти к ответу Данный вопрос помечен как решенный

Ответы 3

Вы можете сослаться на это: https://docs.aws.amazon.com/vpc/latest/userguide/VPC_Scenario2.html Вам нужно будет использовать шлюз NAT для доступа ко всему в частной подсети.

Я уже следил за этим (именно этим) руководством. Но я все еще не могу подключиться через SSH к экземпляру ec2, если я запускаю его в частной подсети. Однако лямбда может.

MatiasN 15.10.2018 15:37

Время ожидания соединения истекло? Можем попробовать отладить, если хотите :)

AlexK 15.10.2018 15:47

Да, это так. Я создал простую Lambda, которая подключается по SSH к машине ec2, и просто запускаю команду. что-то вроде "установить питон" .. это работает. Но когда я пытаюсь получить к нему доступ через мой терминал Mac, он просто истекает.

MatiasN 15.10.2018 15:54

Какой подход вы выбрали: с NAT GW или с экземпляром NAT?

AlexK 15.10.2018 16:15

Тот, у кого шлюз нац

MatiasN 15.10.2018 17:52

Хорошо, не обращайте внимания на мой ответ, правильный - @ jarmod's

AlexK 15.10.2018 17:57
Ответ принят как подходящий

Первый вариант, который следует рассмотреть для 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 в частной подсети, вам понадобится несколько вещей:

  1. IGW и NAT в VPC
  2. хост-бастион с публичным IP-адресом в публичной подсети VPC
  3. группа безопасности на бастионе, разрешающая входящий SSH с вашего ноутбука
  4. маршрут по умолчанию из частной подсети в NAT
  5. группа безопасности на частном экземпляре EC2, которая разрешает входящий SSH от бастиона

Затем вам нужно проложить туннель через хозяин бастиона. Подробнее см. Безопасное подключение к инстансам Linux, запущенным в частном облаке Amazon VPC.

@MatiasN Зачем вам нужен SSH для частного экземпляра? Возможно, это поможет нам сделать лучшие предложения. Если это просто запуск сценария, вы потенциально можете использовать команду SSM Run для удаленного выполнения этого, не требуя SSH или подключения через хост-бастион.

jarmod 15.10.2018 18:41

Это похоже на хороший план. Это также сильно упростило бы мою лямбду. Спасибо

MatiasN 17.10.2018 09:22

Кроме того, доказательством концепции был порт 22, закрытый для всех, кроме лямбда-функций и моего офисного IP-адреса.

MatiasN 17.10.2018 09:25
  1. Создайте хозяина бастиона.

  2. Это будет общедоступный экземпляр EC2 в общедоступной подсети с той же группой безопасности, что и ваш частный экземпляр ec2.

  3. Убедитесь, что трафик в группе безопасности разрешен. Вы можете сделать это, создав входящее правило для своей группы безопасности.

  4. Теперь в 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"

  5. Замените следующие 3 вещи в приведенной выше команде:

    • your_private_key
    • private_ip
    • public_ip

Другие вопросы по теме