Bastion Host란, 외부에서 내부 네트워크로 들어가는 유일한 입구 역할을 한다.
모든 외부 접속은 이 베스천 호스트를 통해서만 이루어진다.
현재 상황
지금진행 중인 프로젝트는 Public Subnet에 있는 Bastion EC2를 거쳐서 Private Subnet에 있는 Ody EC2에 접근할 수 있다.
우리 서버는 Ody EC2에서 실행되고 있으므로 해당 EC2로의 접근이 필요했고
이 Bastion EC2는 모든 프로젝트 팀이 접근가능한 EC2다.
원래라면 Public Subnet에 EC2에 Private Subnet EC2의 Pem키를 scp로 전송해 해당 Pem키로 private Subnet EC2로 접근했겠지만
Bastion EC2에 우리 프로젝트 서버의 Pem 키를 넣으면 모든 프로젝트 팀이 이를 사용할 위험이 있다.. (믿기야 하지만 ㅎㅎ)
따라서 로컬에 가지고 있는 Pem 키들로 Bastion EC2를 경유해 Ody EC2로 접근하고자 프록시 점프를 사용하게 되었다.
프록시 점프 (Proxy Jump)
프록시 점프는 SSH 연결을 통해 중간 서버를 거쳐 최종 목적지 서버에 접근하는 기술이다.
어떻게 적용하는지 쉽게 알아보자.
~/.ssh경로에서 config 파일 작성
아래 처럼 ~/ 경로에 있는 .ssh 폴더에서 config 파일을 작성해주자.
Host bastion-ec2
HostName bastion-ec2-ip-주소
User ubuntu
Port 22
IdentityFile ~/.ssh/xxx.pem
Host ody-ec2
HostName ody-ec2-ip-주소
User ubuntu
Port 22
IdentityFile ~/.ssh/xxx.pem
ServerAliveInterval 300
ProxyCommand ssh A -W %h:%p
config에 사용할 수 있는 옵션들
필자는 위와 같이 옵션을 사용해 작성했는데 사용한 옵션과 추가적인 옵션들을 알아보면 다음과 같다.
옵션 | 설명 |
Host | 연결할 호스트의 별칭을 정의 |
HostName | 실제 연결할 서버의 IP 주소나 도메인 이름을 지정 |
User | 연결 시 사용할 사용자 이름을 지정 (ec2는 whoami의 유저명) |
Port | SSH 연결에 사용할 포트 번호를 지정 (기본값 22) |
IdentityFile | 인증에 사용할 SSH 키 파일의 경로를 지정 |
ServerAliveInterval | 설정한 초 마다 시그널을 보내서 통신이 자동으로 끊기는 것을 방지 |
ProxyCommand | 프록시 명령을 지정 -W : SSH의 옵션으로, 표준 입력과 출력을 원격 호스트의 포트로 전달 %h : 최종 목적지 Host를 의미 %p : 최종 목적지 호스트이 접속 포트를 의미 |
ProxyJump | 프록시 점프에 사용할 중간 서버를 지정 |
실행
위 설정들을 마쳤다면 다음과 같이 간단한 명령어를 통해 원하는 Host 서버로 접속이 가능하다.
// bastion-ec2로 접속
ssh bastion-ec2
// ody-ec2로 접속
ssh ody-ec2
이제 명령어 한 번으로 private EC2로 접근 가능하게 되었다 👍🏻
'◼ DevOps' 카테고리의 다른 글
[Docker] 도커 옵션 쉽게 알아보고 제대로 활용하기 (2) | 2024.08.31 |
---|---|
Nginx로 SSL 인증서 발급 및 https 적용하기 (+ 재발급) (0) | 2024.08.20 |
[Spring] ELK + Kafka를 활용해 실시간 로그 수집하기 (0) | 2023.10.06 |
[무중단 배포] Nginx를 사용해 EC2에 무중단 배포 적용하기 (0) | 2023.09.28 |
[Spring] kafka와 SSE(Server Send Event)를 사용한 실시간 알림 전송 방법 (4) | 2023.09.20 |