SSH 터널을 사용하여 Amazon VPC 외부에서 Amazon DocumentDB 클러스터에 연결하려면 어떻게 해야 합니까?
Amazon Virtual Private Cloud(Amazon VPC)에 배포된 Amazon DocumentDB(MongoDB 호환) 클러스터에 액세스하고 싶습니다. SSH 터널을 사용하여 Amazon VPC 외부에서 클러스터에 액세스하려고 합니다.
간략한 설명
SSH 터널을 사용하여 로컬 시스템에서 Amazon DocumentDB 클러스터로 트래픽을 전달하려면 Amazon Elastic Compute Cloud(Amazon EC2) 인스턴스를 배스천 또는 점프 호스트로 사용하십시오. 배스천 호스트는 로컬 시스템에서 Amazon DocumentDB 클러스터로 트래픽을 전달하는 프록시 역할을 합니다.
해결 방법
EC2 인스턴스를 배스천 호스트로 사용하는 해결 방법은 다음과 같습니다. 배스천 호스트는 MongoDB 명령줄 인터페이스(CLI) 클라이언트를 사용하여 로컬 시스템에서 SSH 터널을 통해 Amazon DocumentDB 클러스터에 연결합니다.
사전 요구 사항:
- Amazon DocumentDB 클러스터를 만듭니다.
- Amazon DocumentDB 클러스터와 동일한 Amazon VPC에서 퍼블릭 IP 주소를 사용하여 인스턴스를 시작합니다.
- 로컬 시스템에 다운로드한 인스턴스와 프라이빗 키 쌍(.pem 파일)을 연결합니다.
- 보안 그룹을 Amazon DocumentDB 클러스터와 연결합니다. 보안 그룹은 Amazon DocumentDB 클러스터로 구성된 포트(기본값 27017)를 통해 인스턴스와의 통신을 허용합니다.
- 보안 그룹을 인스턴스와 연결합니다. 보안 그룹은 SSH 포트(22)를 통해 로컬 시스템과의 통신을 허용합니다.
- 로컬 시스템에 MongoDB Shell 또는 GUI 클라이언트를 설치합니다.
Amazon EC2 배스천 호스트에서 Amazon DocumentDB 클러스터에 액세스할 수 있는지 확인합니다.
프라이빗 키 쌍을 사용하여 SSH를 통해 로컬 시스템에서 배스천 호스트에 연결합니다.
ssh -i path_to_pem_file instance-user-name@instance-public-dns-name
참고: path_to_pem_file을 .pem 키 파일의 경로로 바꾸십시오. instance-user-name을 인스턴스의 사용자 이름으로 바꾸십시오. instance-public-dns-name을 인스턴스 퍼블릭 DNS 이름 또는 IP 주소로 바꾸십시오.
자세한 내용은 SSH 클라이언트를 사용하여 Linux 인스턴스에 연결을 참조하십시오.
클러스터를 인증하려면 Amazon DocumentDB용 인증 기관(CA) 인증서를 다운로드하십시오.
wget https://truststore.pki.rds.amazonaws.com/global/global-bundle.pem
MongoDB CLI 클라이언트를 사용하여 Amazon DocumentDB 클러스터에 연결합니다.
mongo --tls --host cluster-endpoint --tlsCAFile global-bundle.pem --username primary-username --password master-password
참고: cluster-endpoint를 DocumentDB 클러스터 엔드포인트로 바꾸십시오. primary-username을 데이터베이스 프라이머리 사용자 이름으로 바꾸십시오. primary-password를 데이터베이스 마스터 암호로 바꾸십시오.
자세한 내용은 Amazon EC2를 사용한 연결을 참조하십시오.
SSH 터널 구성
배스천 호스트에서 클러스터에 대한 연결을 확인한 후 SSH 터널을 구성합니다.
로컬 시스템에서 배스천 호스트로의 SSH 터널을 설정하려면 다음 예와 비슷한 명령을 실행합니다.
ssh -i path_to_pem_file -L local-port:cluster-endpoint:remote-port instance-user-name@instance-public-dns-name -N -f
참고: path_to_pem_file을 EC2 인스턴스 프라이빗 키 파일의 경로로 바꾸십시오. local-port를 로컬 시스템에서 사용할 포트 번호로 바꾸십시오. cluster-endpoint를 DB 클러스터 엔드포인트로 바꾸십시오. remote-port를 원격 데이터베이스의 포트 번호로 바꾸십시오.
다음 예에서는 SSH 터널이 로컬 시스템의 포트 27017을 원격 Amazon DocumentDB 클러스터에 바인딩합니다.
ssh -i "ec2Access.pem" -L 27017:sample-cluster.node.us-east-1.docdb.amazonaws.com:27017 ec2-user@ec2-zz-aaa-yyy-zzz.compute-1.amazonaws.com -N -f
위의 예시 명령에서는 다음 명령줄 옵션이 사용되었습니다.
- i identity_file - 인스턴스의 프라이빗 키 쌍(.pem 파일)을 인증에 사용합니다.
- L port:host:hostport - 로컬(클라이언트) 호스트의 포트를 바인딩하여 원격 호스트의 호스트 포트에서 트래픽을 전달합니다.
- N - 원격 명령을 실행하지 않습니다. 이는 포트를 전달하는 경우에만 유용합니다.
- f - SSH를 실행하여 백그라운드에서 실행합니다.
SSH 터널이 백그라운드에서 실행되는지 확인하려면 다음 예와 비슷한 명령을 실행합니다.
참고: local-port를 포트 번호로 바꾸십시오.
Linux 및 macOS:
lsof -P | grep -i "listen" | grep local-port
Windows:
netstat -abn | findstr "LISTEN" | findstr local-port
참고: Windows에서 위 명령을 실행하려면 관리자여야 합니다.
로컬 호스트가 로컬 포트 27017에서 수신 대기하는지 확인하려면 다음 명령을 실행합니다.
nc -zv 127.0.0.1 27017
출력을 검토합니다. SSH 터널이 성공적으로 설정되면 다음 예와 비슷한 출력이 표시됩니다.
❯ lsof -P | grep -i "listen" | grep 27017ssh 52787 user 7u IPv4 0x1256bbb543454447 0t0 TCP localhost:27017 (LISTEN) ❯ netstat -abn | findstr "LISTEN" | findstr 27017TCP 127.0.0.1:27017 0.0.0.0:0 LISTENING ❯ nc -zv 127.0.0.1 27017Connection to 127.0.0.1 port 27017 [tcp/*] succeeded!
위 예에서는 포트 27017을 사용합니다.
로컬 시스템에서 Amazon DocumentDB 클러스터에 연결
MongoDB Shell 또는 GUI 클라이언트를 사용하여 로컬 시스템에서 Amazon DocumentDB 클러스터에 연결합니다.
참고: 연결을 시작하기 전에 Amazon DocumentDB용 CA 인증서를 로컬 시스템에 다운로드하십시오.
MongoDB Shell을 사용하여 Amazon DocumentDB 클러스터에 연결하려면 다음 명령을 실행하십시오.
mongo --tls --tlsAllowInvalidHostnames --tlsCAFile global-bundle.pem --username primary-username --password primary-password
참고: primary-username을 데이터베이스 사용자 이름으로 바꾸십시오. primary-password를 데이터베이스 암호로 바꾸십시오.
위의 예시 명령은 --host 및 --port 파라미터를 명시적으로 지정하지 않습니다. --host 및 --port 파라미터를 지정하지 않으면 MongoDB Shell이 로컬 포트 2701에서 시스템의 로컬 호스트에 연결을 시도합니다. 그러면 SSH 터널이 Amazon DocumentDB 클러스터 엔드포인트로 연결을 전달합니다.
로컬 시스템에서 27017 이외의 포트를 사용하는 경우 --port 파라미터를 사용하여 사용자 지정 포트를 명시적으로 지정합니다. 자세한 내용은 MongoDB 웹 사이트의 원격 호스트의 배포에 연결을 참조하십시오.
중요 고려 사항
다음 고려 사항을 검토하십시오.
- 일부 GUI 클라이언트에는 MongoDB Compass 또는 Studio 3T와 같은 SSH 터널 옵션이 있습니다. 이러한 클라이언트를 사용하는 경우 MongoDB CLI를 사용하여 SSH 터널을 수동으로 만들고 관리할 필요가 없습니다. 대신 GUI 클라이언트의 연결 설정에 SSH 터널 구성을 저장하십시오. 자세한 내용은 특정 GUI 클라이언트의 설명서를 참조하십시오.
- SSL/TLS 호스트 이름 검증을 우회해야 하는 경우 --tlsAllowInvalidHostnames 파라미터를 사용하여 SSH 터널을 통해 연결하십시오. 연결 문자열에 있는 호스트 이름 mongodb://localhost:27017이 Amazon DocumentDB 클러스터 서버 인증서에 있는 호스트 이름과 일치하지 않습니다. Amazon DocumentDB 클러스터 엔드포인트를 사용하여 클러스터에 직접 연결하는 경우에는**--tlsAllowInvalidHostnames** 파라미터를 사용할 필요가 없습니다.
- MongoDB Compass 및 Studio 3T와 같은 GUI 클라이언트의 경우 연결 문자열에 tlsAllowInvalidHostnames 옵션을 지정합니다(tlsAllowInvalidHostnames=true). 또는 SSL/TLS 탭의 연결 설정에서 **잘못된 호스트 이름 허용** 옵션을 활성화합니다.
- SSH 터널을 사용하여 연결할 때는 클러스터 엔드포인트에 연결하는 것이 가장 좋습니다. 연결 문자열에 replicaSet=rs0을 지정하는 경우 오류가 발생할 수 있습니다. SSH 터널에 MongoDB Compass를 사용하는 경우 Direct Connection을 활성화하여 복제본 세트 연결을 끄십시오. 자세한 내용은 MongoDB 웹 사이트의 일반 연결 탭을 참조하십시오.
관련 정보
Amazon VPC 외부에서 Amazon DocumentDB 클러스터에 연결
MongoDB 웹 사이트의 MongoDB Compass는 무엇입니까?
