DevOps

Bastion 서버란 무엇인가

주인장 꼬비 2023. 5. 13. 16:07

올해초에 인프라 전환을 하기 전에 서비스를 배포할 때 Bastion서버라는 곳에 접속한 다음에 여러 커맨드를 입력하고 배포를 했었다. 당시의 서비스 배포 과정은 다음과 같았다.

$ ssh -i ~/.ssh/id_rsa deploy@3.xxx.xxx.xxx -A

$ conn api1

$ git pull

$ yarn build

$ pm2 restart 0

대충 이렇게 하면 서비스 배포가 된다는 것은 알고 있었는데 어떤 과정인지 잘 몰랐어서 늦게나마 찾아보고 정리했다.

 

명령어에 대한 설명은 다음과 같다. 

$ ssh -i ~/.ssh/id_rsa deploy@3.xxx.xxx.xxx -A

외부에서 deploy라는 사용자로 3.xxx.xxx.xxx라는 IP주소를 가진 서버에 접속한다. 이때 ~/.ssh/id_rsa 에 있는 키를 사용하기 위해 `-i` 옵션을 사용했다. (-i 옵션은 사용자가 특정 개인 키 파일을 지정하여 SSH 인증을 수행하도록 도와주는 옵션이다)

 

-A 옵션을 사용하면 로컬 컴퓨터의 SSH 에이전트에 등록된 인증 키를 사용하여 접속한 호스트로부터 다른 호스트로 접속할 때 인증 과정을 거치지 않고도 인증할 수 있는 편리한 기능을 제공한다. 이는 Bastion 서버를 통해 다른 서버에 접속할 때 중간 단계의 인증을 생략하고 편리하게 접속할 수 있도록 도와준다.

 

$ conn api1

$ econn api1

`conn api1`은 Bastion 서버를 통해 내부 사설 네트워크에 있는 api1라는 서버에 접속한 것이다. Bastion 서버를 통해 내부 서버에 접근하고 있으므로, 외부에서 직접적으로 api1 서버에 접속하는 것은 불가능하지만 Bastion 서버를 통해 간접적으로 접속할 수 있었다.

 

이러한 방식으로 bastion 서버를 거쳐 내부 사설 네트워크에 있는 api1 서버에 접속해서 서비스를 배포하였다. 이를 통해 보안을 강화하고 내부 서버에 안전하게 접근할 수 있었다.

 

Bastion 서버 구성도

 

Bastion 서버

Bastion 서버는 보안적인 이유로 외부에서 직접적으로 접속할 수 없는 사설 네트워크에 위치한 서버에 접근하기 위한 중간 단계의 서버다. Bastion 서버는 일종의 접근 게이트웨이 역할을 하며, 외부 클라이언트가 Bastion 서버에 접속한 후에야 내부 사설 네트워크의 서버로 접근할 수 있도록 해준다.

 

주로 AWS(Amazon Web Services)에서 사용되는 용어이며, AWS에서는 "AWS Systems Manager Session Manager" 또는 "AWS EC2 Instance Connect"와 같은 서비스를 사용하여 Bastion 서버 없이도 보안적인 접속을 제공하기도 한다.

 

외부 클라이언트는 SSH 또는 RDP와 같은 프로토콜을 사용하여 Bastion 서버에 접속한 후, Bastion 서버를 통해 내부 사설 네트워크에 있는 서버에 접근할 수 있다. 이를 통해 외부에서 내부 서버로의 직접적인 접근을 차단하고, 보안 상의 이점을 얻을 수 있다. Bastion 서버는 방화벽 설정 및 접근 제어 정책 등을 통해 보안을 강화할 수 있다.

 

즉, Bastion 서버는 외부 클라이언트와 내부 사설 네트워크 사이의 중계 역할을 수행하여 보안을 강화하고, 외부에서 내부 서버로의 접근을 제어하는 데 사용된다.

 

conn 옵션과 econn 옵션

  • conn: conn은 SSH 연결을 의미한다. 일반적으로 ssh 명령어 뒤에 사용되며, 연결하려는 호스트 또는 IP 주소를 지정한다. 예를 들어, ssh user@hostname의 형식으로 사용할 수 있습니다. conn은 SSH 클라이언트가 SSH 서버로 연결을 시도하고 인증을 수행하는 역할을 한다.
  • econn: econn은 SSH 연결 에이전트 전달을 의미한다. -A 옵션을 사용하여 econn을 활성화할 수 있다. econn은 SSH 클라이언트에게 SSH 에이전트에 있는 인증 키를 전달하는 역할을 한다. 이를 통해 사용자는 Bastion 서버를 통해 연결된 다른 서버에 대한 인증 절차 없이 SSH 에이전트에 등록된 키를 사용할 수 있다.

따라서, conn은 SSH 연결을 설정하고 호스트에 직접 접속하는 역할을 하며, econn은 SSH 에이전트를 통해 인증 키를 전달하여 추가적인 접속 단계를 거치지 않고 다른 서버에 접속할 수 있는 기능을 제공한다.

'DevOps' 카테고리의 다른 글

AWS Route 53 (+DNS)  (0) 2023.08.12
EC2란 무엇인가  (0) 2023.05.27
Jenkins 개념 및 용어 정리  (0) 2023.05.13
Grafana, Loki, Prometheus  (0) 2023.02.19