AWS Systems Manager를 통해 SSH 터널을 사용하여 프라이빗 VPC 리소스에 액세스하려고 합니다. 어떻게 해야 합니까?

최종 업데이트 날짜: 2020년 8월 13일

AWS Systems Manager를 통해 SSH 터널을 사용하여 프라이빗 VPC 리소스에 액세스하려고 합니다. 어떻게 해야 합니까?

간략한 설명

AWS Systems Manager 세션 관리자는 Systems Manager 인프라를 사용하여 인스턴스에 SSH와 같은 세션을 생성합니다. 이 기능은 세션 관리자가 실제 SSH 연결을 터널링하므로 로컬 시스템에서 직접 VPC 내의 다른 리소스로 터널링할 수 있습니다. 생성한 관리형 인스턴스는 AWS 리소스에 대한 배스천 호스트 또는 게이트웨이 역할을 합니다. 이 구성의 이점은 다음과 같습니다.

보안 강화: 이 구성은 아웃바운드 포트 443이 Systems Manager 인프라에 연결되는 하나의 Amazon Elastic Compute Cloud(Amazon EC2) 인스턴스(배스천 호스트)에서만 작동합니다. 이렇게 하면 인바운드 연결 없이 세션 관리자를 사용할 수 있습니다. 로컬 리소스는 배스천 호스트 역할을 하는 인스턴스의 인바운드 트래픽만 허용해야 합니다. 따라서 인바운드 규칙을 공개적으로 열 필요가 없습니다.

사용 편의성: 로컬 시스템에서 프라이빗 VPC의 리소스에 직접 액세스할 수 있습니다.

참고: Systems Manager를 사용하여 터미널에서 EC2 인스턴스에 액세스하는 방법에 대한 지침은 세션 관리자 시작하기를 참조하십시오. 

사전 조건

세션 관리자 사전 조건 완료

AWS CLI용 세션 관리자 플러그인 설치

세션 관리자를 통해 SSH 연결을 사용하도록 설정하고 SSH 연결 요구 사항이 충족되는지 확인합니다.

참고: SSH 기능을 사용하려면 다음을 설치해야 합니다.

1.    AWS Systems Manager Agent(SSM Agent) v2.3.672.0 이상.

2.    로컬 시스템의 세션 관리자 플러그인 v1.1.23 이상.

3.    로컬 시스템의 AWS 명령줄 인터페이스(CLI) v1.16.12 이상.

해결 방법

1.    세션 관리자를 사용하여 SSH 터널을 시작합니다.

ssh -i /path/my-key-pair.pem username@instance-id -L localport:targethost:destport

2.    1단계에서 생성한 대상 포트에서 터널에 대한 액세스를 테스트합니다.

telnet 127.0.0.1 localport

앞의 예제에서 127.0.0.1localporttargethost: destport에 액세스하도록 변환됩니다.

구성 예제

시나리오 1

로컬 시스템에서 터널을 생성하고 SSM 호스트를 배스천 호스트로 사용하여 프라이빗 EC2 인스턴스에서 실행 중인 MySQL 데이터베이스에 액세스합니다.

사용된 리소스

instance1: 배스천 호스트 역할을 하고 AWS Systems Manager에서 관리하는 EC2 인스턴스.

    Hostname = ec2-198-51-100-1.compute-1.amazonaws.com Instance id = i-0123456789abcdefa

instance2: 기본 포트 3306에서 MySQL 데이터베이스를 실행하는 EC2 인스턴스.

    Hostname = ec2-198-51-100-2.compute-1.amazonaws.com

안내

1.    로컬 시스템(예: 노트북)에서 SSH 명령을 실행하고 세션 관리자 기반 SSH를 사용하여 instance1에 연결합니다. 이 명령은 instance2의 포트 3306에 대한 터널을 설정하여 포트 9090의 로컬 시스템에 제공합니다.

ssh -i /path/key-pair_instance1.pem username_of_instance1@i-0123456789abcdefa -L 9090:ec2-198-51-100-1.compute-1.amazonaws.com:3306

앞의 예제에서 포트 9090은 로컬 시스템에서 사용 가능한 포트입니다.

2.    로컬 시스템에서 1단계에서 사용한 사용 가능 포트(이 예에서는 9090)를 사용하여 데이터베이스에 액세스합니다.

mysql -u user -h 127.0.0.1:9090 -p password

참고: instance2에 존재하는 보안 그룹, 네트워크 ACL, 보안 규칙 또는 타사 보안 소프트웨어가 instance1의 트래픽을 허용하는지 확인하십시오. 앞의 예에서 instance2instance1에서 포트 3306 액세스를 허용해야 합니다.

시나리오 2

로컬 시스템에서 다음으로 단일 SSH 연결을 통해 3개의 터널을 생성합니다.

  • instance1의 SSH 포트에 연결
  • instance2의 MySQL 데이터베이스에 액세스
  • instance3의 웹 서버에 액세스

사용된 리소스

instance1: 배스천 호스트 역할을 하고 AWS Systems Manager에서 관리하는 EC2 인스턴스.

    Hostname = ec2-198-51-100-1.compute-1.amazonaws.com Instance id = i-0123456789abcdefa

instance2: 프라이빗 서브넷에 위치한 EC2 데이터베이스 인스턴스.

    Hostname = ec2-198-51-100-2.compute-2.amazonaws.com

instance3: 프라이빗 서브넷에 위치한 EC2 인스턴스

    Hostname = ec2-198-51-100-3.compute-3.amazonaws.com

안내

1.    SSH 명령을 사용하여 3개의 터널로 세션을 시작합니다.

참고: 명령에는 세 가지 터널 호출이 있습니다.

ssh -i /path/key-pair_instance1.pem username_of_instance1@i-0123456789abcdefa -L 8080:ec2-198-51-100-1.compute-1.amazonaws.com:22 -L 9090:ec2-198-51-100-2.compute-1.amazonaws.com:3306 -L 9091:ec2-198-51-100-3.compute-1.amazonaws.com:80

이전 예제에서 8080, 9090 및 9091은 로컬 시스템에서 사용할 수 있는 포트입니다.

2.    로컬 시스템에서 instance1로 SSH에 액세스합니다. 로컬 포트 8080은 instance1의 SSH 포트(22)로 터널링됩니다. key-pairusername은 터널링할 인스턴스용입니다(이 예제에서는 instance1).

ssh -i /path/key-pair_instance1.pem username_of_instance1@127.0.0.1 -p 8080

3.    instance2의 데이터베이스에 액세스합니다. 로컬 포트 9090은 instance2의 포트 3306으로 터널링됩니다.

mysql -u user -h 127.0.0.1:9090 -p password

4.    로컬 시스템에서 브라우저를 열고 탐색하여 instance3의 웹 사이트에 액세스합니다.

http://127.0.0.1:9091

참고: instance2instance3에 존재하는 보안 그룹, 네트워크 ACL, 보안 규칙 또는 타사 보안 소프트웨어가 instance1의 트래픽을 허용하는지 확인하십시오. 앞의 예제에서 instance3 instance1에서 포트 80 액세스를 허용해야 합니다.


이 문서가 도움이 되었습니까?


결제 또는 기술 지원이 필요합니까?