프라이빗 IP 만 보유한 EC2에 접근하기 위해선 기존엔 퍼블릭 IP를 보유한 Bastion Host을 통한 터널링 접속, AWS Session Manager 사용 등의 방법을 사용 했습니다.
허나 위 2가지 방법은 Bastion Host의 경우 유지 비용 및 운영 오버헤드가 요구되며, Session Manager는 프라이빗 EC2 내 에이전트 설치 및 SSM 권한 부여, 웹 브라우저를 통한 접속만 제공하는 등의 단점이 있습니다.
6월 13일 AWS에서는 새로운 기능인 AWS EC2 Instance Connect (EIC) Endpoint 를 출시했습니다. EIC 엔드포인트를 사용하면 프라이빗 리소스에 연결하기 위해 더 이상 VPC의 IGW, 리소스의 퍼블릭 IP 주소, Bastion Host 또는 에이전트가 필요하지 않습니다.
EIC 엔드포인트는 2가지 방법으로 사용됩니다. 첫째, AWS CLI를 사용하여 로컬 PC에서 엔드포인트까지 Websocket 터널을 생성하는데 사용됩니다. 터널을 설정한 후에는 선호하는 SSH 클라이언트를 사용해 루프백 주소(127.0.0.1 또는 localhost) 로 지정하고 평소와 같이 연결합니다. 둘째, AWS 콘솔을 통해 VPC 내부의 리소스에 액세스 합니다.
EIC 엔드포인트에 대한 자세한 내용은 아래 문서 참고바라며, 이번 게시물 에선 EIC 엔드포인트 생성 및 EIC 엔드포인트를 통한 Linux, Window 접속 실습을 진행 해보겠습니다.
https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/Connect-using-EC2-Instance-Connect-Endpoint.html
실습 순서와 아키텍처는 다음과 같습니다. (VPC, 서브넷, 인스턴스 생성 과정은 생략)
1. EIC 엔드포인트 생성
2. AWS 콘솔을 통한 접속 (Linux)
3. AWS CLI를 통한 접속 (Linux, Window)
1. EIC 엔드포인트 생성
1) AWS VPC 콘솔 접속 후 엔드포인트 생성 클릭
2) 아래 정보대로 엔드포인트 생성
- 이름 태그 : 원하는 값으로 지정
- 서비스 범주 : EC2 Instance Connect Endpoint
- VPC : 접속하고자 하는 인스턴스와 동일한 VPC
- 보안 그룹 : 아웃바운드 22, 3389, 3306 오픈 돼있는 보안 그룹
- 서브넷 : 엔드포인트가 위치할 서브넷
2. AWS 콘솔을 통한 접속 (Linux)
1) EC2 콘솔 접속 후 Linux 인스턴스 선택 후 연결 클릭
2) EC2 인스턴스 연결 엔드포인트를 사용하여 연결 선택 후 1에서 생성한 엔드포인트 선택 및 연결
3) 정상 접속 확인
3. AWS CLI를 통한 접속 (Linux, Window, RDS) : MobaXterm 사용
3.1 AWS CLI를 통한 Linux 접속
1) AWS CLI 설치 및 자격 증명 설정 진행 (2.12 버전 이상 필요)
- CLI 권한 참조 : https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/permissions-for-ec2-instance-connect-endpoint.html
2) open-tunnel 명령을 사용하여 프라이빗 터널 생성 및 인스턴스 접속
3.2 AWS CLI를 통한 Window 접속
1) open-tunnel 명령을 실행하여 새 TCP 연결 및 프라이빗 터널 생성
2) AWS EC2 콘솔의 접속하고자 하는 Window 인스턴스 선택 후 연결 클릭
3) 인스턴스 생성 시 사용한 키파일을 통한 암호 가져오기 진행
4) 원격 데스크톱 연결 실행 후 2)에서 설정한 로컬 포트 번호로 접속 진행
이상 실습을 통해 EIC를 사용해봤습니다. EIC를 사용해보면서 확인한 장점은 아래와 같았습니다.
- Bastion Host 필요 없음
- IAM 을 통해 제어되는 연결
- 인터넷 연결이 필요없는 VPC
- 인스턴스에서 에이전트(예: SSM 에이전트)를 실행할 필요 없음
- Putty 또는 MobaXterm 과 같은 워크스테이션에서 클라이언트 소프트웨어를 사용할 수 있음
- RDP를 사용하여 Windows 인스턴스에 연결
- EIC 엔드포인트와 관련된 API 호출은 AWS CloudTrail에 기록되어 엔드포인트 활동에 대한 중앙 집중식 보기를 제공하고 보안 감사에 용이함
단, EIC 수신자의 포트 번호가 TCP 22,3389 이외는 허용하지 않아 아래와 같은 에러가 나오며 WebSocket 접속이 단절됩니다.
awscli.customizations.ec2instanceconnect.websocket - ERROR - {"ErrorCode":"InvalidParameter","Message":"The specified RemotePort is not valid. Specify either 22 or 3389 as the RemotePort and retry your request."}
따라서 RDS 접속과 같은 다른 포트를 사용하는 프라이빗 서비스와는 사용할 수 없어 Bastion Host를 완벽히 대체하긴 어려워 보입니다.
- 참고 문서
https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/Connect-using-EC2-Instance-Connect-Endpoint.html
'AWS' 카테고리의 다른 글
Amazon Personalize를 활용한 실시간 추천 사이트 만들기 (0) | 2023.07.05 |
---|---|
AWS CodeSeries를 활용한 CI/CD 구축 (0) | 2023.07.03 |
AWS Config를 사용해서 미사용 EIP 체크 및 자동 삭제 해보기 (0) | 2023.05.24 |
AWS Management Console Private Access 용도 (1) | 2023.05.19 |
AWS Management Console Private Access 살펴보기 (0) | 2023.05.19 |