Estou tendo problemas para acessar a instância AWS RDS em uma sub-rede privada usando o gerenciador de sessões por meio da instância ec2 (Ubuntu).
Encaminhamento de porta usando o 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`
Agora a porta local 8000 foi encaminhada com sucesso para a porta 3307 do EC2.
lsof -nP +c 15 | grep LISTEN
session-manager 59744 xrage 12u IPv4 0xa6c821d0a800e9a1 0t0 TCP 127.0.0.1:8000 (LISTEN)
A instância EC2 possui uma regra iptable que encaminha todo o tráfego na porta 3307 para o host rds na porta 3306 (MYSQL PORT).
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
Isso me permitiu acessar o host remoto na porta desejada do ec2, mas ainda assim, o host remoto não está acessível localmente na porta 8000.
Detalhes da rede na máquina local -
- Não usando nenhum proxy
- Firewall desativado no mac
Portanto, está claro que a configuração do SSM está funcionando, mas algo mais está bloqueando esse tráfego. Preciso de ajuda aqui.
Responder1
Quando você disse que o host remoto pode acessar a instância do MySQL, você tentou aquela porta (telnet) ou cliente de linha de comando mysql, só para confirmar?
Supondo que sim ao acima, eu passaria para a próxima etapa. Entendo que AWS-StartPortForwardingSession deve cobrir este cenário: Você tem algo em execução no seu EC2, digamos, banco de dados MySQL que você rolou e instalou manualmente. Você deseja encaminhar o tráfego da sua estação de trabalho (por exemplo) para a instância MySQL em execução no EC2, via SSM. É para isso que o AWS-StartPortForwardingSession foi projetado.
No seu caso, o EC2 é mais um bastion host e sua instância MySQL é do tipo RDS. Portanto, o seu EC2 não hospeda nada - é simplesmente um gateway para conectar-se ao seu RDS.
Supondo que a suposição acima esteja correta, eu usaria AWS-StartSSHSession (https://docs.aws.amazon.com/systems-manager/latest/userguide/session-manager-getting-started-enable-ssh-connections.html).
A resposta completa seria detalhada, mas fiz isso há alguns meses:https://medium.com/@clearwaterstream/recipe-connect-to-an-rds-database-in-a-private-subnet-from-your-workstation-over-https-c66db6ead9f0
Responder2
Em 27 de maio de 2022, AWSsuporte anunciadoparaEncaminhamento de porta para hosts remotos usando o Session Manager:
Para começar, instale o SSM Agent versão 3.1.1374.0 ou posterior nas instâncias gerenciadas com as quais você está estabelecendo uma sessão de encaminhamento de porta. Você pode iniciar uma sessão de encaminhamento de porta na linha de comando usando o
AWS-StartPortForwardingSessionToRemoteHost
documento Session Manager.
Para iniciar uma sessão de encaminhamento de porta, execute o seguinte comando na CLI. Substitua os valores de <EC2_INSTANCE_ID>
, <RDS_DB>
, <RDS_PORT>
e <LOCAL_PORT>
pelas suas informações:
aws ssm start-session \
--target <EC2_INSTANCE_ID> \
--document-name AWS-StartPortForwardingSessionToRemoteHost \
--parameters '{"host":["<RDS_DB>"], "portNumber":["<RDS_PORT>"], "localPortNumber":["<LOCAL_PORT>"]}'
Mais detalhes estão disponíveis na documentação da AWS:AWS Systems Manager - Guia do usuário - Session Manager - Iniciando uma sessão (encaminhamento de porta para host remoto).
Postagens relacionadas do blog da AWS:
- Use o encaminhamento de porta no Session Manager do AWS Systems Manager para conectar-se a hosts remotos
- Conecte-se com segurança a uma instância de banco de dados Amazon RDS ou Amazon EC2 remotamente com sua GUI preferida
Problemas relacionados ao GitHub e solicitações pull:
- aws/amazon-ssm-agent - Problema nº 208 - Solicitação de recurso: encaminhar para porta remota
- aws/amazon-ssm-agent - Problema nº 240 - Solicitação de recurso: permitir a especificação de IP para AWS-StartSSHSession nº 240
- aws/amazon-ssm-agent - Pull Request #389 - Suporte para especificar um host para encaminhamento de porta
Pergunta relacionada ao StackOverflow: