#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, настроив группу безопасности.