Tempo limite ao conectar o RDS usando o gerenciador de sessões AWS via instância EC2

Tempo limite ao conectar o RDS usando o gerenciador de sessões AWS via instância EC2

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-StartPortForwardingSessionToRemoteHostdocumento 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:

Problemas relacionados ao GitHub e solicitações pull:

Pergunta relacionada ao StackOverflow:

informação relacionada