서버 인프라/Aws

SSH Bastion 안전하게 연결하기

트리맨스 2023. 7. 14. 15:16
반응형

 

일반적인 웹(서버) 애플리케이션을 배포할 때는 외부에 보여지는 계층(80, 443포트)을 제외하고 다른 외부 출입은 다 막아버린다. 이 때 만약 개발자가 외부에서 직접 애플리케이션에 접속해야 할 때는 Bastion(배스쳔) 호스트를 통해서 접속한다. 

 

애플리케이션 구조


먼저 실행되는 애플리케이션은 프라이빗 서브넷에 있다고 가정하자. 프라이빗 서브넷의 애플리케이션은 일반적으로 외부에서 접속하지 못한다. 하지만 ssh연결을 해야 할 경우에는, 퍼블릭 서브넷에 있는 배스쳔 호스트를 통해서 애플리케이션으로 접속한다. ssh 터널링이다. 그림으로 그리게 되면 다음과 같다.

 

 

아마존 ec2 인스턴스는 공개키를 사용해서 인스턴스에 접속하는 방식을 기본적으로 채택하고 있다. ssh에 pem파일을 태워서 접속하면 된다. 이 때 주의할 것이 배스쳔에 애플리케이션 pem파일을 저장하는 것은 권장하지 않는 방식이다. 이렇게 사용하게 어떻게든 배스쳔에 접속하게 되면 애플리케이션에 접속할 수 있는 키가 있기 때문에 보안에 취약하다. 그래서 호스트에 배스쳔 공개키와 애플리케이션 공개키를 두고 접속하는 방식이 권장된다.

 

위와 같은 방법으로 접속하는 과정은 다음과 같다.

  1. ssh-add [애플리케이션 key파일] : 프라이빗 서브넷의 애플리케이션의 key파일을 ssh-add로 실어준다
  2. ssh-add -L : 1에서 실어둔 pem파일 확인
  3. ssh -A -i [배스쳔 key파일] user@bastion-ip : 배스쳔에 접속한다
  4. ssh user@application-ip : 애플리케이션에 접속한다. 1에서 애플리케이션의 key파일을 실어주었으므로 접속 가능

 

 

 

 

반응형