본문 바로가기
Server&Infra/Network

AWS VPC Bastion Host로 SSH 접속하기

by Deoking 2023. 4. 26.
반응형

Overview

VPC에서 private 서브넷은 public 서브넷과 반대로 외부 인터넷과 격리어 내부적으로만 사용하기 위한 서브넷입니다. 하지만 경우에 따라 외무와 통신이 필요한 경우가 존재하는데, 이때 NAT Gateway와 Bastion Host가  격리된 사설망 안에서 외부 인터넷과 통신할 수 있도록 도와줍니다. 
NAT Gateway의 경우, private 서브넷에서 외부 인터넷으로 나갈 수 있도록 해주는데, 외부에서 private 서브넷으로는 접속이 불가능합니다. 하지만 반대로 외부에서 private 서브넷으로 접근이 필요한 경우도 존재합니다. 이를 간접적으로 연결해 줄 수 있는 게 Bastion Host입니다. 지금부터 Bastion Host의 구성 방법을 알아보겠습니다.

 

NAT Gateway 구성하는 방법은 아래글을 참조하세요.

 

AWS VPC NAT Gateway 구성하기

Overview VPC에서 private 서브넷은 public 서브넷과 반대로 외부 인터넷과 격리어 내부적으로만 사용하기 위한 서브넷입니다. 하지만 경우에 따라 외무와 통신이 필요한 경우가 존재하는데, 이때 NAT Ga

deoking.tistory.com


1. Bastion Host 란?

Bastion Host란 Public 서브넷에 위치하며 외부에서 Private 서브넷으로 접근이 필요한 경우 연결을 제공하는 역할을 합니다.
인스턴스 관리자가 Bastion Host로 SSH 연결을 한 후, Bastion Host에서 Private 서브넷의 Host로 SSH 연결을 하는 형태로 Private 서브넷에 접근할 수 있게 됩니다.
아래 그림을 보면 인스턴스 관리자는 Bastion Host로 접속하여 private 서브넷 안에 있는 Linux 인스턴스에 접근합니다.

 

2. Bastion Host 구성하기

지금부터 Bastion Host를 구성해 보겠습니다. 구성 순서는 아래와 같습니다.

  1. VPC, Priavte/Public 서브넷 구성
  2. Bastion Host EC2 생성
  3. Private EC2 생성(Private 서브넷 내 EC2 인스턴스)
  4. Bastion Host를 통한 Private EC2 접속 테스트

 

VPC, Priavte/Public 서브넷 구성

기본 VPC 및 서브넷 구성은 아래글을 참고하세요~

 

AWS VPC 인프라 구축(Subnet, Routing, Internet Gateway)

Overview 본 글에서는 VPC 네트워크를 AWS 리소스로 구성하는 방법에 대해 기술합니다. 1. VPC(Virtual Private Cloud) VPC는 사용자가 정의하는 aws 계정 사용자 전용 가상의 네트워크입니다. 사용자는 자기가

deoking.tistory.com

 

Bastion Host EC2 생성

VPC를 선택 및 public 서브넷으로 설정해 줍니다. 보안 그룹은 모든 트래픽(0.0.0.0/0)에 대해 ssh 22번 포트를 허용하는 규칙을 부여합니다. (키페어도 설정해 줍니다.)

 

private subset EC2 생성

VPC를 선택 및 private 서브넷으로 설정해 줍니다. (키페어도 설정해 줍니다.)
보안 그룹 설정 시 다른 점은 Bastion Host EC2 생성 시 등록한 bastion-sg 보안그룹을 원본(소스)에 등록해 줍니다. 이는 public 서브넷의 Bastion Host에서 들어오는 요청만 허용하기 위해서입니다.

 

Bastion Host를 통한 Private EC2 접속 테스트

아래 ssh 명령어로 Bastion Host 접속해 봅니다.

# SSH 접속 명령어 예시
ssh -i /myKey/ec2-keypair.pem ec2-user@1.23.23.123

접속 결과 화면

 

이번에는 Bastion Host로 Private Instance에 접속해 봅니다.
private 서브넷으로 접속하기 위해서는 사용할 키페어가 Bastion Host EC2에 미리 업로드되어 있어야 합니다.

# 파일 업로드 명령어
# scp -i [Bastion-Host 키페어경로] [업로드할파일] [user id]@[ec2 public IP]:[저장경로]
scp -i /Users/user/keypair.pem /Users/user/new-keypair.pem ec2-user@1.12.23.123:/home/ec2-user

Bastion Host에 접속한 상태에서 업로드된 키로 Private 서브넷의 EC2에 접속합니다.

# SSH 접속 명령어 예시
ssh -i /home/ec2-usernew-keypair.pem ec2-user@10.0.3.244

접속 결과 화면

 

SSH Gateway를 통한 private 서브넷 접속(jumb host)

위와 같이 매번 2번의 ssh 명령어를 통해 접속하는 경우 불편할 수도 있습니다. 또한 private 접근을 위한 키페어도 Bastion Host에 업로드해 드어야 하기 때문에 보안에도 좋아 보이지 않습니다.

ssh gateway를 통한 proxy 접속 명령어로 한 번에 접속해 보도록 하겠습니다.

# ssh -i [Private키페어] -o "ProxyCommand ssh -W %h:%p -i [Bastion-Host 키페어경로]  [Bastion-Host계정명]@[Bastion-Host IP]" [Private계정명]@[Private IP]
ssh -i /Users/user/priavte-keypair.pem -o "ProxyCommand ssh -W %h:%p -i /Users/user/bastion-keypair.pem ec2-user@3.12.123.123" ec2-user@10.0.3.244

 

 


Conclusion

지금까지 Bastion Host를 구성하는 방법에 대해 알아보았습니다. 다소 번거롭게 생각할 수 있지만 Local -> Bastion Host -> Private Instance라는 절차를 둠으로써 내부망에 대한 직접 접근을 차단하면서 관리자의 내부망 접근을 보다 안전하게 가져갈 수 있습니다.


본 글은 개인적 기록을 목적으로 작성하였습니다.
작게나마 도움 되셨기를 바라며, 더 좋은 의견이나 잘못된 부분이 있다면 댓글을 남겨주세요~

 

반응형

댓글