AWS EC2 Instance Connect Endpoint를 사용하면 퍼블릭 IP 없이도 SSH 접속이 가능하며, IAM을 이용해 접속을 제어할 수 있다.
하지만 일반적인 SSH 클라이언트(예: VS Code Remote-SSH)와는 호환되지 않아 추가적인 설정이 필요하다.
따라서 EC2 내부에서 직접 SSH 키를 생성하여 로컬에서 SSH 접속을 위한 인증 수단으로 사용해야 한다.
그러면 드는 의문은..
EIC Endpoint를 사용하는 이유가 SSH 키 관리를 안 하려고 하는 건데, 결국 SSH 키를 직접 생성해서 관리해야 한다면 의미가 있는가? 라는 생각이 들게 된다.
그래서 "EIC Endpoint를 사용하면서 SSH 키 관리 부담 줄이기”를 위해 찾아보니 다음과 같은 방법이 있었다.
SSH 키를 AWS Systems Manager Parameter Store에 저장하기
AWS Systems Manager Parameter Store에 SSH 키를 저장해두고, 필요할 때 EC2에서 불러와 사용하면 SSH 키를 직접 보관하지 않아도 된다는 장점이 있다.
따라서 먼저 SSH 키를 활용하여 VS Code 원격 접속을 설정하고,
이후 SSH 키를 AWS Systems Manager Parameter Store에 저장하는 순서로 진행하였다.
AWS EC2 Instance Connect Endpoint 생성하기
LG CNS의 기술 블로그를 참고하였다.
https://www.lgcns.com/blog/cns-tech/aws-ambassador/45743/
Amazon EC2 Instance Connect Endpoint 를 활용한 폐쇄된 VPC 환경의 AWS EC2 접근 - LG CNS
1. 개요 Amazon EC2를 사용하면 다양한 방법으로 EC2에 접근이 가능합니다. EC2가 Public Subnet에 노출되어 있다면 Public IP로 바로 접근 하거나, 일반적으로는 Bastion Host를 별도로 구성하여 한 번 거쳐서
www.lgcns.com
생성하다보면 중간에 '클라이언트 IP 보존하기' 옵션이 있다.
기본적으로 EIC Endpoint를 통해 SSH 접속을 하면 클라이언트의 원래 IP 주소가 EIC Endpoint의 사설 IP로 변환 되는데,
“클라이언트 IP 보존” 옵션을 활성화하면 원래 클라이언트의 IP 주소가 유지된다.
그러면 언제 필요한가?
- 특정 IP만 허용해야 하는 경우
EC2의 보안 그룹 또는 네트워크 ACL에서 특정 IP만 SSH 접속을 허용하도록 설정한 경우 기본적으로 EIC Endpoint를 사용하면 클라이언트의 IP가 EIC Endpoint의 사설 IP로 변경되기 때문에, 원래 클라이언트의 IP를 보존해야 접근이 가능하다. - 인스턴스 접근 로그에 클라이언트 IP를 남겨야 하는 경우 (보안용)
어떤 사용자가 어느 IP에서 접속했는지 명확하게 로그를 남길 수 있다.
즉, 접속한 IP를 기록해야하거나 추적해야하는 상황에서 쓰인다.
상황에 맞게 체크하면 될 것 같다.
EC2에서 SSH 키를 생성하여 VS Code Remote-SSH 연결하기
SSH 키 생성
EC2 내부에서 SSH키 생성
ssh-keygen -t rsa -b 4096 -f ~/.ssh/[key 이름]
- ~/.ssh/[key 이름] → 개인 키
- ~/.ssh/[key 이름].pub → 공개 키
공개 키를 인증 파일에 추가
cat ~/.ssh/[key 이름].pub >> ~/.ssh/authorized_keys
chmod 600 ~/.ssh/authorized_keys
EC2에서 SSH 키 내용 확인 후 복사
cat ~/.ssh/[key 이름]
복사한 내용 로컬 ~/.ssh/ 디렉토리에 저장
vi ~/.ssh/[key 이름]
VS Code에서 SSH 설정 파일 수정 후 접속
F1 누르고 ~/.ssh/config 에 아래 내용 추가
Host [호스트 이름]
Hostname [EIC Endpoint의 DNS 주소]
User ec2-user
ProxyCommand aws ec2-instance-connect open-tunnel --instance-id [접속할 EC2 인스턴스 ID] --region [Region]
IdentityFile ~/.ssh/[key 이름]
Port 22
- Hostname
EIC Endpoint의 DNS 확인방법 (콘솔로도 확인 가능)
aws ec2 describe-instance-connect-endpoints --query "InstanceConnectEndpoints[*].DnsName"
- User
Amazon Linux에서는 기본 사용자 계정이 ec2-user,
Ubuntu에서는 기본 사용자 계정이 ubuntu이다.
(OS, 계정에 따라 수정할 것) - ProxyCommand
EIC Endpoint를 사용하여 SSH 연결을 터널링
aws ec2-instance-connect open-tunnel 명령어 → EC2 Instance Connect를 프록시로 사용하여 EC2에 접근 - IdentityFile
SSH 인증 시 사용할 개인 키 파일(Private Key) 경로 지정 - Port
보안 그룹에서 해당 포트를 인바운드 규칙에 추가하여 허용해야 한다.
Remote-SSH 연결
F1 누르고 호스트에 연결
~/.ssh/config 에 지정해줬던 호스트 이름 확인 후 연결
조금 기다리다보면
연결 완료되고, 작업할 폴더 열어주면 완료!
'Projects > AWS' 카테고리의 다른 글
EC2에서 OpenVPN 서버 Docker container로 구축하기 (0) | 2025.04.07 |
---|---|
OpenVPN을 통해 Private Subnet에 위치한 RDS 접근하기 (0) | 2025.03.03 |