BLOG

AWS System Manager 신기능 출시… Session Manager를 사용한 포트 포워딩 가능
작성일: 2019년 10월 1일

불변 인프라 스트럭처 아키텍처 패턴을 채택 하는 고객이 점점 늘어나고 있습니다. 각 업데이트마다 전체 인프라를 재구축하고 재배치합니다. SSH 또는 RDP를 통해 서버에 접속하여 구성을 업데이트하거나 소프트웨어 업데이트를 배포하는 경우는 거의 없습니다. 그러나 기존 애플리케이션을 클라우드로 마이그레이션 할 때는 Amazon Elastic Compute Cloud (EC2)인스턴스에 접속하여 다양한 관리 또는 운영 작업을 수행하는 것이 일반적 입니다. 공격 범위를 줄이려면 AWS 는 점프 호스트라고도 하는 배스천 호스트를 사용하는 것이 좋습니다. 이 특수 목적의 EC2 인스턴스는 인터넷의 기본 액세스 지점이 되도록 설계되었으며, 프록시 역할을 합니다. 다른 EC2 인스턴스에 연결하려면 먼저 배스천 호스트에 SSH / RDP 하고, 거기서부터 대상 EC2 인스턴스로 연결합니다.

 

공격의 표면, 배스천 호스트를 관리 하는 운영상의 부담 및 발생하는 추가 비용을 더욱 줄이기 위해, AWS Systems Manager Session Manager를 사용하여, 별도의 배스천 호스트를 운영하거나 조작 할 필요없이 EC2  인스턴스에 안전하게 연결할 수 있습니다. EC2  인스턴스에서 SSH를 실행해야 합니다. 때로 시스템 관리자의 에이전트는 인스턴스에 설치되어 있고, 불러 오기 위한 IAM 권한을 가진 경우, 시스템 관리자 API를 AWS 관리 콘솔 또는 AWS 코맨드 라인 인터페이스 (CLI)안전하게 연결하기 위한 리눅스 또는 윈도우로 의 EC2 인스턴스를 사용할 수 있습니다.

 

EC2  인스턴스의 대화식 쉘은 https://en.wikipedia.org/wiki/Tunneling_protocol의 유일한 사용 사례는 아닙니다. 많은 고객이 SSH 터널을 사용 하여 공용 인터넷에 노출되지 않은 서비스에 원격으로 액세스하고 있습니다. SSH 터널링은 강력하지만 덜 알려진 SSH 기능으로 로컬 호스트와 원격 서비스간에 보안 터널을 만들 수 있습니다. EC2 간에 개인 파일을 쉽게 전송할 수 있도록 웹 서버를 실행한다고 가정 해 봅시다. 이 파일은 비공개여서 다른 사람이 해당 웹 서버에 액세스하는 것을 원하지 않으므로 127.0.0.1에서만 바인딩하도록 웹 서버를 구성하고, 인스턴스의 보안 그룹에 포트 80을 추가하지 않습니다. 로컬 프로세스만 웹 서버에 액세스 할 수 있습니다. 노트북에서 웹 서버에 액세스하기 위해 아래와 같이 노트북과 웹 서버 사이에 SSH 터널을 만듭니다.

 

이 명령은 SSH에게 ec2-user 사용자로 인스턴스에 연결하고, 로컬 노트북에서 포트 9999를 열고 인스턴스에서 localhost:80로 모든 것을 전달하도록 지시 합니다. 터널이 설정되면 http://localhost:9999에서 포트 80의 개인 브라우저를 지정 할 수 있습니다.

 

오늘 AWS Systems Manager Session Manager 용 포트 포워딩을 발표 합니다. 포트 전달을 사용하면 서버에서 SSH 서비스를 시작하거나 보안 그룹에서 SSH 포트를 열거나 배스천 호스트를 사용할 필요 없이 프라이빗 서브넷에 배포 된 인스턴스 간에 터널을 안전하게 만들 수 있습니다.

 

SSH 터널과 마찬가지로 포트 전달을 사용하면 노트북간에 트래픽을 전송하여 인스턴스의 포트를 열 수 있습니다. 포트 전달이 구성되면 로컬 포트에 연결하고 인스턴스 내부에서 실행되는 서버 응용 프로그램에 액세스 할 수 있습니다. Systems Manager Session Manager의 포트 전달 사용은 API 액세스 및 포트 전달 SSM 문서에 대한 IAM 정책을 통해 제어됩니다. 이들은 조직 내에서 누군가 터널을 만들 권한이 있는 사람을 제어 할 수 있는 두 개의 다른 장소입니다.

 

