본문 바로가기
공부/AWS

[AWS] ssh key forwarding (Windows)

by 웅대 2024. 11. 5.
728x90
반응형

Bastion Host란?

Bastion Host는 외부 네트워크와 내부 프라이빗 네트워크 사이의 게이트웨이 역할을 수행한다.

 

클라우드 환경에서 보안이 중요한 EC2를 private subnet에 생성했다고 하자.

 

private subnet에 생성된 EC2는 외부 네트워크로부터 직접적인 트래픽을 받지 못 하고 직접적으로 트래픽을 보내지도 못 한다.

 

오직 같은 VPC 내부에서 접근이 가능하다.

 

 

그런데 AWS와 같은 퍼블릭 클라우드 공급 업체를 사용할 경우 어떻게 private subnet에 존재하는 EC2 인스턴스에 접근할 수 있을까?

 

여러가지 방법이 있지만 그 중 하나는 Bastion Host를 사용하는 것이다.

 

Bastion Host 역할을 할 EC2 인스턴스를 public subnet에 생성하고 보안이 중요한 EC2 인스턴스를 private subnet에 생성한다.

Bastion Host는 public subnet에 존재하기 때문에 인터넷을 통해 접근이 가능하고 이 Bastion Host는 보안이 중요한 EC2와 같은 VPC 내부에 존재하기 때문에 접근할 수 있다.

 

즉 Bastion Host를 통해서 간접적으로 private EC2에 접근할 수 있는 것이다.

 

ssh key forwarding

AWS에서 EC2를 생성할 때 키 파일을 생성할 수 있고 이 키 파일을 통해 EC2 인스턴스에 접근할 수 있다. 

 

Bastion Host에 접근할 수 있는 키 파일을 A.pem이라고 하고 private EC2에 접근할 수 있는 키 파일을 B.pem이라고 하자.

 

현재 로컬 컴퓨터에는 A.pem과 B.pem 파일이 모두 저장되어 있다.

 

이제 Bastion Host를 통해 private EC2에 접근하려고 한다.

 

가장 직관적인 방법은 다음과 같다.

 

  1. B.pem 파일을 Bastion Host에 복사한다.
  2. A.pem 파일을 통해 Bastion Host에 접속한다.
  3. Bastion Host에서 B.pem 파일을 통해 private EC2에 접근한다.

쉬운 방법이지만 조금 위험한 방법이다.

 

애초에 public EC2인 Bastion Host에 private EC2에 대한 키 파일을 담는다는 것은 Bastion Host에 접속할 수 있는 모두가 private EC2에 접근할 수 있다는 뜻이다.

 

물론 A.pem 파일을 안전하게 잘 관리하여 아무나 Bastion Host에 접속할 수 없게 하면 큰 문제는 없겠지만 가장 좋은 방법은 Bastion Host에 B.pem 파일을 담지 않는 것이다.

 

그렇다면 오직 로컬 컴퓨터에만 A.pem, B.pem 파일이 있고 B.pem 파일을 Bastion Host에 두지 않고 private EC2에 접근할 수 있는 방법이 뭐가 있을까?

 

이럴 때 사용할 수 있는 것이 ssh key forwarding이다.

 

ssh agent를 사용하는데 이는 private key를 메모리에 저장하여 ssh client에게 private key를 노출하지 않을 수 있다.

 

Windows에서 ssh key forwarding 하기

우선 서비스를 검색해서 들어간다.

 

다양한 서비스 중 OpenSSH Authentication Agent를 찾는다.

저기서 시작 유형이 "자동"으로 설정되어 있어야 한다.

 

만약 자동으로 설정되어 있지 않다면 우 클릭 후 속성에 들어가서 시작 유형을 자동으로 바꿔준다.

 

 

ssh-agent를 시작한다.

Start-Service ssh-agent

 

키 파일을 등록한다.

ssh-add "키 파일"

 

-A 옵션을 통해 Bastion Host에 접근한다.

ssh -A [유저 이름]@[Bastion Host ip 주소]

 

Bastion Host에 접근한 뒤 private EC2의 private IP 주소를 통해 접속하면 된다. 

728x90
반응형

댓글