Тайм-аут при подключении RDS с использованием AWS session manager через экземпляр EC2

Тайм-аут при подключении RDS с использованием AWS session manager через экземпляр EC2

У меня возникли проблемы с доступом к экземпляру AWS RDS в частной подсети с помощью диспетчера сеансов через экземпляр ec2 (Ubuntu).

Переадресация портов с помощью AWS Session Manager -

    aws ssm start-session --target $INSTANCE_ID \
                       --document-name AWS-StartPortForwardingSession \
                       --parameters '{"portNumber":[3307],"localPortNumber":["8000"]}' \
                                             --profile=production \
                       --region=us-east-1`

Теперь локальный порт 8000 успешно перенаправлен на порт 3307 EC2.

lsof -nP +c 15 | grep LISTEN

session-manager 59744 xrage 12u IPv4 0xa6c821d0a800e9a1 0t0 TCP 127.0.0.1:8000 (LISTEN)

Экземпляр EC2 имеет правило iptable, которое перенаправляет весь трафик через порт 3307 на хост rds через порт 3306 (ПОРТ MYSQL).

sudo iptables -t nat -A OUTPUT -o lo -d 127.0.0.1 -p tcp --dport 3307 -j DNAT  --to-destination <rds_private_ip>:3306

Это позволило мне получить доступ к удаленному хосту через нужный порт из ec2, но удаленный хост по-прежнему недоступен локально через порт 8000.

Сетевые данные на локальной машине -

  • Не использую прокси
  • Брандмауэр отключен на Mac

Итак, очевидно, что настройка SSM работает, но что-то еще блокирует этот трафик. Нужна помощь.

решение1

Когда вы сказали, что удаленный хост может получить доступ к экземпляру MySQL, вы пробовали этот порт (telnet) или клиент командной строки MySQL, просто чтобы подтвердить?

Если предположить, что вышесказанное верно, я бы перешел к следующему шагу. Я понимаю, что AWS-StartPortForwardingSession должен покрыть этот сценарий: у вас есть что-то, работающее на вашем EC2, скажем, база данных MySQL, которую вы вручную накрутили и установили. Вы хотите перенаправить трафик с вашей рабочей станции (например) на экземпляр MySQL, работающий на EC2, через SSM. Именно для этого и был разработан AWS-StartPortForwardingSession.

В вашем случае EC2 — это скорее хост-бастион, а ваш экземпляр MySQL — тип RDS. Так что ваш EC2 ничего не размещает — это просто шлюз для подключения к вашему RDS.

Если предположить, что приведенное выше предположение верно, я бы вместо этого использовал AWS-StartSSHSession (https://docs.aws.amazon.com/systems-manager/latest/userguide/session-manager-getting-started-enable-ssh-connections.html).

Полный ответ был бы подробным, но я сделал это всего несколько месяцев назад:https://medium.com/@clearwaterstream/recipe-connect-to-an-rds-database-in-a-private-subnet-from-your-workstation-over-https-c66db6ead9f0

решение2

27 мая 2022 г. AWSобъявленная поддержкадляПереадресация портов на удаленные хосты с помощью диспетчера сеансов:

Для начала установите SSM Agent версии 3.1.1374.0 или более поздней на управляемых экземплярах, с которыми вы устанавливаете сеанс переадресации портов. Вы можете запустить сеанс переадресации портов из командной строки, используя AWS-StartPortForwardingSessionToRemoteHostдокумент Session Manager.

Чтобы начать сеанс переадресации портов, выполните следующую команду из CLI. Замените значения <EC2_INSTANCE_ID>, <RDS_DB>, <RDS_PORT>, и <LOCAL_PORT>на свою информацию:

aws ssm start-session \
    --target <EC2_INSTANCE_ID> \
    --document-name AWS-StartPortForwardingSessionToRemoteHost \
    --parameters '{"host":["<RDS_DB>"], "portNumber":["<RDS_PORT>"], "localPortNumber":["<LOCAL_PORT>"]}'

Более подробную информацию можно найти в документации AWS:AWS Systems Manager — Руководство пользователя — Менеджер сеансов — Запуск сеанса (переадресация портов на удаленный хост).

Похожие записи в блоге AWS:

Сопутствующие проблемы GitHub и запросы на извлечение:

Сопутствующий вопрос StackOverflow:

Связанный контент