Bastion Host 사용하는 이유

 

AWS에서 VPC를 별도로 생성한 후 Private 서브넷에 리소스들을 생성했다면, VPC 외부에서접근 하기 위해서는 VPN, Direct Connect 방법을 사용해야 합니다. 하지만 구축하기에 리소스가 듭니다. 따라서 동일한 VPC에 Public에서 접근 가능한 인스턴스를 생성한 후 ssh를 통해 연결할 수 있는 방법이 있습니다. 그것이 Bastion Host입니다. 제가 사용했던 용도로는 RDS Severless Aurora같은 경우 Private에 밖에 생성을 할 수 없으므로 Public에서 접근이 불가능해 Local에서 애플리케이션을 실행할 수 없었는데, Bastion Host의 ssh를 통해서 접근을 했습니다. 

 

이때 다른 사용자가 Bastion Host를 사용하기 위해서 만들 때 사용한 key_pair를 공유하는 것은 바람직하지 않습니다. 따라서 사용자에 따른 Key를 등록해서 접속할 수 있게 해줘야 합니다. 그것이 사용자 관리입니다. 

 

Bastion Host 만들기

Terraform 을 이용해서 환경을 만들 예정입니다. 각각의 모듈은 제 레포지토리에 정의돼 있으며, 사용법은 레포지토리 README 파일에 적어놓겠습니다. (Terraform Bastion Host Repository)

 

rlaehdals/AWS-bastion-host-terraform

Contribute to rlaehdals/AWS-bastion-host-terraform development by creating an account on GitHub.

github.com

 

Bastion Host 사용자 관리

 

위의 README를 통해서 리소스들을 만들었다면, 이제 다른 사용자 또한 Bastion Host에 접근할 수 있도록 만들어보겠습니다. 

 

1. ec2 만들 때 사용한 key pair말고 새로운 key pair 생성

 

ssh-keygen -f {pwd}/dkim (저는 dkim 유저를 만들 예정이므로 dkim이라고 키를 생성해줬습니다.)

 

 

2. 기존의 key pair로 ec2 인스턴스 접속

 

ssh EC2_ROOT 입력하여 접속

 

3. 사용할 유저의 이름으로 사용자 추가

 

sudo adduser dkim // 새로운 유저 생성

sudo su - dkim // 유저의 모든 권한을 주고 생성

chmod 700 .ssh // .ssh 폴더에 대한 권한 허용

touch .ssh/authorized_keys // authorized_keys 파일 생성

chmod 600 .ssh/authorized_keys // 권한 허용

vim .ssh/authorized_keys // 파일 생성

새롭게 만든 키페어의 public key 값을 넣어준다.

 

4.  ssh config 추가 작성

 

위에서 ssh config를 작성한 것처럼 밑에 추가해준다. 나는 dkim 유저를 추가했으므로, 아래와 같이 추가해준다.

 

Host EC2_DKIM
  HostName 255.255.255.255 (본인 ec2의 public IP)
  User dkim (aws linux의 경우 root가 ec2-user이다.)
  IdentityFile {pwd}/dkim (아까 위에서 ssh-keygen을 만들 때 사용한 경로를 입력한다.)

 

마지막으로 ssh EC2_DKIM을 입력하여 접속을 확인하면 마무리 된다. 

 

5. 정리

 

Private Subnet에 위치한 리소스에 접근하기 위해 Bastion Host를 만들고, 여러 사용자가 접근할 수 있도록 만들었다. Terraform으로 모든 코드를 작성하는 것은 쉽지 않았다. 하지만 한 번 작성해놓으면 재사용이 가능하므로 매우 편리하다는 것을 다시금 느꼈다. 혹여나 코드가 동작 안 한다면, 댓글 부탁드립니다.