AWS 클라우드에도 온프레미스 처럼 베스천호스트를 구성하여 사용한다.
외부에서 직접 접속하면 안되는 서버, DB 등의 인스턴스를 보호하고,
접속 시 안전하게 접속하는 것이 목적이다.
온프레미스로 구성 시 콘솔로 직접 연결하거나, 내부망 스위치에 케이블을 연결하여
접속이 가능하지만, 클라우드는 내부의 네트워크 장비, 콘솔 등을 통해 직접 접속할 수 없다. 그러므로 클라우드에서 구성한 베스천호스트를 통해 접속하는 방법밖엔 없다.
보안성 향상을 위해 베스천호스트 앞단에 AWS 보안 서비스를 추가하거나, 베스천호스트 인스턴스의 보안그룹 설정 및 추가 인증 도입 등을 고려할 수 있다.
네트워크 망 구성(VPC, 퍼블릭/프라이빗 서브넷, 라우팅) 후 IGW 까지 연결한 전 단계를 볼려면 하기의 두 글을 참고한다.
[AWS] VPC, SUBNET 네트워크 망 구성
[AWS] IGW로 외부 인터넷 연결
우선 베스천호스트 서버를 생성한다.

키 값을 별도로 만들어 저장하고, 이 키는 베스천호스트, 사설대역 EC2 인스턴스 모두 사용한다.

기존에 구성한 VPC, public subnet 에 연결하고 보안그룹을 생성해 ssh, http 통신을 모두 허용한다.

그래도 돌아가는지 확인은 해야 하니, 접속만 해볼 수 있는 웹 서버를 올린다.
(userdata 에 아파치 서버를 설치하는 코드를 올린다.)

다음은 사설대역의 EC2 인스턴스를 설치하는데, auto assign public ip를 disable 로 한다. 왜냐면, 외부 인터넷과의 직접적인 연결을 막고, 베스천호스트(EC2) 로만 접속하도록 하기 위한 조치이다. (어차피 프라이빗 서브넷으로는 라우팅을 구성하지 않았으므로, 공인 ip가 있어도 통신은 안될 것이다.)
보안그룹 설정은 ssh, 출발지는 10.0.0.0/16 으로 하는데 꼭 이렇게 할 필요는 없고
어차피 퍼블릭 서브넷을 통해 오게 할 것이므로 10.0.1.0/24 또는 베스천호스트 사설 ip로 설정해도 된다. (지난번 네트워크 망 구성 때 public subnet 1 을 10.0.1.0/24 로 구성했다.)
이렇게 설정한 뒤 생성 !

EC2 인스턴스 목록에서 보면 베스천호스트 인스턴스는 공인 ip가 있고, 프라이빗 인스턴스는 공인 ip가 없고 사설 ip만 있으니 참고

베스천 호스트 인스턴스에 ssh 로 접속하고,

베스천호스트에서 ssh ec2-user@[프라이빗 인스턴스 ip] 로 접속해보면, 키 인증이 실패되었다고 나온다.
(참고로 베스천호스트는 10.0.1.230, 프라이빗 인스턴스는 10.0.2.35 이다.)
베스천호스트는 프라이빗 인스턴스가 갖고 있는 키가 없기 때문인데, 베스천호스트 EC2에 프라이빗인스턴스가 사용하는 키를 만들어 주면 된다.
베스천호스트에서 vi [생성한 key 파일명] 으로 생성하고, 생성한 파일의 내용을 프라이빗 인스턴스 key 파일의 내용으로 붙여넣기 해야 한다.
(생성한 key 파일명, 내용을 그대로 입력 또는 복붙 해야 한다.)

pc에 저장된 key 파일을 메모장으로 열면 이상한 값들이 보이는데, 이걸 복사해서
베스천호스트에서 생성한 key 파일의 내용으로 붙여넣는다. 복붙 후 :wq 를 입력해 저장한다.

키 파일을 생성했으니 프라이빗 인스턴스 접속 ssh 명령어를 다음과 같이 사용한다.
ssh ec2-user@[프라이빗 인스턴스 ip] -i [key파일명,pem]
그런데 권한이 거부되었다고 나오니, 생성한 key 파일의 권한을 수정해야 한다.

chmod 400 [key 파일명.pem] 으로 읽기 권한을 부여하고, ssh 명령어를 다시 실행하면
베스천호스트에서 프라이빗 인스턴스로 접속할 수 있다. 프라이빗 인스턴스 주소는 10.0.2.35 이므로 정상 접속 되었음을 알 수 있다. (베스천호스트 ip는 10.0.1.238 이다)

그리고 private 인스턴스에 직접 접속해보면

당연한 결과지만, 공인 ip 가 없어서 접속할 수 없다고 나오고, 물론 라우팅도 없어서 공인 ip가 있었다 하더라도 접속 할 수 없다.

이번 작업 구성도로 그리면 위와 같다.