EC2 인스턴스를 통해 AWS 세션 관리자를 사용하여 RDS를 연결할 때 시간 초과

EC2 인스턴스를 통해 AWS 세션 관리자를 사용하여 RDS를 연결할 때 시간 초과

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

AWS 세션 관리자를 사용한 포트 전달 -

    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이 다음 시나리오를 다루는 것으로 알고 있습니다. EC2에서 실행 중인 무언가(예: 직접 롤링하고 설치한 MySQL DB)가 있습니다. 예를 들어 워크스테이션에서 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 질문:

관련 정보