как подключиться к частной RDS с локального хоста

#amazon-ec2 #nestjs #portforwarding #aws-ssm #aws-aurora-serverless

Вопрос:

У меня есть частный VPC с частными подсетями, частный jumpbox в 1 частной подсети и мой частный экземпляр MySQL без сервера RDS aurora в другой частной подсети.

Я выполнил эти команды на своем локальном ноутбуке, чтобы попытаться подключиться к своему RDS через переадресацию портов:

 aws ssm start-session --target i-0d5470040e7541ab9 --document-name AWS-StartPortForwardingSession --parameters "portNumber"=["5901"],"localPortNumber"=["9000"] --profile myProfile  aws ssm start-session --target i-0d5470040e7541ab9 --document-name AWS-StartPortForwardingSession --parameters "portNumber"=["22"],"localPortNumber"=["9999"] --profile myProfile   aws ssm start-session --target i-0d5470040e7541ab9 --document-name AWS-StartPortForwardingSession --parameters "portNumber"=["3306"],"localPortNumber"=["3306"] --profile myProfile   

Соединение с сервером зависает.

У меня была эта ошибка на моем локальном ноутбуке:

 Starting session with SessionId: myuser-09e5cd0206cc89542 Port 3306 opened for sessionId myuser-09e5cd0206cc89542. Waiting for connections...  Connection accepted for session [myuser-09e5cd0206cc89542]  Connection to destination port failed, check SSM Agent logs.  

и эти ошибки в /var/log/amazon/ssm/errors.log :

 2021-11-29 00:50:35 ERROR [handleServerConnections @ port_mux.go.278] [ssm-session-worker] [myuser-017cfa9edxxxx] [DataBackend] [pluginName=Port] Unable to dial connection to server: dial tcp :3306: connect: connection refused 2021-11-29 14:13:07 ERROR [transferDataToMgs @ port_mux.go.230] [ssm-session-worker] [myuser-09e5cdxxxxxx] [DataBackend] [pluginName=Port] Unable to read from connection: read unix @-gt;/var/lib/amazon/ssm/session/3366606757_mux.sock: use of closed network connection  

и я пытаюсь подключиться к RDS вот так :

введите описание изображения здесь

I even tried to put the RDS Endpoint using ssh Tunnel, but it doesn’t work:

введите описание изображения здесь

Есть ли какие-либо дополнительные действия, которые необходимо выполнить на удаленном экземпляре ec2 сервера?

Кажется, что соединение принято, но соединение с портом назначения не работает.

Спасибо вам за вашу помощь в этом!!

Ответ №1:

Команда запуска сеанса туннелирует порт от целевого экземпляра EC2 к локальному хосту. Экземпляр RDS находится на другом хосте, поэтому вы должны использовать туннелирование SSH.

Отправьте свой открытый ключ в экземпляр EC2. Заполните параметры региона и зоны доступности.

 aws ec2-instance-connect send-ssh-public-key --region us-west-2 --instance-id i-0d5470040e7541ab9 --availability-zone us-west-2a --instance-os-user ec2-user --ssh-public-key file://~/.ssh/id_rsa.pub  

Перенаправьте SSH-порт 22 с экземпляра EC2 на 9999 локально.

 aws ssm start-session --target i-0d5470040e7541ab9 --document-name AWS-StartPortForwardingSession --parameters "portNumber"=["22"],"localPortNumber"=["9999"] --profile myProfile  

SSH в экземпляр с туннелированием (в другом терминале). Заполните rds-экземпляр-dns DNS вашего экземпляра RDS.

 ssh ec2-user@localhost -L 6606:rds-instance-dns:3306 -i ~/.ssh/id_rsa -p 9999  

Доступ к RDS

 mysql -h localhost -p 6606  

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