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 블로그 게시물:
- AWS Systems Manager Session Manager의 포트 전달을 사용하여 원격 호스트에 연결
- 선호하는 GUI를 사용하여 원격으로 Amazon RDS 또는 Amazon EC2 데이터베이스 인스턴스에 안전하게 연결
관련 GitHub 문제 및 끌어오기 요청:
- aws/amazon-ssm-agent - 문제 #208 - 기능 요청: 원격 포트로 전달
- aws/amazon-ssm-agent - 문제 #240 - 기능 요청: AWS-StartSSHSession #240에 대한 IP 지정 허용
- aws/amazon-ssm-agent - Pull Request #389 - 포트 전달을 위한 호스트 지정 지원
관련 StackOverflow 질문: