AWS Session Manager를 사용하여 EC2 인스턴스를 통해 RDS에 연결할 때 시간 초과

AWS Session Manager를 사용하여 EC2 인스턴스를 통해 RDS에 연결할 때 시간 초과

Session Manager를 사용하여 ec2 인스턴스(Ubuntu)를 통해 프라이빗 서브넷의 AWS RDS 인스턴스에 액세스하는 데 문제가 있습니다.

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이 EC2 포트 3307로 성공적으로 전달되었습니다.

lsof -nP +c 15 | grep LISTEN

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

EC2 인스턴스에는 포트 3307의 모든 트래픽을 포트 3306(MYSQL PORT)의 rds 호스트로 전달하는 iptable 규칙이 있습니다.

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은 다음 시나리오를 처리하도록 설계되었습니다. 수동으로 설치하고 설치한 MySQL 데이터베이스와 같이 EC2에서 실행 중인 항목이 있습니다. 예를 들어 워크스테이션에서 SSM을 통해 EC2에서 실행되는 MySQL 인스턴스로 트래픽을 전달하려고 합니다. 이것이 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

2022년 5월 27일, AWS지원 발표~을 위한세션 관리자를 사용하여 원격 호스트로 포트 전달:

먼저, 포트 전달 세션을 설정하려는 관리형 인스턴스에 SSM 에이전트 버전 3.1.1374.0 이상을 설치합니다. 세션 관리자 설명서를 사용하여 명령줄에서 포트 전달 세션을 시작할 수 있습니다 AWS-StartPortForwardingSessionToRemoteHost.

포트 전달 세션을 시작하려면 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 시스템 관리자 - 사용 설명서 - 세션 관리자 - 세션 시작(원격 호스트로 포트 전달).

관련 AWS 블로그 게시물:

관련 GitHub 문제 및 풀 요청:

관련 StackOverflow 질문:

관련 정보