포트 포워딩을 지금 시험해 보려면 이 CDK 스크립트를 사용 하여 프라이빗 및 퍼블릭 서브넷이 있는 VPC와 프라이빗 서브넷에서 웹 서버를 실행하는 단일 인스턴스를 배포 할 수 있습니다 . 아래 그림은 이 블로그 게시 글에서 사용중인 인프라를 보여줍니다.

 

 

인스턴스는 프라이빗하며 퍼블릭 IP 주소나 DNS 이름이 없습니다. VPC 기본 보안 그룹은 SSH를 통한 연결을 승인하지 않습니다. 시스템 관리자의 에이전트는, 당신의 실행 EC2 인스턴스를 사용하여 시스템 관리자의 서비스 엔드 포인트로 통신 할 수 있어야 합니다. 따라서 프라이빗 서브넷에는 NAT 게이트웨이에 대한 라우팅 테이블이 있거나 그렇게 하려면 AWS 프라이빗 링크 를 구성 해야 합니다 .

 

시스템 관리자의 세션 매니저 포트 전송을 사용하여 프라이빗 인스턴스에서 실행 되고 있는 웹 서버에 액세스 해 봅시다.

 

이를 수행하기 전에 EC2  인스턴스 에서 다음 전제 조건이 충족되는지 확인 해야 합니다.

 

  • System Manager Agent가 설치되어 실행 중 이어야 합니다. (버전3.672.0 이상, Linux 또는 Windows에 대한 지시 사항 참조). 에이전트는 Amazon에서 제공하는 Amazon Linux 1 & 2, Windows 및 Ubuntu AMI에서 기본적으로 설치 및 시작됩니다 (정확한 버전 은 이 페이지 참조). 이 기능을 사용할 때는 아무런 조치도 필요하지 않습니다.
  • EC2 인스턴스에는 Systems Manager API 를 호출 할 권한이 있는 IAM 역할이 있어야 합니다. 이 예시에서는 AmazonSSMManagedInstanceCore를 사용 하고 있습니다.

 

노트북에서 다음을 수행 해야 합니다.

 

 

사전 요구 사항이 충족되면 AWS Command Line Interface (CLI) 를 사용하여 터널을 생성합니다 (이 CDK 스크립트를 사용하여 인스턴스를 시작했다고 가정)

 

[Linux 및 Mac OS] :

 

# find the instance ID based on Tag Name

INSTANCE_ID=$(aws ec2 describe-instances \

               –filter “Name=tag:Name,Values=CodeStack/NewsBlogInstance” \

               –query “Reservations[].Instances[?State.Name == ‘running’].InstanceId[]” \

               –output text)

# create the port forwarding tunnel

aws ssm start-session –target $INSTANCE_ID \

                       –document-name AWS-StartPortForwardingSession \

                       –parameters ‘{“portNumber”:[“80″],”localPortNumber”:[“9999”]}’

 

Starting session with SessionId: sst-00xxx63

Port 9999 opened for sessionId sst-00xxx63

Connection accepted for session sst-00xxx63.

[Windows] (on one single line)

 

aws ssm start-session –target “Your Instance ID” –document-name AWS-StartPortForwardingSession –parameters “portNumber”=[“80”],”localPortNumber”=[“56789”]

 

이제 브라우저가 포트 9999를 가리키고 개인 웹 서버에 액세스 할 수 있습니다. 포트 전달 세션을 종료하려면 ctrl-c를 입력 하십시오.

 

 

세션 관리자 포트 전달은 아래 그림과 같이 SSH 터널링과 유사한 터널을 만듭니다.

 

 

포트 전달은 Windows 및 Linux 인스턴스에서 작동합니다. 현재 AWS 시스템 관리자가 이용 가능한 모든 AWS 리전에서 이용 할 수 있습니다. EC2 인스턴스에 연결할 때 추가 비용 없이 NAT 게이트웨이 또는 VPC 프라이빗 링크의 발신 대역폭에 대한 요금이 부과됩니다.

 

원문 URL: https://aws.amazon.com/ko/blogs/aws/new-port-forwarding-using-aws-system-manager-sessions-manager/

 

** 메가존 클라우드 TechBlog는 AWS BLOG 영문 게재 글 중에서 한국 사용자들에게 유용한 정보 및 콘텐츠를 우선적으로 번역하여 내부 엔지니어 검수를 받아서, 정기적으로 게재하고 있습니다. 추가로 번역 및 게재를 희망하는 글에 대해서 관리자에게 메일 또는 SNS 페이지에 댓글을 남겨주시면, 우선적으로 번역해서 전달해드리도록 하겠습니다.